特征提取
SIFT算法提取步骤
SIFT算法提取特征点的主要步骤:
(1)检测尺度空间极值点
检测尺度空间极值的目的是确定特征点位置和所在尺度组。即先使用高斯过
滤器对原始图像进行若干次连续滤波建立第一个尺度组,再把图形减小到原来的
一半,进行同样的高斯滤波形成第二个尺度组。之后,重复操作直到图像小于某
一个给定阀值为止。接下来对每个尺度组中的高斯图像进行差分,形成高斯差分
尺度组(DoG尺度图像)。
图3-1 尺度空间的构造
在上面建立的DoG尺度空间金字塔中,为了检测到DoG空间的最大值和最小值,
DoG尺度空间中中间层(最底层和最顶层除外)的每个像素点需要跟同一层的相
邻8个像素点以及它上一层和下一层的9个相邻像素点总共26个相邻像素点进
行比较,以确保在尺度空间和二维图像空间都检测到局部极值,如图3-2所示
图3-2 DoG空间局部极值检测
在图3-2中,标记为叉号的像素若比相邻26个像素的DoG值都大或都小,则该
点将作为一个局部极值点。被检测工件的高斯滤波图像如图3-3所示。
图3-3 原始图像和部分高斯滤波图像
(2)精确定位极值点
由于DoG值对噪声和边缘较敏感,因此,在上面DoG尺度空间中检测到局部
极值点还要经过进一步的检验才能精确定位为特征点。一般通过二阶Taylor展
开式计算极值点的偏移量,获得亚像素定位精度,同时通过阈值设置剔除差异小
的点。最终保留下来的点称为特征点,特征点的检测是在尺度空间中进行的,特
征点保持为尺度不变量。各层图像特征点如图3-4所示。
图3-4 各层图像的特征点
(3)为每个关键点指定方向参数
—尺度空间坐标
O—组(octave)数
S—组内层数
在上述尺度空间中,O和S,的关系如下:
2,...,0,1,...,02,0SsOoso
S
s
o
(3-10)
其中0是基准层尺度,o为组octave的索引,s为组内层的索引。关键点的尺
度坐标就是按关键点所在的组和组内的层,利用公式(3-10)计算而来。
在最开始建立高斯金字塔时,要预先模糊输入图像来作为第0个组的第0层
的图像,这时相当于丢弃了最高的空域的采样率。因此通常的做法是先将图像的
尺度扩大一倍来生成第-1组。我们假定初始的输入图像为了抗击混淆现象,已
经对其进行5.01的高斯模糊,如果输入图像的尺寸用双线性插值扩大一倍,
那么相当于0.11。
取式(3-9)中的k为组内总层数的倒数,即:
s
k12
(3-11)
在构建高斯金字塔时,组内每层的尺度坐标按如下公式计算:
2012
0
ss
kks
(3-12)
其中0初始尺度,lowe取6.10,3S为组内的层索引,不同组相同层的组
内尺度坐标s相同。组内下一层图像是由前一层图像按s进行高斯模糊所
得。式(3-12)用于一次生成组内不同尺度的高斯图像,而在计算组内某一层图像
的尺度时,直接使用如下公式进行计算:
2,...,02_0Sssoct
S
s
(3-13)
该组内尺度在方向分配和特征描述时确定采样窗口的大小。
由上,式(3-9)可记为:
yxIsyxGsyxGyxD,,,1,,,,
syxLsyxL,,1,,
(3-14)
(4)生成SIFT特征描述符
首先将坐标轴旋转为特征点的方向,以确保旋转不变性。接下来以特征点为
中心取8×8的窗口(特征点所在的行和列不取)。在图3-3左边,中央黑点为当
前特征点的位置,每个小格代表特征点邻域所在尺度空间的一个像素,箭头方向
代表该像素的梯度方向,箭头长度代表梯度模值,图中圈内代表高斯加权的范围
(越靠近特征点的像素,梯度方向信息贡献越大)。然后在每4×4的图像小块上
计算8个方向的梯度方向直方图,绘制每个梯度方向的累加值,形成一个种子点,
如图3-5右边图所示。此图中一个特征点由2×2共4个种子点组成,每个种子
点有8个方向向量信息,可产生2×2×8共32个数据,形成32维的SIFT特征
向量,即特征点描述器,所需的图像数据块为8×8。这种邻域方向性信息联合
的思想增强了算法抗噪声的能力,同时对于含有定位误差的特征匹配也提供了较
好的容错性。实际计算过程中,为了增强匹配的稳健性,建议对每个特征点使用
4×4共16个种子点来描述,每个种子点有8个方向向量信息,这样对于一个特
征点就可以产生4×4×8共128个数据,最终形成128维的SIFT特征向量,所
需的图像数据块为16×16。此时SIFF特征向量已经去除了尺度变化、旋转等几
何变形因素的影响,再继续将特征向量的长度归一化,则可以进一步去除,光照
变化的影响。
图3-5 像梯度(左)及特征点描述器(右)
原始SIFT特征提取结果如图3-6所示。其中加号表示特征点位置,方框表示尺
度大小,不同颜色表示采样频率不同。
图3-6 SIFT特征提取结果