SIFT解析(三)生成特征描述子
以上两篇文章中检测在DOG空间中稳定的特征点,lowe已经提到这些特征点是比Harris角点等特征还要稳定的特征。下一步骤我们要考虑的就是如何去很好地描述这些DOG特征点。
下面好好说说如何来描述这些特征点。许多资料中都提到SIFT是一种局部特征,这是因为在SIFT描述子生成过程中,考虑的是该特征点邻域特征点的分布情况(而没有利用全局信息)。本步骤中主要计算过程包括:确定特征点的方向和生成特征描述符。
确定特征点方向
在特征点的确定过程中,特征点的坐标以及尺度被确定下来(坐标很重要,尺度更重要,到后来,你会发现尺度这个参量在整个描述子生成过程中越来越重要,因为正是运用尺度参量实现的Scale-Invariant,尺度不变!),根据特征点的尺度选择高斯金字塔中的图像,然后在这幅图像上确定该特征点的方向。这里体现的正是尺度不变的思想。
特征点方向的确定基于统计信息,以该特征点为中心,考察与该特征距离为**像素的梯度方向和梯度的幅值,梯度的方向和幅值的计算公式分别为:
构造该点邻域梯度方向直方图,将一圆周360°划分成36个槽,从0°开始每槽递增10°。根据邻域点的方向、梯度的幅值以及距离特征点的远近构建上述梯度方向直方图,如下图所示:
根据梯度直方图,直方图峰值所对应的的角度就是当前特征点A的方向,同时如果某角度的梯度幅值和>=峰值的80%,那么就产生一个新的特征点B,这个点的坐标、尺度等参数同A,但是角度不同。
至此,特征点的方向确定完毕。
生成图像局部描述符
到了本步骤,图像中每个特征点的坐标、尺度以及方向都确定了,下面开始根据这些信息获得描述子。
与上文中提到的确定特征点方向类似,生成描述子也是根据以特征点为中心的图像局部信息,首先根据特征点的尺度选择高斯金字塔中的图像,然后计算特征点邻域范围内各点的梯度方向和梯度的幅值,并根据上文得到的特征点梯度方向更新这些梯度的方向,以此达到描述子的方向不变性。
方向不变性完成后,开始计算特征描述符了。描述符计算过程同样基于梯度方向直方图,只是这次直方图的槽是以45°划分的(因此每个直方图只有8个槽),而不是10°。具体过程如下图所示:
统计每个4×4块的方向梯度直方图,为了去除光照对描述子的影响,对梯度直方图进行归一化处理。然后将每个直方图槽数据串联即可得到SIFT描述子,lowe提出当梯度方向直方图是4×4维的时候,SIFT描述子具有最好的区分度,因此这就诞生了老生长谈的128维SIFT特征向量,如下图所示:
至此,SIFT特征计算过程结束。