SIFT是一种局部特征,在SIFT描述子生成过程中,考虑的是该特征点邻域特征点的分布情况(没有利用全局信息)。本步骤中主要过程包括:确定特征点的方向,生成特征描述符。
确定特征点方向
在特征点确定过程中,特征点的坐标以及尺度被确定下来,根据特征点的尺度选择高斯金字塔中的图像,然后在这幅图像上确定该特征点的方向,这里体现了尺度不变的思想。
特征点方向的确定基于统计信息,以该特征点为中心,考察与该特征距离为xx像素的点的梯度方向和梯度的赋值。梯度的方向和模值的计算公式如下:

构造该点邻域梯度方向直方图,将一圆周360°划分为36个槽,从0°开始每槽递增10°,根据邻域点的方向、梯度的幅值,以及距离特征点的远近构建上述梯度方向直方图。如下图所示:

梯度直方图峰值所对应的角度就是当前特征点A点的方向,同时如果某角度的梯度幅值和大于等于峰值的80%,那么就产生一个新的特征点B,这个点的坐标,尺度等参数同A,但角度不同。
得到特征点的主方向之后,对于每个特征点可以得到三个信息:位置、尺度和方向。由此可以确定一个SIFT特征区域,一个SIFT特征区域由三个值表示,中心表示特征点位置,半径表示关键点尺度,箭头表示主方向。具有多个方向的关键点可以被复制成多份,然后将方向值分别赋给复制后的特征点,一个特征点就产生了多个坐标、尺度相等,但是方向不同的特征点。
至此,特征点的方向确定完毕。
生成图像局部描述符
到了这一步,图像中每个特征点的坐标、尺度以及方向都确定了,下面开始根据这些信息获得描述子。这个描述子不只包含特征点,也含有特征点周围对其有贡献的像素点。
特征描述符的生成大致有三个步骤:
1.校正旋转主方向,确保旋转不变性。
2.生成描述子,最终形成一个128位的特征向量。
3.归一化处理,将特征向量长度进行归一化处理,进一步去除光照的影响。
为了保证特征矢量的旋转不变性,要以特征点为中心,在附近邻域内将坐标轴旋转θ(特征点的主方向)角度,即将坐标轴旋转为特征点的主方向。
旋转后领域内像素的新坐标为:

将坐标轴旋转为关键点的方向,以确保旋转不变性。


旋转前 旋转后
旋转后以主方向为中心取8*8的窗口。如下面左图所示:

图像梯度 关键点描述符
左图的中央为当前关键点的位置,每个小格代表关键点邻域所在尺度空间的一个像素,求每个像素的梯度幅值和梯度方向,箭头方向代表该像素的梯度方向,长度表示梯度幅值,然后利用高斯窗口对其进行加权运算。最后在每个4*4的小块上绘制8个方向的梯度直方图,计算每个梯度方向的累加值,即可形成一个种子点,如右图所示。每个特征点由4个种子组成,每个种子点有八个方向的向量信息。这种邻域方向性信息联合增强了算法的抗噪声能力,同时对于含有定位误差的特征匹配也提供了比较理性的容错性。
与求主方向不同,此时每个种子区域的梯度直方图在0°~360°之间划分为8个方向区间,每个区间为45°,即每个种子点有8个方向的梯度强度信息。
在实际计算中,为增强匹配的稳健性,Lowe建议,对每个关键点使用4*4共16个种子点来描述,这样一个关键点就可以产生128维的SIFT特征向量。

特征向量形成后,为了去除光照变化的影响,需要对它们进行归一化处理,因为图像各点的梯度是邻域像素相减得到的,所以对于图像灰度值整体偏移也能去除。
得到的描述子向量为:H=(h1,h2,h3,…,h128),归一化后的特征向量为L=(L1,L2,…,L128),则:

非线性光照,相机饱和度变化对造成某些方向的梯度值过大,而对方向的影响微弱。因此设置门限值(向量归一化之后,一般取0.2)截断较大的梯度:大于0.2的就令它等于0.2,小于0.2则保持不变。然后再进行一次归一化处理,提高特征的鉴别性。
浙公网安备 33010602011771号