SIFT的全体是Scale Invariant Feature Transform(尺度不变特征变换),是由加拿大教授David G.Lowe在1999年在会议文章中提出,2004年发表在IJCV上
是计算机视觉界近二十年来引用率最高的文章之一
SIFT特征对旋转、尺度缩放、亮度变化等保持不变性,是一种稳定的局部特征
SIFT的特征提取方面对计算机视觉近年来的发展影响深远,特别是几乎影响到了后续所有的角点提取和匹配算法
SIFT算法特点
图像的局部特征,对旋转、尺度缩放、亮度变化保持不变,对视角变化、放射变换、噪声也保持一定程度的稳定性。
独特性好,信息量丰富,适用于海量特征库进行快速、准确的匹配。
多量性:即使是很少几个物体也可以产生大量的SIFT特征
高速性:改进的SIFT匹配算法甚至可以达到实时性
扩展性:可以很方便的与其他的特征向量进行联合
尺度空间:
人眼可自动调节尺度,完成对物体的检测和识别
模仿人的视觉认知,把物体不同尺度下的图像都提供给机器,让机器能够对物体在不同的尺度下综合信息识别
因此,首先需要建立尺度空间
通过高斯函数与原图像卷积,并经过下采样,可建立原始图像的尺度空间模型
二维高斯函数
高斯模糊是一种图像滤波器,它使用高斯函数计算模糊模板,并使用该模板与原图像做卷积运算,达到模糊图像的目的。
如二维模板大小为m*n,则模板上的元素(x,y)对应的高斯计算公式为:
其中, σ是正态分布的标准差,σ值越大,图像越模糊(平滑)。r为模糊半径,模糊半径是指模板元素到模板中心的距离。
在二维空间中,这个公式生成的曲面的等高线是从中心开始呈正太分布的同心圆。
在实际应用中,在计算高斯函数的离散近似时,在大概3σ距离之外的像素都可以看作不起作用,这些像素的计算也就可以忽略。
图像处理程序只需要计算(6σ+1)*(6σ+1)的矩阵就可以保证相关像素影响。
根据σ的值,计算出高斯模板矩阵的大小
(6σ+1)*(6σ+1),使用公式
计算高斯模板矩阵的值,与原图像做卷积,即可获得原图像的高斯模糊图像。为了确保模板矩阵中的元素在[0,1]之间,需将模板矩阵归一化。
下图是5*5的高斯模板卷积计算示意图。高斯模板是中心对称的。
二维高斯模糊效果图:
使用二维的高斯模板达到了模糊图像的目的,但是会因模板矩阵的关系而造成边缘图像缺失(b,c)。σ越大,缺失像素越多,丢弃模板会造成黑边(d)。更重要的是当图片变大时,高斯模板(高斯核)和卷积运算量将大幅度提高。根据高斯函数的可分离性,可对二维高斯模糊函数进行改进。
分离高斯模糊:
高斯函数的可分离性是指使用二维矩阵变换得到的效果也可以通过在水平方向进行以为高斯矩阵变换加上竖直方向的一维高斯矩阵变换得到。两次一维的高斯卷积将消除二维高斯矩阵所产生的边缘。
尺度空间理论:
在图像处理模型中引入一个被视为尺度的参数,通过连续变化尺度参数获得多尺度下的尺度空间表示序列,对这些序列进行尺度空间主轮廓的提取,并以该主轮廓作为一种特征向量,实现边缘、角点检测和不同分辨率上的特征提取等。
尺度空间方法将传统的单尺度图像信息处理技术纳入尺度不断变化的动态分析框架中,更容易获取图像的本质特征。尺度空间中各尺度图像的模糊程度逐渐变大,能够模拟人在距离目标由近到远时目标在视网膜上的形成过程。
金字塔的构建
尺度空间在实现时使用高斯金字塔表示,高斯金字塔的构建分为两部分:
1.对图像做不同尺度的高斯模糊;
2.对图像做降采样(隔点采样)。
图像的金字塔模型是指,将原始图像不断降阶采样,得到一系列大小不一的图像,由大到小,从下到上构成的塔状模型。
尺度空间的形象描述
其中,S为组内总层数。
一个图像的尺度空间L(x,y,σ),定义为一个变化尺度的高斯函数G(x,y,σ)与原图像l(x,y)的卷积
L(x,y,σ)=G(x,y,σ)*l(x,y),其中*表示卷积运算。
σ是尺度空间因子,值越小表示图像被平滑的越小,相应的尺度也就越小。大尺度对应于图像的概貌特征,小尺度对应于图像的细节特征。
原图像为金字塔的第一层,每次降采样所得到的新图像为金字塔的一层(每层一张图像),每个金字塔共n层,金字塔的层数根据图像的原始大小和塔顶图像的大小共同决定,其计算公式如下:
其中M,N为原图像的大小,t为塔顶图像的最小维数的对数值。如,对于大小为512*512的图像,当塔顶图像为4*4时,n=7,当塔顶图像为2*2时,n=8。
为了让尺度体现其连续性,高斯金字塔在简单降采样的基础上加上了高斯滤波。如下图所示,将图像金字塔每层的一张图像使用不同参数做高斯模糊,使得金字塔的每层含有多张高斯模糊图像,将金字塔每层多张图像合成一组(Octave),金字塔每层只有一组图像,组数和金字塔层数相等,使用公式计算,每组含有多层(Interval)图像。
在一组的图像内,每一层之间的高斯模糊的尺度因子的比值为,其中S为每组尺度数
于是同一组的第s层高斯模糊尺度σ(s)就变成了
这里σ0是这一组的第一层图像的高斯模糊尺度。第n+1组的图像,它的高斯模糊尺度是2σ0,这个图像的高斯模糊带到了下一组的第一层图像中区,于是不同相同层的高斯模糊尺度是2倍关系。如图所示。
高斯差分金字塔
2002年Mikolajczy在详细的实验比较中发现尺度归一化的高斯拉普拉斯函数(LoG算子▽2G)σ2▽2G的极大值和极小值与其他特征提取函数如Hessian或Harris角特征相比,能够产生最稳定的图像特征。其中D(x,y,,σ)和和σ2▽2G的关系可以从如下公式推导得到:
利用差分近似代替微分,则有
因此
其中k-1是个常数,并不影响极值点位置的求取。
如图所示,红色曲线表示的是高斯差分算子(Difference of Gaussian,简称DoG),而蓝色曲线表示的是高斯拉普拉斯(LoG)算子。使用更高效的高斯差分算子代替拉普拉斯算子进行极值检测,如下:
在实际计算时,使用高斯金字塔每组中相邻上下两层图像相减,得到高斯差分图像,如图所示,进行极值检测。这样就能得到候选的SIFT特征点。
关键点是由DoG空间的局部极值点组成的,关键点的初步探查是通过同一组内各DoG相邻两层图像之间比较完成的。为了寻找DoG函数的极值点,每一个像素点要和它所有的相邻点比较,看其是否比它的图像域和尺度域的相邻点大或者小。如图所示,中间的监测点和它同尺度的8个相邻点和上下相邻尺度对应的9*2个点共16个点比较,以确保在尺度空间和二维图像空间都检测到极值点。
由于要在相邻尺度进行比较,如下图左侧每组含4层的高斯差分金字塔,只能在中间两层中进行两个尺度的极值点检测,其它尺度则只能在不同组中进行。
为了在每组中检测S个尺度的极值点,则DOG金字塔每组需S+2层图像,而DOG金字塔由高斯金字塔相邻两层相减得到,则高斯金字塔每组需S+3层图像,实际计算时S在3到5之间。
取S=3时,假定高斯金字塔存储索引如下:
第0组(即第-1组):0 1 2 3 4 5
第1组:6 7 8 9 10 11
第2组:?
则第2组第一张图片根据第一组中索引为9的图片降采样得到,其他类似。
构建尺度空间需确定的参数
σ-尺度空间坐标
O-组(octave)数
S-组内层数
在上述尺度空间中σ,O和S的关系如下:
其中σ0是基准层尺度,o位组(octave)的索引,s为组内层的索引。关键点的尺度坐标就是按关键点所在的组合组内的层,利用上述公式计算而来。
在最开始建立高斯金字塔时,要预先模糊输入图像来作为第0个组的第0层的图像,这时相当于丢弃了最高的空域的采样率。因此通常的做法是先将图像的尺度扩大一倍来生成第-1组。我们假定初始的输入图像为了抗击混淆现象,已经对其进行的高斯模糊,如果输入图像的尺度用双线性插值扩大一倍,那么相当于。
取式中的k为
在构建高斯金字塔时,组内每层的尺度坐标按如下公式计算:
其中σ0为初始尺度,lowe取σ0=1.6,s=3;s为组内的层索引,不同组相同层的组内尺度坐标σ(s)相同。组内下一层图像是由前一层图像按σ(s)进行高斯模糊所得。上式用于一次生成组内不同尺度的高斯 图像,而在计算组内某一层图像的尺度时,直接使用如下公式进行计算:
式
可记作
下图为构建DOG金字塔的示意图,原图采用128*128大小图像,扩大一倍后构建金字塔。