在得到合适的特征点位置后,为每个特征点分配方向,从而使描述子能实现图像旋转不变性,这也是我们SIFT第三步方向分配的主要目的。
SIFT中方向分配主要从以下几个步骤进行。
1、计算梯度幅值和幅角
需要根据检测到的特征点的局部图像结构求得一个方向基准。我们使用图像梯度方向求取该局部结构的稳定方向。对于已经检测到的特征点,我们知道该特征点的尺度值
σ
,因此根据这一尺度值,求得最接近这一尺度值的高斯图像:
该特征点的梯度:
使用有限差分,计算以特征点为中心,以
3×1.5σ
为半径的区域内图像梯度的幅角和幅值(模值),幅值和幅角的计算如下:
2、加权处理
每个加入梯度直方图的采样点梯度幅值都要进行权重处理,加权采用圆形高斯加权函数,其
σ
值为特征点尺度的1.5倍。
由于SIFT只考虑了尺度和旋转不变性,并没有考虑仿射不变性。通过高斯加权,使特征点附近的梯度幅值有较大的权重,这样可以弥补因没有仿射不变性而产生的特征点不稳定的问题。
3、生成方向梯度直方图
在完成特征点邻域的高斯图像的梯度计算后,使用直方图统计邻域内像素的梯度方向和幅值。梯度方向直方图的横轴是梯度方向角,纵轴是梯度方向角对应的梯度幅度累加值。
梯度方向直方图将
0o−360o
的范围,分为36个柱,每
10o
一个柱。直方图的峰值代表了改特征点处邻域内图像梯度的主方向,也即该特征点的主方向。如下是一个
8×8
的邻域,以直方图统计该邻域内的方向,计算出峰值方向,如下:
4、辅方向
当梯度方向直方图中,当存在另一个相当于主峰值80%能量的峰值时,则将这个方向认为是该特征点的辅方向。一个特征点可能会被指定具有多个方向(一个主方向,一个以上辅方向),这可以增强匹配的鲁棒性,具体就是把该特征点复制成多份特征点,并将方向值分别赋给这些复制后的特征点,通常离散的梯度方向直方图进行插值拟合处理,这样可以求得更精确的方向角度值。
以上,在获得了图像的特征点主方向后,每个特征点有三个信息 (x,y,σ,θ) :位置、尺度、方向,前俩个值是使用SIFT特征点检测得到的,特征点的主方向就是我们这一步求得的。