SIFT算法实现步骤 :1 关键点检测、2 关键点描述、3 关键点匹配、4 消除错配点
参考链接:
http://blog.csdn.net/zddblog/article/details/7521424
http://www.cnblogs.com/v-July-v/archive/2011/03/13/1983663.html
1关键点检测
1.1 建立尺度空间
根据文献《Scale-space theory: A basic tool for analysing structures at different scales》我们可知,高斯核是唯一可以产生多尺度空间的核,一个图像的尺度空间,L(x,y,σ) ,定义为原始图像I(x,y)与一个可变尺度的2维高斯函数G(x,y,σ) 卷积运算。
?(x?xi)2?(y?yi)2?1高斯函数 G?xi,yi,???exp???2??22?2??
L?x,y,???G?x,y,??*I?x,y?
高斯金字塔
Octave 5Octave 4Octave 3…高斯金字塔的构建过程可分为两步:
4?(1)对图像做高斯平滑;
(2)对图像做降采样。
2?为了让尺度体现其连续性,在简单 下采样的基础上加上了高斯滤波。 一幅图像可以产生几组(octave) 图像,一组图像包括几层 (interval)图像。 ?高斯图像金字塔共o组、s层, 则有:
s?SS?(s)??2 o?1o
σ——尺度空间坐标;s——sub-level层坐标;σ0——初始尺度;S——每组层数(一般为3~5)。
当图像通过相机拍摄时,相机的镜头已经对图像进行了一次初始的模糊,所以根据高斯模糊的性质:
?0??init??init??pre??pre
? init-第0层尺度 ? pre--被相机镜头模糊后的尺度
高斯金字塔的组数: O ?? log2 min ?M ,N? ??3 M、N分别为图像的行数和列数
??
高斯金字塔的组内尺度与组间尺度:
组内尺度是指同一组(octave)内的尺度关系,组内相邻层尺度化简为:
1 ?s?1??s2S
…8?…Octave 2…Octave 1…??组间尺度是指不同组直接的尺度关系,相邻组的尺度可化为: ss?SsSS?(s)??02?o2?2?o2S
最后可将组内和组间尺度归为:
1 Si?12n?1k?22(?,k?,k?,k?)
i—金字塔组数 n—每组层数
上一组图像的底层是由前一
组图像的倒数第二层图像隔点采样生成的。这样可以保持 尺度的连续性。
二维卷积:
差分高斯金字塔
Lindeberg在文献《Scale-space theory: A basic tool for analysing structures at different scales》指出尺度规范化的LoG算子具有真正的尺度不变性。
LoG算子即(Laplacion of Gaussian),可以由高斯函数梯度算子GOG构建 尺度规范化的GoG算子: 22?G?G2 ?G?2?2?x?y
尺度规范化的LoG算子: ? 2?2GLOG算子与高斯核函数的关系
Gauss(x,y,k?)?Gauss(x,y,?)
LOG(x,y,?)??2?2G? ?2(k?1) G?x,y,k???G?x,y,????k?1??2?2G
通过推导可以看出,LOG算子与高斯核函数的差有直接关系,由此引入一种新的算子DOG(Difference of Gaussians),即高斯差分算子。
DoG(Difference of Gaussian)函数:
L?x,y,???G?x,y,??*I?x,y?D?x,y,?????G?x,y,k???G?x,y,????*I?x,y??L?x,y,k???L?x,y,??DoG在计算上只需相邻尺度高斯平滑后图像相减,因此简化了计算。
对应DOG算子,我们要构建DOG金字塔
我们可以通过高斯差分图像看出图像上的像素值变化情况。(如果没有变化,也就没有特征。特征必须是变化尽可能多的点。)DOG图像描绘的是目标的轮廓。
在Lowe的论文中,将第0层的初始尺度定为1.6,图片的初始尺度定为0.5,则图像金字塔第0层的实际尺度为 1.6?1.6?0.5?0.5?1.52
1.2 DoG的局部极值点检测
关键点是由DOG空间的局部极值点组成的。为了寻找DoG函数的极值点,每一个像素点要和它所有的相邻点比较,看其是否比它的图像域和尺度域的相邻点大或者小。
中间的检测点和它同尺度的8个相邻点和上下相邻尺度对应的9×2个点共26个点比较,以确保在尺度空间和二维图像空间都检测到极值点。
在极值比较的过程中,每一组图像的首末两层是无法进行极值比较的,为了满足尺度变化的连续性,我们在每一组图像的顶层继续用高斯模糊生成了3幅图像,高斯金字塔有每组S+3层图像。DOG金字塔每组有S+2层图像。
1.3 关键点精确定位
由于DoG值对噪声和边缘较敏感,因此,在上面DoG尺度空间中检测到局部极值点还要经过进一步的检验才能精确定位为特征点。
去除低对比度的极值点
为了提高关键点的稳定性,需要对尺度空间DoG函数进行曲线拟合。利用DoG函数在尺度空间的Taylor展开式:
T ?D1T?2DX?XXT??X??D?D其极值点: X??x,y,???X2?X2在计算过程中,分别对图像的行、列及尺度三个量进行了修正,其修正结果如下:
T ?D1T?2DD?X??D?X?XX2 ?X2?X求解得 T2??D?D X??(2)?1 ? ?X?X X为修正值。 将修正后的结果代入式
T ?D1T?2DD?X??D?X?XX2 ?X2?XT 1?D???DX?D?X?? 2?X??
上式去除那些对比度较低的不稳定极值点。Lowe的试验显示,所有取值小于0.04的极值点均可抛弃(像素灰度值范围[0,1])。
去除边缘响应
仅仅去除低对比度的极值点对于极值点的对于特征点稳定性是远远不够的。DoG函数在图像边缘有较强的边缘响应,因此我们还需要排除边缘响应
DoG函数的(欠佳的)峰值点在横跨边缘的方向有较大的主曲率,而在垂直边缘的方向有较小的主曲率。主曲率可以通过计算在该点位置尺度的2×2的Hessian矩阵得到,导数由采样点相邻差来估计:
?DxxDxy? H???DDxyyy ?? Dxx 表示DOG金字塔中某一尺度的图像x方向求导两次。 D的主曲率和H的特征值成正比,为了避免直接的计算这些特征值,而只是考虑它们
?的之间的比率。令 为最大特征值, 为最小的特征值,则
??r?
Tr?H??Dxx?Dyy
Det?H??Dxx?Dyy?Dxy?Dxy 222TrH???r?1?????? ??Det?H???r
?

