尺度不变特征变换匹配算法 Scale Invariant Feature Transform(SIFT) 是一种电脑视觉的算法用来侦测与描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取出其位置、尺度、旋转不变量,此算法由 David Lowe在1999年所发表,2004年完善总结。
基本步骤:
- 尺度空间的极值检测
- 删除不好的极值点,留下来的就是特征点
- 特征方向幅值
- 特征点描述
step1:差分高斯金字塔
图像金字塔、高斯金字塔、差分高斯金字塔
step1.5:尺度空间的极值检测
图像金字塔、高斯金字塔、差分高斯金字塔尾部
step2:删除不好的极值点
(求导链接)
step3-去除边缘效应
由于DoG函数在图像边缘有较强的边缘响应,而边缘上的极值点抗噪性较差,因此我们还需要排除边缘响应。为什么边缘上的点不好呢?一方面图像边缘上的点是很难定位的,具有定位歧义性;另一方面这样的点很容易受到噪声的干扰而变得不稳定。
怎么消除这些在边缘的极值点呢?
假设图像像素如图所示,边缘位置像素值急剧变化
一个定义不好的高斯差分算子的极值在横跨边缘的地方有较大的主曲率(红色),而在垂直边缘的方向有较小的主曲率(紫色)。
对于分布在边缘上附近的极值点,它们的较大的主曲率和较小的主曲率之比,一般情况下要比非边缘点的比值大
根据这种思想,我们可以设一个比值的阈值,当比值大于这个阈值就认为极值点在边缘上。
参考公式:--------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
step4-确定关键点(极值点)方向
为什么要确定方向,确定啥方向?
为了使描述符具有旋转不变性,需要利用图像的局部特征为给每一个关键点分配一个基准方向。这样就算目标旋转,其他特征都相对与基准方向,并不会因为目标旋转而改变。那么怎么求这个基准方向呢?
统计的是以该特征点为圆心,以该特征点所在的高斯图像的尺度 σ 的4.5倍为半径的范围内像素点。
在此区域内做1.5σ的高斯滤波(高斯加权,离圆心也就是关键点近的幅值所占权重较高).
当关键点有两个方向,一个主方向,一个辅方向(梯度幅值>=80%主方向梯度幅值),
那么把这个关键点看成两个关键点,只不过这两个关键点的坐标和σ一样,只是方向不一样.
至此,我们计算出的带有位置、尺度和方向的关键点也就是sift特征点。
关键点描述
step5. 关键点描述
现在我们算出来的特征点,都是在固定在图片坐标系中的特征描述。我们需要脱离图片坐标系的固定限制,提取出特征点的局部描述,这样就可以与其他图片的相似的部分去作对比,我们来看看怎么提取局部描述子。
生成局部描述符的思路就是:通过对关键点的周围区域分块,计算块内的梯度直方图,生成具有独特性的向量,这个向量应该是该区域图像信息的一种抽象,并且具有唯一性。