尺度不变特征转换(Scale-invariant feature transform 或 SIFT)
1、尺度不变特征转换(Scale-invariant feature transform 或 SIFT)
是一种电脑视觉的算法用来侦测与描述影像中的局部性特征,它在尺度空间中寻找极值点,并提取出其位置、尺度、旋转不变量,此算法由 David Lowe 在1999年所发表,2004年完善总结。
2、尺度空间理论
自然界中的物体随着观测尺度不同有不同的表现形态。例如我们形容建筑物用“米”,观测分子、原子等用“纳米”。更形象的例子比如百度地图,滑动鼠标轮可以改变观测地图的尺度,看到的地图绘制也不同;还有电影中的拉伸镜头等等……从认知学的角度讲,在一幅图像中,即使对一个事物没有概念,或者并不熟悉它,人仍然能够感知此物体的结构。在一幅图像中,只有在一定的尺度范围内,一个物体才有意义。
尺度空间中各尺度图像的模糊程度逐渐变大,能够模拟人在距离目标由近到远时目标在视网膜上的形成过程。尺度越大图像越模糊。
总结:Sift算法总体思路就是用不同尺度(标准差)的高斯函数对图像进行平滑,然后比较平滑后图像的差别,差别大的像素就是特征明显的点。
3、为什么要讨论尺度空间?
用机器视觉系统分析未知场景时,计算机并不预先知道图像中物体的尺度。我们需要同时考虑图像在多尺度下的描述,获知感兴趣物体的最佳尺度。另外如果不同的尺度下都有同样的关键点,那么在不同的尺度的输入图像下就都可以检测出来关键点匹配,也就是尺度不变性。
图像的尺度空间表达就是图像在所有尺度下的描述。
4、SIFT算法可以解决的问题
目标的旋转、缩放、平移(RST)
图像仿射/投影变换(视点viewpoint)
光照影响(illumination)
目标遮挡(occlusion)
杂物场景(clutter)
噪声
5、 哪些点是SIFT中要查找的关键点(特征点)?
这些点是一些十分突出的点不会因光照条件的改变而消失,比如角点、边缘点、暗区域的亮点以及亮区域的暗点,既然两幅图像中有相同的景物,那么使用某种方法分别提取各自的稳定点,这些点之间会有相互对应的匹配点。
所谓关键点,就是在不同尺度空间的图像下检测出的具有方向信息的局部极值点。
根据归纳,可以看出特征点具有的三个特征:尺度、方向、大小
Koendetink证 明 了高斯卷积核 是实现尺度变换的唯一变换核, 而Lindeberg等人则进一步证明高斯核是唯一的线性核。因此,尺度空间理论的主要思想是利用高斯核对原始图像进行尺度变换,获得图像多尺度下的尺度空间表示序列,再对这些序列进行尺度空间特征提取。
二维高斯核定义为
L表示尺度空间,(x,y)代表图像I上的点,σ是尺度因子,选择合适的尺度因子平滑是建立尺度空间的关键。
尺度是自然客观存在的,不是主观创造的。高斯卷积只是表现尺度空间的一种形式。
在实际应用中,在计算高斯函数的离散近似时,在大概3σ距离之外的像素都可以看作不起作用,这些像素的计算也就可以忽略。
高斯模板:
为了提高在尺度空间检测稳定特征点的效率,Lowe(1998)提出了利用高斯差值(Difference of Gaussian,DoG)方程同图像的卷积求取尺度空间极值,用D(x,y,σ)表示,即用固定的系数 k 相乘的相邻的两个尺度的差值计算
k 是常数。事实上DoG是对LoG(高斯拉普拉斯)的一个近似。
该公式是热扩散公式的另一种表示形式,公式左边的项可以用近似的方法计算:
从公式可以看出,D和的形式是类似的。由于拉普拉斯函数是尺度无关的,因而高斯差分函数也是尺度无关的。对于所有尺度而言,k 都是一个常数,所以使用 D 不会影响极值的选取。当 k 趋向于 1 的时候,误差会越来越小。但是实验表明,即使 k 值不接近 1(例如 k 取 ),对极值的选取也没有多大影响。Mikolajczyk在实验中表明 的极大值和极小值能够产生比其他函数(包括梯度,Hessian,Harris 角点函数)更加稳定的特征。
接下来是在如何计算DoG。首先是构建图像的高斯金字塔。将图像金字塔共分O组,一组称为一个Octave,每组又分为多层,层间隔数为S,因此有S+3(S+1+2,2代表在上下再各添一层图像,搜索极值只在中间的S+1层图像上搜索)层图像,下一组的第一层图像由上一组的倒数第三层(如果层索引从0开始,则为第S层)图像按照隔点采样得到,这样做的目的是为了减少卷积运算的工作量。DoG是通过高斯金字塔中的每组上下相邻两层的高斯尺度空间图像相减得到。
其中,σ0是基准层尺度,o为组Octave的索引,s为组里图像的层索引。
组内尺度是指同一组(octave)内的尺度关系,组内相邻层尺度化简为:
组间尺度是指不同组直接的尺度关系,相邻组的尺度可化为:
由此可见,相邻两组的同一层尺度为2倍的关系
最后可将组内和组间尺度归为:
i——金字塔组数 n——每一组的层数
上一组图像的底层是由前一组图像的倒数第二层图像隔点采样生成的。这样可以保持尺度的连续性。
我们认为初始图像有一个初始的σ=0.5的高斯模糊(为了防止显著的混淆效应)。
在最开始建立高斯金字塔时,要预先模糊输入图像来作为第0个组的第0层的图像,这时相当于丢弃了最高的空域的采样率。因此通常的做法是先将图像的尺度扩大一倍来生成第0组。我们假定初始的输入图像为了抗击混淆现象,已经对其进行σn=0.5的高斯模糊,如果输入图像的尺寸用双线性插值扩大一倍,那么相当于σn=1.0。因此,实际
{ 在Lowe的论文中,将第0层的初始尺度定为1.6,图片的初始尺度定为0.5,
则图像金字塔第0层的实际尺度为
在检测极值点前对原始图像的高斯平滑以致图像丢失高频信息,所以Lowe建议在建立尺度空间前首先对原始图像长宽扩展一倍,以保留原始图像信息,增加特征点数量。
当对图像长宽扩展一倍时,便构建了-1层,该层尺度为
}
上面用到了高斯的半群性质得到,即:
在实际编程实现中
在D.Lowe的论文和Rob Hess的代码中,使用的默认参数为:σn=0.5, σ0=1.6, S=2, O的值通过对图像的长和宽中较小的一个长度取2的对数再减去2得到(保证最后一组的图像至少要有4个像素)。
寻找dog极值点:DoG 尺度空间中中间层(如图 五角星标识层)的每个像素点都需要跟同一层的相邻 8 个像素点以及它上一层和下一层的 9个相邻像素点总共 26 个相邻像素点进行比较,如果该样本点是这27个点中梯度值极大或极小的点,该样本点就被提取为一个侯选关键点。
图像的高斯滤波保证了特征点不受噪声影响,DoG 图像保证了特征点不受亮度差的影响,在高斯差分图像空间提取极值点保证了尺度不变性。
以上极值点的搜索是在离散空间中进行的,检测到的极值点并不是真正意义上的极值点。下图演示了二维函数离散空间得到的极值点与连续空间极值点的差别。利用已知的离散空间点插值得到的连续空间极值点的方法叫做子像素插值(Sub-pixel Interpolation)。
假设A点为原点,其中是极值点A的偏移值,对上式求X的偏导数,并令偏导数为零,得到: ,当在任一维度上的偏移量大于0.5时(即x或y或σ),意味着插值中心已经偏移到它的邻近点上,所以必须改变当前关键点的位置。同时在新的位置上反复插值直到收敛;也有可能超出所设定的迭代次数或者超出图像边界的范围,此时这样的点应该删除。
当 ,(假设图像的灰度值是在0到1.0之间),其响应值过小,这样的点易受噪声的干扰而变得不稳定,所以也要删除。Rob Hess等人实现时使用0.04/S
由于DoG对图像中的边缘有比较强的响应值,而一旦特征落在图形的边缘上,这些点就是不稳定的点。根据Harris角点可以知道,一个角点在任何方向上平移都应该保证局部窗口内的像素值的剧烈变化,而边缘上的点沿着边缘方向移动时局部窗口内的像素值基本没有什么变化。如下图所示:
同样,一个平坦的DoG响应峰值往往在横跨边缘的地方有较大的主曲率,而在垂直的方向有较小的主曲率。而主曲率可以通过2×2的Hessain矩阵H求出:
D值可以通过求临近点差分得到。H的特征值与D的主曲率成正比。
α ,β 分别是H的最大和最小特征值,r 为它们的比值,r=α/β.
当r>1时,单调增,要计算D主曲率的比值(即H的特征值比值r)是否在某阈值之下,只需要判断是否在阈值之下即可。实验表明,阈值通常选择r = 10。
到此为止,特征点的位置已经被确定,假设在D(x,y,σ(o,s))上位置为(xk,yk)处确定了一个特征点,在插值后的偏移Xo=(xo,yo,so)(注:尺度σ的导数在DoG金字塔中是根据同一组的图像前后差分求得,也就是s+1层图像减去s-1层图像再除以2,因此这里用so替代σo),那么先前给出的描述SIFT特征的结构体将如下被填充:feat.x = (xk+xo) × 2^o
feat.y = (yk+yo) × 2^o
feat.r = yk;
feat.c = xk;
feat.octv = o;
feat.intvl = s;
feat.subintvl = so;
(注:如果最先开始图像的尺寸被加倍了,那么feat.x和feat.y要除以2)
(注:如果最先开始图像的尺寸被加倍了,那么feat.scl要除以2)
为了实现图像旋转的不变性,需要根据检测到的特征点的局部图像结构求得一个方向基准。我们使用图像梯度的方法求取局部结构的稳定方向。对于已经检测到的特征点,我们知道该特征点在DoG金字塔中的确切位置和尺度(由feat.r, feat.c, feat.octv, feat.intvl,feat.scl_octv确定),在与尺度相应的高斯图像L(x,y,σ(feat.octv,feat.intvl))上使用有限差分,计算以特征点为中心,以3×1.5×feat.scl_octv为半径的区域内图像梯度的幅角和幅值(模值),如下图所示,幅角和幅值的计算公式如下:
在完成特征点邻域的高斯图像的梯度计算后,使用直方图统计邻域内像素的梯度方向和幅值。梯度方向直方图的横轴是梯度方向角,纵轴是梯度方向角对应的梯度幅值累加。梯度方向直方图将0-360度的范围分为36个柱(bins),每10度一个柱。直方图的峰值代表该特征点处邻域内图像梯度的主方向,也即该特征点的主方向,如下图所示:
每个累加到梯度方向直方图的采样点的梯度幅值都要进行权重处理,加权采用圆形高斯加权函数,其标准偏差σ为1.5×feat.scl_octv,(上面的局部邻域半径通过3σ定理得到)。如下图所示,由于SIFT算法只考虑了尺度和旋转不变性,并没有考虑仿射不变性。通过高斯加权,使特征点附近的梯度幅值有较大的权重,这样可以部分弥补因没有仿射不变性而产生的特征点不稳定的问题。
再对方向直方图进行两次平滑,模板采用[0.25,0.5,0.25],并得到直方图的最大值omax
对直方图连接成环中,局部最大值且大于0.8*omax,泰勒展开,计算精确位置
计算偏移量( 0.5 * ((l)-(r)) / ((l) -2.0*(c) + (r)) )
修正后加入
另外,当存在一个相当于主峰值能量80%能量的峰值时,则将这个方向认为是该特征点的辅方向。这可以增强匹配的鲁棒性,Lowe的论文指出大概有15%关键点具有多方向,但这些点对匹配的稳定性至为关键。一个特征点可能会被指定具有多个方向(一个主方向,一个以上辅方向),这可以增强匹配的鲁棒性,如下图所示。实际编程实现中,就是把该特征点复制成多份特征点,并将方向值分别赋给这些复制后的特征点,并且,离散的梯度方向直方图要进行插值拟合处理,来求得更精确的方向角度值。
在以特征点为中心的邻域窗口内采样,并用梯度方向直方图来统计邻域像素的梯度方向。梯度直方图的范围是0°~360°,其中每10°一个柱,总共36个柱。
梯度方向直方图的峰值则代表了该特征点处邻域梯度的主方向,即作为该特征点的主方向。在梯度方向直方图中,当存在另一个相当于主峰值80%能量的峰值时,则将这个方向认为是该特征点的辅方向。一个特征点可能会被指定具有多个方向(一个主方向,一个以上辅方向),这可以增强匹配的鲁棒性。
1.直方图以每10度方向为一个柱,共36个柱,柱所代表的方向为像素点梯度方向,柱的长短代表了梯度幅值。
2.根据Lowe的建议,直方图统计半径采用3*1.5*σ。
3.在直方图统计时,每相邻三个像素点采用高斯加权,根据Lowe的建议,模板采用[0.25,0.5,0.25],并连续加权两次。
图像的关键点已检测完毕,每个关键点有三个信息:位置、尺度、方向;同时也就使关键点具备平移、缩放、和旋转不变性。
1. 确定计算关键点直方图的高斯函数权重函数参数 ;
2. 生成含有36柱的方向直方图,梯度直方图范围0~360度,其中每10度一个柱。由半径为图像区域生成;
3. 对方向直方图进行两次平滑;
4. 求取关键点方向(可能是多个方向);
5. 对方向直方图的Taylor展开式进行二次曲线拟合,精确关键点方向;
描述的目的是在关键点计算后,用一组向量将这个关键点描述出来,这个描述子不但包括关键点,也包括关键点周围对其有贡献的像素点。用来作为目标匹配的依据,也可使关键点具有更多的不变特性,如光照变化、3D视点变化等。
上一步为找到的关键点即SIFT特征点赋了值,包含位置、尺度和方向的信息。关键点具备平移、缩放、和旋转不变性。
接下来的步骤是关键点描述,即用用一组向量将这个关键点描述出来,这个描述子还需要对仿射变换、光照变换等具有一定的鲁棒性。
通过对关键点周围图像区域分块,计算块内梯度直方图,生成具有独特性的向量,这个向量是该区域图像信息的一种抽象,具有唯一性。
下图是一个SIFT描述子事例。其中描述子由2×2×8维向量表征,也即是2×2个8方向的方向直方图组成。左图的种子点由8×8单元组成。每一个小格都代表了特征点邻域所在的尺度空间的一个像素,箭头方向代表了像素梯度方向,箭头长度代表该像素的幅值。然后在4×4的窗口内计算8个方向的梯度方向直方图。绘制每个梯度方向的累加可形成一个种子点,如右图所示:一个特征点由4个种子点的信息所组成。
Lowe实验结果表明:描述子采用4×4×8=128维向量表征,综合效果最优(不变性与独特性)。
128维关键点描述子生成步骤
描述子梯度方向直方图由关键点所在尺度的模糊图像计算产生。图像区域的半径通过下式计算:
特征描述子与特征点所在的尺度有关,因此,对梯度的求取应在特征点对应的高斯图像上进行。将关键点附近的邻域划分为d*d(Lowe建议d=4)个子区域,每个子区域做为一个种子点,每个种子点有8个方向。每个子区域的大小与关键点方向分配时相同,即每个区域有个 子像素,为每个子区域分配边长为 的矩形区域进行采样(个子像素实际用边长为 的矩形区域即可包含,但由式(3-8), 不大,为了简化计算取其边长为 ,并且采样点宜多不宜少)。考虑到实际计算时,需要采用双线性插值,所需图像窗口边长为 。在考虑到旋转因素(方便下一步将坐标轴旋转到关键点的方向),如下图6.1所示,实际计算所需的图像区域半径为:
计算结果四舍五入取整。
旋转后邻域内采样点的新坐标为:
3. 将邻域内的采样点分配到对应的子区域内,将子区域内的梯度值分配到8个方向上,计算其权值。
旋转后的采样点坐标在半径为radius的圆内被分配到 的子区域,计算影响子区域的采样点的梯度和方向,分配到8个方向上。
旋转后的采样点 落在子区域的下标为
Lowe建议子区域的像素的梯度大小按 的高斯加权计算,即
其中a,b为关键点在高斯金字塔图像中的位置坐标。
4. 插值计算每个种子点八个方向的梯度。
如图6.3所示,将由式(6-3)所得采样点在子区域中的下标(图中蓝色窗口内红色点)线性插值,计算其对每个种子点的贡献。如图中的红色点,落在第0行和第1行之间,对这两行都有贡献。对第0行第3列种子点的贡献因子为dr,对第1行第3列的贡献因子为1-dr,同理,对邻近两列的贡献因子为dc和1-dc,对邻近两个方向的贡献因子为do和1-do。则最终累加在每个方向上的梯度大小为:
其中k,m,n为0或为1。
5. 如上统计的4*4*8=128个梯度信息即为该关键点的特征向量。特征向量形成后,为了去除光照变化的影响,需要对它们进行归一化处理,对于图像灰度值整体漂移,图像各点的梯度是邻域像素相减得到,所以也能去除。得到的描述子向量为,归一化后的特征向量为则
6. 描述子向量门限。非线性光照,相机饱和度变化对造成某些方向的梯度值过大,而对方向的影响微弱。因此设置门限值(向量归一化后,一般取0.2)截断较大的梯度值。然后,再进行一次归一化处理,提高特征的鉴别性。
7. 按特征点的尺度对特征描述向量进行排序。
在图像半径区域内对每个像素点求其梯度幅值和方向,然后对每个梯度幅值乘以高斯权重参数,生成方向直方图。
在窗口宽度为2X2的区域内计算8个方向的梯度方向直方图,绘制每个梯度方向的累加值,即可形成一个种子点。然后再在下一个2X2的区域内进行直方图统计,形成下一个种子点,共生成16个种子点。
描述子向量元素门限化及门限化后的描述子向量规范化。
描述子向量元素门限化:
方向直方图每个方向上梯度幅值限制在一定门限值以下(门限一般取0.2)。
描述子向量元素规范化:
关键点描述子向量的规范化正是可去除满足此模型的光照影响。对于图像灰度值整体漂移,图像各点的梯度是邻域像素相减得到,所以也能去除。
分别对模板图(参考图,reference image)和实时图(观测图,observation image)建立关键点描述子集合。目标的识别是通过两点集内关键点描述子的比对来完成。具有128维的关键点描述子的相似性度量采用欧式距离。
穷举匹配
SIFT在图像的不变特征提取方面拥有无与伦比的优势,但并不完美,仍然存在:
1. 实时性不高。
2. 有时特征点较少。
3. 对边缘光滑的目标无法准确提取特征点。
等缺点,如下图7.1所示,对模糊的图像和边缘平滑的图像,检测出的特征点过少,对圆更是无能为力。近来不断有人改进,其中最著名的有SURF和CSIFT。
SIFT算法也有一些不足,后来者提出了很多改进,在算法介绍一节里也有提及。
首先是实时性不高。这点如果大家实际运行了前面几幅船的图片的匹配应该会有体会。SURF据说要快一些。
然后是关键点主要依附于边缘拐角,因此对于边缘模糊和边缘光滑的图像,提取出的关键点就很少。
SIFT是在灰度图像上进行,不能充分利用图像的彩色信息,所以有CSIFT的扩展(Colored SIFT)。
还有抗仿射SIFT变换ASIFT(Affine-SIFT)。
SIFT算法在图像搜索方面,用作基础特征,个人感觉有一些问题,记录在这里:
1求主方向阶段太过依赖图像局部像素的梯度方向,有可能使找到的主方向不准确;而后面的特征向量以及匹配严重依赖主方向,一旦有偏差效果会显著下降
2图层金字塔的层如何取是个问题,如果取得不够紧密,会在匹配时出现偏差;而如果取的过多,造成keypointer数量过大,则会带来很大的计算负担
3图像中大片平滑区域时,由于会过滤掉低对比度的点,因此特征点的提取有问题;
4高维向量如何构建倒排索引并实现近似检索,是个难题;VA-file+的方法并不能完全解决问题
-----------------------------------
针对我们可能的应用,我觉得解决上述问题可以有以下思路:
问题1:我们的应用不需要处理很强的旋转不变性(rotation-invairant)问题,
可以将主方向寻找步骤省略,直接在keypointer周围区域进行特征向量提取
问题2:考虑设置统一的缩放尺度,解决匹配问题
问题3:除了SIFT descriptor本身以外,还需要提取一些像素区域的统计信息,作为补充特征
问题4:借鉴一些本文倒排索引和搜索的技术,这块非常复杂,可能需要多级搜索,实现由粗到精的检索策略,还需摸索
实际计算过程中,为了增强匹配的稳健性,Lowe建议对每个关键点使用4×4共16个种子点来描述,这样对于一个关键点就可以产生128个数据,即最终形成128维的SIFT特征向量。此时SIFT特征向量已经去除了尺度变化、旋转等几何变形因素的影响,再继续将特征向量的长度归一化,则可以进一步去除光照变化的影响。
当两幅图像的SIFT特征向量生成后,下一步我们采用关键点特征向量的欧式距离来作为两幅图像中关键点的相似性判定度量。取图像1中的某个关键点,并找出其与图像2中欧式距离最近的前两个关键点,在这两个关键点中,如果最近的距离除以次近的距离少于某个比例阈值,则接受这一对匹配点。降低这个比例阈值,SIFT匹配点数目会减少,但更加稳定。为了排除因为图像遮挡和背景混乱而产生的无匹配关系的关键点,Lowe提出了比较最近邻距离与次近邻距离的方法,距离比率ratio小于某个阈值的认为是正确匹配。因为对于错误匹配,由于特征空间的高维性,相似的距离可能有大量其他的错误匹配,从而它的ratio值比较高。Lowe推荐ratio的阈值为0.8。但作者对大量任意存在尺度、旋转和亮度变化的两幅图片进行匹配,结果表明ratio取值在0. 4~0. 6之间最佳,小于0. 4的很少有匹配点,大于0. 6的则存在大量错误匹配点。(如果这个地方你要改进,最好给出一个匹配率和ration之间的关系图,这样才有说服力)作者建议ratio的取值原则如下:
ratio=0. 4 对于准确度要求高的匹配;
ratio=0. 6 对于匹配点数目要求比较多的匹配;
ratio=0. 5 一般情况下。
也可按如下原则:当最近邻距离<200时ratio=0. 6,反之ratio=0. 4。ratio的取值策略能排分错误匹配点。
• 关键点的匹配可以采用穷举法来完成,但是这样耗费的时间太多,一般都采用一种叫kd树的数据结构来完成搜索。搜索的内容是以目标图像的关键点为基准,搜索与目标图像的特征点最邻近的原图像特征点和次邻近的原图像特征点。
Kd树是一个平衡二叉树
• 关键点匹配并不能标志着算法的结束,因为在匹配的过程中存在着大量的错配点。
• RANSAC简介
• RANSAC(Random Sample Consensus,随机抽样一致 ) 是一种鲁棒性的参数估计方法。
• RANSAC实质上就是一个反复测试、不断迭代的过程。
• RANSAC的基本思想:
• 首先根据具体问题设计出某个目标函数,然后通过反复提取最小点集估计该函数中参数的初始值,利用这些初始值把所有的数据分为“内点”( inlier )和“外点“(outlier),最后用所有的内点重新计算和估计函数的参数。
• RANSAC事例
• 拟合直线:
随机取两样本点拟合直线
SIFT在图像的不变特征提取方面拥有无与伦比的优势,但其并不是完美的,仍然存在着实时性不高、有时特征点较少、对边缘模糊的目标无法准确提取特征点等缺陷。自从1999年,SIFT算法问世以来,人们从未停止对它的优化和改进。
PCA(Principal ComponentAnalysis),即主成分分析,是一种数据降维
技术。由Y.ke 2004年提出。
通过降维技术,可有效化简SIFT算子的128维描述子
CSIFT(Coloredscale invariant feature transform )彩色尺度特
征不变变换,可以针对彩色图像进行图像的不变特征提取。由 Farag
2006年提出。
SURF(SURF SpeededUp Robust Features),号称是SIFT
算法的增强版,SURF算法的计算量小,运算速度快,提取
的特征点几乎与SIFT相同,由Bay 2006年提出。
ASIFT(Affine-SIFT)抗仿射SIFT变换。
两个向量空间之间的一个仿射变换或者仿射映射由一个线性变换接上一
个平移组成。ASIFT可以抵抗强仿射情况,提取的特征点远多于SIFT算
法,由J.M. Morel 2009年提出。
如果说尺度无关性部分是最具理论深度的解决方案,实现其它特点所用的方法则是十分巧妙和灵活的。在抽取稳定特征点部分,采用了一个 3 维二次函数对极值点进行拟合,以求极值点的确切位置,并以此滤除了低对比度的点;用海瑟矩阵求取主曲率比值的近似,去除了沿边缘分布的点。之前提取图像特征点的方法,例如Harris角点检测,或者对尺度敏感或者对边缘也比较敏感,而SIFT方法则全部解决了这些问题。在为关键点指定方向部分,为了实现旋转不变性而采用了“相对”的思想,并定义了具有很强区分性的描述子。大量的实验证明了这种描述子的有效性,描述子采用了关键点周围点的梯度信息,这种方法未见有深厚的理论基础,所以这部分或许还有改进的余地。在特征匹配部分,最原始的NN方法出现了很多误匹配,但Lowe等人提出了很多行之有效且十分巧妙的方法达到了很好的匹配效果。一方面,求最近邻距离与误匹配最近邻(即次最近邻)距离之比,并设定阈值排除大部分由于背景产生的误匹配;另一方面,采用基于霍夫变换的聚类,极大的排除了来自其他对象的误识别。
就SIFT方法本身来说,也有其不完美之处,比如对关照、仿射变换并不是完全鲁棒,对弹性形变更是无法适应,这些都是有待解决的问题。
Lowe,D.G.1999年发表论文《Objectrecognition from local scale-invariant features》,提出了一种具有尺度不变性的特征。之后,又有一系列研究试图将这种不变性扩展至对全部的仿射变换有效。在2004年Lowe发表的论文《Distinctive Image Features from Scale-Invariant Keypoints》中,其SIFT特征可以适用于一定范围内的仿射变换。Y.Ke和R.Sukthankar 2004年在《PCA-SIFT:AMore Distinctive Representation for Local Image Descriptors》中提出PCA-SIFT,将原算法中的直方图法换成主元分析法(Principle Component Analysis),实现描述子的降维。Herbert Bay 于2006年提出SURF加速稳健特征算法,实现算法加速,并于2008年发表论文《Speeded-Up Robust Features(SURF)》。