SIFT:一种基于尺度空间的对于图像缩放、旋转甚至仿射变换保持不变性的图像局部特征描述算子。
SIFT流程可以理解为1.如何找到关键点2.怎么表示128维SIFT特征的
1.如何找到关键点
首先什么是尺度空间:尺度空间是对原始图像进行尺度变换,获得多尺度下的表示序列,尺度越大,图像越模糊。正是由于多尺度,所以可以曹正尺度不变性。
高斯核可以完成这一任务。L为尺度空间,I为原始图像,G为高斯核。
再引入高斯金字塔:就是将图像缩小比例,每缩小一次成为一个octave,按原图像的长缩小1/2宽缩小1/2,这过程叫做下采样,所以图像的大小决定了塔有几个octave。每个octave中又可以分为几层(每个octave层的大小是一样的).其中octave2的第1张图是由octave1的第三张图片下采样得到的。
下图为上图的高斯金字塔的一个实例,每一排代表一个octave
但是为了能够有效地找到稳定的关键点,引入了高斯差分空间difference of GaussIan(DOG)
相应的高斯差分金字塔:如下图,左边为高斯金字塔,右边每两层相减得到一个高斯差分。接下来就要在高斯差分空间得到关键点了,我们的关键点是由高斯差分空间的局部极值点组成,所以我们要找到局部极值点。
为了寻找局部极值点,我们要和该像素所有相邻点比较,包括图像域和尺度域。从下图可以看到当前图像域可以得到8个相邻的点,尺度域可以得到9*2=18个点,所以一共26个点。
对DOG函数泰勒展开
求导并令其为0可以得到像素点位置
在得到的点中我们需要去除低对比度点和不稳定的边缘相应点。
1.将得到的解代入刚刚泰勒展开的式子中可以得到
当|D(X)|小于某个阈值就丢弃。
---去除低对比度--》
2.去除边缘响应
DoG函数的(欠佳的)峰值点在横跨边缘的方向有较大的主曲率,而在垂直边缘的方向有较小的主曲率。
主曲率可以由Hessian矩阵求得。
H=[Dxx Dxy]
[Dyx Dyy]
Dxx表示DOG金字塔中某一尺度的图像x方向求导两次.
D的主曲率和H的特征值成正比,为了避免直接的计算这些特征值,而只是考虑它们的之间的比率。令为最大特征值afa,beta 为最小的特征值(代表x和y方向的梯度),则
(r+1)2/r在两特征值相等时达最小,随r的增长而增长。值越大,说明两个特征值的比值越大,即在某一个方向的梯度值越大,而在另一个方向的梯度值越小,而边缘恰恰就是这种情况。所以为了剔除边缘响应点,需要让该比值小于一定的阈值,因此,为了检测主曲率是否在某域值r下,只需检测
满足时保留,反之剔除。
2.关键点描述
确定关键点的方向采用梯度直方图统计法,统计以关键点为原点,一定区域内的图像像素点对关键点方向生成所作的贡献。直方图以每10度方向为一个柱,共36个柱,柱所代表的方向为像素点梯度方向,柱的长短代表了梯度幅值。关键点主方向:极值点周围区域梯度直方图的主峰值,也是特征点方向。关键点辅方向:在梯度方向直方图中,当存在另一个相当于主峰值80%能量的峰值时,则将这个方向认为是该关键点的辅方向。
描述子由2×2×8维向量表征,也即是2×2个8方向的方向直方图组成。左图的种子点由8×8单元组成。每一个小格都代表了特征点邻域所在的尺度空间的一个像素,箭头方向代表了像素梯度方向,箭头长度代表该像素的幅值。然后在4×4的窗口内计算8个方向的梯度方向直方图。绘制每个梯度方向的累加可形成一个种子点,如右图所示:一个特征点由4个种子点的信息所组成。