近来发现,只看论文是不行的,论文看完了,当时可能明白的马马虎虎,过几天在遇到这个东西,又忘记了,还是写点东西,记录下吧。
SIFT,即尺度不变特征变换(Scale-invariant feature transform,SIFT),该算法具有尺度不变性,对于旋转角度,图像亮度或拍摄角度改变具有一定的不变性。sift的一个重要方面在于,它能够产生大量的特征,这些特征在尺度和坐标上能够很好的覆盖图片区域。
1、构造尺度空间
目的主要是模拟图像的多尺度特征,在lowe的论文中指出:关键点检测的第一步就是识别出坐标和尺度,检测将会在相同图片的不同视角小重复进行
坐标检测对于图片的尺度变化具有不变性,可以使用一个连续的尺度空间函数查找所有可能的平稳特征来实现。Koenderink (1984) and Lindeberg (1994)证明了高斯卷积核是实现尺度变换的唯一的线性核,尺度空间被定义为由一个可变尺度的高斯与输入图像进行卷积,公式如下:
(*代表的是卷积操作)
同时G函数其实就是二维正态分布,(x,y)是图像坐标,σ大小决定图像的平滑程度,大尺度对应图像的概貌特征,小尺度对应图像的细节特征。大的σ值对应粗糙尺度(低分辨率),反之,对应精细尺度(高分辨率)。为了有效的在尺度空间检测到稳定的关键点,提出了高斯差分尺度空间(DOG scale-space)。利用不同尺度的高斯差分核与图像卷积生成。[1]公式如下:
由图片size决定建几个塔,每塔几层图像(S一般为3-5层)。0塔的第0层是原始图像(或你double后的图像),往上每一层是对其下一层进行Laplacian变换(高斯卷积,其中σ值渐大,例如可以是σ, k*σ, k*k*σ…),直观上看来越往上图片越模糊。塔间的图片是降采样关系,例如1塔的第0层可以由0塔的第3层down sample得到,然后进行与0塔类似的高斯卷积操作。(这段话来自Rachel Zhang的专栏)
上图中左边列每一层都代表一个高斯尺度空间,左边列的每两个相邻层,也就是两张图进行相减操作即可得到右边的高斯查分尺度空间(DOG)。对于一幅图像I,建立其在不同尺度(scale)的图像,也称为子八度(octave),first octave代表的是第一个子八度,对于尺度空间,第一个子八度就是原图的大小,第二个子八度(second ),后面的每一个子八度为上一个子八度的降采样结果,即原图的1/4,长宽各减半。
另外,不同的高斯函数提供对尺度归一化的高斯拉普拉斯算子有无限逼近能力。Mikolajczyk (2002)发现相对于其他一系列可能的图像函数(例如梯度,Hessian等),2∇2G的最大和最小值能够产生最平稳的图像特征。高斯差分尺度空间D和2∇2G之间耳朵关系如下:
,把G看做是σ的函数的时候,令kσ≈σ,则有:
(导数定义)
因此就有:
This shows that when the difference-of-Gaussian function has scales differing by a constant
factor it already incorporates the 2 scale normalization required for the scale-invariant
2、检测DOG尺度空间极值点
尺度空间中的极值点即为图像在改尺度空间下的特征点,要找到尺度空间中的极值点,每一个样本点要与其所有相邻的点进行比较,如上图中的x号的点,除了需要与本层的8个临近点进行比较外,还需要与和它相邻的上下两层的18个节点进行比较,也就是说总共需要与26个临近点进行比较,以确定最小值或最大值,即为特征点。这个过程可以再一阶导数等于0的点进行寻找。
3、LoG近似DoG找到关键点<检测DOG尺度空间极值点>
(图来自Rachel Zhang的专栏)
s=3代表每塔有3层,要求的是极值,根据极值的定义,只有左右两边都有才可以进行比较确定极值,所以当s=3的时候此时,第一层的和第三层是没有办法进行比较的,此时采用的是在每一组图像的顶层继续用高斯模糊生成了 3 幅图像,高斯金字塔有每组S+3层图像。DOG金字塔每组有S+2层图像(每相邻两层高斯金字塔构成一层DOG金字塔。这里涉及到尺度变换的连续性,我直接复制Rachel Zhang的专栏,她写的非常容易理解: