图像匹配算法研究之sift算法
SIFT算法由D.G.Lowe 1999年提出,2004年完善总结,论文发表在2004年的IJCV上,主要用于提取具有图像旋转不变性和伸缩不变性的特征点。
这项技术可以推广到图像识别、图像拼接以及图像恢复等。
David G. Lowe, \
keypoints,\ International Journal of Computer Vision, 60, 2 (2004), pp. 91-110
算法主要分为4个步骤:
? scale-space extrema detection–尺度空间上的极值检测 ? keypoint localization–关键点的定位 ? orientation assignment–为关键点标定方向 ? keypoint descriptor–提取特征点描述符 $1. 尺度空间上的极值检测
在介绍这一部分的时候,先引入几个概念:
? 降采样 :对于一幅图像而言的降采样就是每隔几行、几列得到取一点,组成一个新的图像。以比例因子为2的降采样来说:就是対一幅图像每隔一行一列取一点。 ? 升采样 :其实一种插值,就是在一幅图像里利用相关的插值运算得到一幅大的图像!比如比例因子为2的升采样就是每个相邻像素点种插值出一个像素(这里包括X、Y两个方向),最常用的插值方法有线性插值等。
? 图像金字塔 :由一个原始图像经过降采样得到一幅图像,再对新的图像做降采样,重复多次构成的一组集合。以采样因子2为例说明,如果形象的把这些图像摞起来就想一个金字塔,每次之间长和宽大小恰好为2倍关系,故此得名。
? 高斯卷积 :就是权函数为高斯函数的模板进行卷积运算。通常做高斯卷积后的图像会比原图像平滑但也会模糊,所以又称高斯模糊!
? 高斯金字塔 :高斯金字塔里有两个概念:组(Octave)和层(Level或Interval),每组里有若干层!高斯金字塔的构造是这样的,第一组的第一层为原图像,然后将图像做一次高斯平滑(高斯卷积、高斯模糊)高斯平滑里有一个参数δ,在SIFT里作者取1.6 。 然后将δ乘一个比例系数k作为新的平滑因子来平滑第一组第二层得到第三层,重复若干次,得到L层(L一般取5)他们分别对应的平滑参数为:0,δ,kδ,k 2 δ,k 3 δ。然后将最后一幅图像做比例因子为2的降采样得到第二组的第一层,然后对第二组的第一层做参数是δ的高斯平滑,对第二层做kδ的平滑得到第三层….. 这里一定注意:每组对应的平滑因子δ是一样的,而不是像有的资料上说的持续递增。 这样反复形成了O组L层的高斯金字塔。一般模糊的高斯模板长宽都约为6δ(这里δ为当次的平滑因子,就是可能是kδ,k 2 δ..)
? DoG(Difference of Gaussian)金字塔 :是由高斯金字塔构造出来的,他的第一组第一层是由高斯金字塔的第一组第二层减第一组第一层,他的第一组第二层是由高斯
金字塔的第一组第三层减第一组第二层得到。每组都这样就生成了一个DoG金字塔。顺便说一下,DoG金字塔每组图像几乎都是一片黑,但仔细看你能看出轮廓的。
最后关于金字塔具体处理的说明:
1)在SIFT里高斯金字塔的第一组第一层通常是由一个原图像长宽扩大一倍开始的,这样做是为了可以得到更多的特征点 ;
2)大家可以发现如果用每组5层的高斯金字塔构造一个DoG金字塔的的话,DoG的每组的层数是4 ;
3)对于DoG金字塔,特征点的搜索从每组的二层到倒数第二层的(后面说明为什么),所以如果DoG金字塔有效层数目为n的话,那么DoG金字塔应该有n+2层,那么对 应的高斯金字塔应该有n+3层 ;
4)高斯金字塔从第二组开始的每组第一层是由上一组的倒数第二层降采样得到的,如下所示。
讲了这么多概念,现在正式开始讲解如何在尺度空间里寻找特征点啦。
由于图像进行伸缩等变换后尺度空间发生变化,所以为了方便找出匹配点,需要将图像在不同的尺度空间里进行平滑,并相减得到更多的边缘等高频信息(特征点的集中 域)。高斯平滑并计算dog金字塔利用下面的3个计算公式:
至于为什么用DOG算子来提取额特征点,而不是hessian或者其他角点方法比如Harris,是因为Mikolajczyk (2002)发现通过
计算出来的局部区域极大值和极小值与上述几种角点相比能
产生 更加稳定 的特征点。
但是上面的公式和DOG又有素描关系呢?看下面的公式就知道了: