SIFT和SURF特征提取分析比较(小结篇)

SIFT和SURF的比较(转)


(转载: http://blog.csdn.net/jiang1st2010/article/details/6567452)

 SURF 描述子

第一部分:兴趣点的检测

 

1、 建立积分图。

优点:任何一个垂直矩形区域的面积只需要进行3次 +/-法就能计算。一阶的haar小波响应只要5次+/-法就能计算。计算的时间和区域大小无关。

 

2、 建立图像的尺度空间(应该分别有Dxx、Dxy、Dyy 三个尺度金字塔):

用box filters代替二阶高斯差分模板。

 

保持图像的大小不变,对box filters进行尺度变换:建立高斯金字塔,金字塔分为多个Octaves,每个Octave分为4个Scale levels。第一级的Octave的模块大小为9、15、21、27(相差6),第二级为15、27、39、51(相差12),第三级为27、51、75、99(相差24)。每一级第一个level的大小为上一级第二个level的大小。继续建立高斯金字塔,直到filter的大小大于原图像的大小为止(问题是大于每一Octave的第一个mask大小还是最后一个mask的大小?)。

 

尺度变换的方法,与每个Octave第一个scale level的size(L)/3有关,例如第一个Octave的L为9,L/3=9/3=3,则对于每行/列,连续出现L/3个相同的值,则再插入2个相同的值。若某连续3行同时为1,则再插入两行0。若只连续1行为1,则1*(2/3)=1(四舍五入)。插入的行/列要求左右/上下对称。

 

3、 对于尺度空间中的每一个box filter,与图像卷积,计算每一点上的Dxx、Dyy、Dxy,再计算每一点Hessian矩阵的行列式。(卷积可以用积分图实现快速计算。)

det(Happrox) = DxxDyy - (wDxy)^2

其中w是因为box filters只是高斯二阶差分的近似,为了使行列式的值大致相等,乘以这个权值,取0.9。注意,每Octave提高一级,计算行列式的时候,采样的间隔提高一倍。例如第一个Octave,每个点都计算,到了第二个Octave,隔一个点计算一个……(用增大模板大小,对图像上的点采样计算的方法,等同于实现对图像进行下采样并改变模板尺度的大小。)

对于每一个Octave,对计算出行列式的值设一个阈值,大于该阈值的列为候选兴趣点。对候选极值点进行非极大抑制:对于该level的周围8个点以及上下scale level相应位置的9*2个点,一共26个点进行比较行列式的大小,若该点是周围26个点中行列式最大的,则保留。(每一个Octave的头尾两个scale level是没法计算的。)

为什么可以用Hessian矩阵来判断极小值/极大值,请见最后。

 

最后,内插子像素精确定位(具体未看)。

 

第二部分:特征描述子

 

1、 主方向的确定(U-Surf没有此步骤)

s = 当前mask大小 * 1.2 / 9

以兴趣点为中心,确定6s为半径的圆。对圆内以s为步长的采样点计算haar小波响应(边长为4s)。

以兴趣点为中心,对小波响应进行高斯加权()。对一个扇形区间(比如π/3)的水平和垂直方向的小波响应分别求和。最长矢量对应的扇形方向就是主方向。(每一个扇形窗可否有重复?)

 

2、 以兴趣点为中心,主方向为参考x轴方向,20s为边长,做正方形区域,并将该区域分为4*4个子区域。(SURF-36把它分为3*3个子区域,区分性略差但速度快。)每个子区域取5*5个采样点,计算这些采样点上的haar小波响应dx和dy。以兴趣点为中心,对响应进行高斯加权(σ=3.3s)。

 

3、 对每个子区域的dx、dy、|dx|、|dy|进行求和,归一化为单位向量。对于4*4个子块一共可以构成64维空间。(SURF-128在统计dx和|dx|时,把dy分为大于0时候和小于0时候两种情况,而在统计dy和|dy|时将dx分为大于0和小于0两种情况,这样每个子区域是8维向量)。

 

与SIFT比较

共同点:

SIFT/SURF为了实现不同图像中相同场景的匹配,主要包括三个步骤:

1、尺度空间的建立;

2、特征点的提取;

3、利用特征点周围邻域的信息生成特征描述子

4、特征点匹配。

从博客上看到一片文章,http://blog.csdn.net/cy513/archive/2009/08/05/4414352.aspx,这一段的大部分内容源于这篇文章,推荐大家去看看。

如果两幅图像中的物体一般只是旋转和缩放的关系,加上图像的亮度及对比度的不同,要在这些条件下要实现物体之间的匹配,SIFT算法的先驱及其发明者想到只要找到多于三对物体间的匹配点就可以通过射影几何的理论建立它们的一一对应。

如何找到这样的匹配点呢?SIFT/SURF作 者的想法是首先找到图像中的一些“稳定点”,这些点是一些特殊的点,不会因为视角的改变、光照的变化、噪音的干扰而消失,比如角点、边缘点、暗区域的亮点 以及亮区域的暗点。这样如果两幅图像中有相同的景物,那么这些稳定点就会在两幅图像的相同景物上同时出现,这样就能实现匹配。因此,SIFT/SURF算法的基础是稳定点。

SIFT/SURF提取的稳定点,首先都要求是局部极值。但是,当两个物体的大小比例不一样时,大图像的局部极值点在小图像的对应位置上有可能不是极值点。于是SIFT/SURF都采用图像金字塔的方法,每一个截面与原图像相似,这样两个金字塔中就有可能包含大小最近似的两个截面了。

这样找到的特征点会比较多,经过一些处理后滤掉一些相对不稳定的点。

接下来如何去匹配相同物体上对应的点呢?SIFT/SURF的作者都想到以特征点为中心,在周围邻域内统计特征,将特征附加到稳定点上,生成特征描述子。在遇到旋转的情况下,作者们都决定找出一个主方向,然后以这个方向为参考坐标进行后面的特征统计,就解决了旋转的问题。

 

共同的大问题有以下几个:

1、为什么选用高斯金字塔来作特征提取?

 

为什么是DOG的金字塔?因为它接近LOG,而LOG的极值点提供了最稳定的特征,而且DOG方便计算(只要做减法。)

为什么LOG的极值点提供的特征最稳定,有参考文献,未看。

(7.12补充:)直观理解:特征明显的点经过不同尺度的高斯滤波器进行滤波后,差别较大,所以用到的是DOG。

但是直观上怎么理解?如果相邻Octave的sigma不是两倍关系还好理解:如果两幅图像只是缩放的关系,那么假设第一个Octave找到了小一倍图像的极值点,那么大一倍图像的极值点会在下一个Octave找到相似的。但是现在,如果把大一倍图像进行一次下采样(这样和小的图像就完全一样了),进行Gauss滤波时,两个图像滤波系数(sigma)是不一样的,不就找不到一样的极值点了么?不理解。

2、Hessian矩阵为什么能用来筛选极值点?

SIFT先利用非极大抑制,再用到Hessian矩阵进行滤除。SURF先用Hessian矩阵,再进行非极大抑制。SURF的顺序可以加快筛选速度么?(Hessian矩阵滤除的点更多?)

 

至于SURF先用Hessian矩阵,再进行非极大抑制的原因,是不管先极大值抑制还是判断Hessian矩阵的行列式,金字塔上的点的行列式都是要计算 出来的。先判断是否大于0只要进行1次判断,而判断是否是极大值点或者极小值点要与周围26个点比较,只比较1次肯定快。

而在SIFT中,构建的高斯金字塔只有一座(不想SURF是有3座),要进行非极大抑制可以直接用金字塔的结果进行比较。而如果计算Hessian矩阵的 行列式,还要再计算Dxx、Dxy、Dyy。因此先进行非极大抑制。这两个步骤的先后与SIFT/SURF的实际计算情况有关的,都是当前算法下的最佳顺 序,而不是说哪种先计算一定更好。
3、为什么采用梯度特征作为局部不变特征?

这与人的视觉神经相关。采用梯度作为描述子的原因是,人的视觉皮层上的神经元对特定方向和空间频率的梯度相应很敏感,经过SIFT作者的一些实验验证,用梯度的方法进行匹配效果很好。

4、为什么可以采用某些特征点的局部不变特征进行整幅图像的匹配?

我在一份博客上找到这样一句话:(http://apps.hi.baidu.com/share/detail/32318290,大家可以看看这篇文章。)

从直观的人类视觉印象来看,人类视觉对物体的描述也是局部化的,基于局部不变特征的图像识别方法十分接近于人类视觉机理,通过局部化的特征组合,形成对目标物体的整体印象,这就为局部不变特征提取方法提供了生物学上的解释,因此局部不变特征也得到了广泛应用。

还有:

图像中的每个局部区域的重要性和影响范围并非同等重要,即特征不是同等显著的,其主要理论来源是Marr的计算机视觉理论和Treisman的特征整合理论,一般也称为“原子论”。该理论认为视觉的过程开始于对物体的特征性质和简单组成部分的分析,是从局部性质到大范围性质。

SIFT/SURF都是对特征点的局部区域的描述,这些特征点应该是影响重要的点,对这些点的分析更加重要。所以在局部不变特征的提取和描述时也遵循与人眼视觉注意选择原理相类似的机制,所以SIFT/SURF用于匹配有效果。

 

 

不同点的比较:

从博客上看到一个总结,我修改了一些内容。大家可以参看以下链接:

http://blog.csdn.net/ijuliet/archive/2009/10/07/4640624.aspx

 SIFTSURF
尺度空间DOG与不同尺度的图片卷积不同尺度的box filters与原图片卷积
特征点检测先进行非极大抑制,再去除低对比度的点。再通过Hessian矩阵去除边缘的点先利用Hessian矩阵确定候选点,然后进行非极大抑制
方向在正方形区域内统计梯度的幅值的直方图,找max对应的方向。可以有多个方向。在圆形区域内,计算各个扇形范围内x、y方向的haar小波响应,找模最大的扇形方向
特征描述子16*16的采样点划分为4*4的区域,计算每个区域的采样点的梯度方向和幅值,统计成8bin直方图,一共4*4*8=128维20*20s的区域划分为4*4的子区域,每个子区域找5*5个采样点,计算采样点的haar小波响应,记录∑dx,∑dy,∑|dx|,∑|dy|,一共4*4*4=64维

SURF—金字塔仅仅是用来做特征点的检测。在计算描述子的时候,haar小波响应是计算在原图像(利用积分图)。而SIFT是计算在高斯金字塔上(注意不是高斯差分金字塔。)

性能的比较:

论文:A comparison of SIFT, PCA-SIFT and SURF 对三种方法给出了性能上的比较,源图片来源于Graffiti dataset,对原图像进行尺度、旋转、模糊、亮度变化、仿射变换等变化后,再与原图像进行匹配,统计匹配的效果。效果以可重复出现性为评价指标。

比较的结果如下:

method

Time

Scale

Rotation

Blur

Illumination

Affine

Sift

common

best

best

common

common

good

Pca-sift

good

good

good

best

good

best

Surf 

best

common

common

good

best

good

 

 

 

 

 

 

由此可见,SIFT在尺度和旋转变换的情况下效果最好,SURF在亮度变化下匹配效果最好,在模糊方面优于SIFT,而尺度和旋转的变化不及SIFT,旋转不变上比SIFT差很多。速度上看,SURF是SIFT速度的3倍。

 
 
************************************************************************************************************
我是华丽的分割线~~

 

 

 

引言

本节主要是David Lowe对于SIFT算法的阐述Distinctive Image Features from Scale-Invariant Keypoints和Herbert Bay, Andreas Ess, Tinne Tuytelaars, Luc Van Gool, 对于SURF算法的阐述以及小结。

SIFT特征提取小结

根据LOWE的文章(更为SIFT特征提取分析,请见详参考博文尺度不变特征变换(SIFT)特征提取分析)

首先,先对SIFT算法的主要原理、流程做一个简要阐述。由于该算法的核心是“尺度不变”特征点的提取,所以特征点得筛选资源从高斯金字塔产生的差分高斯空间中的局部极值点获得

  • 第一、个人认为关于高斯金字塔以及拉普拉斯算子的原理可以作以下直观理解:SIFT算法的尺度不变特征点大多是边缘上的点(更进一步是边缘上的角点(如矩形的四个顶点),关于边缘上非角点得去除会在下文提到),而边缘上的点即是高频(亮度与邻接点相差大)的点,它的亮度变化率取到一个极大值,即亮度变化率的变化率(亮度的二阶导数)等于0,即拉普拉斯算子△I=0。
  • 第二、由于当图像与高斯核卷积后,I(x,y)变为G(X,Y,σ),求二阶偏导数可以转化为求关于尺度σ的一阶偏导数(高斯核即二维正态分布是热传导方程的一个解),且求这个偏导数更易实现,所以引入以σ为变量的高斯差分空间。对高斯差分空间可作如下直观理解:当人眼由远及近地观察一个物体,物体的细节会变化,但大体轮廓不会变化,由此可以通过比较站在远处和近处的两个画面来确定轮廓。事实上高斯差分空间中的图像看起来像浮雕,轮廓非常明显,所以求出高斯差分空间邻接图像的极值点即可。】

其次,进行初步取得的极值点得筛选工作,分两步,筛出特征点。

  • 用二次曲面来模拟每个极值点附近的图像亮度函数,求出理论上极值点,设定一个界限,舍去实际点与理论点偏差大于界限的点。
  • 去除仅落在边缘上而非角点的点。这类应被舍去的点有一个特征:沿着边缘切线方向的图像函数平缓(曲率小),垂直边缘方向陡峭(曲率大)。由于Hessian矩阵的两个特征值是X,Y方向的曲率,所以求出每个极值点两个特征值的比值,设定一个界限,舍去不合格的点即可。

最后,选定特征点后,就对每个特征点进行描述子(模拟人眼视网膜)的制作(因为特征点对图像的变化过于敏感,而描述子不敏感)。

  • 由于SIFT对旋转有不变性,所以为每个特征点计算一个方向,这是制作描述子的预备工作。(具体实现是选定一个特征点附近的区域,算出区域中所有点的梯度大小以及方向,然后将这些方向分为36组,按梯度大小和正态分布函数加权,绘制0~360°的直方图,再用二次函数拟合求直方图的最大值点,得到一个特征点的总方向(若有次最大值点接近极大值点,则将这一特征点分为二个在同一坐标的点,但分别使用两个不同方向)。
  • 确定方向后将区域内所有点的梯度方向转过一个上述确定的主方向的角度。然后将区域分为4*4=16个正方形子区域,每个区域中的点按梯度大小和正态分布加权,绘制出8个方向的直方图,所以每个特征点可得到一个128维的描述子向量(因为要使特征点对对比度变化不敏感,还需对向量归一化处理)。这些描述子即可用于匹配,即寻找另一幅图像中与该特征点128维向量几何距离最短的点。LOWE提到的方法是用K-D树搜索,但由于高维情形耗时较长,需加一个近似最优的贪心法剪枝和一个卡时出解的策略求得近似解。至此,SIFT算法完成。
除上述对SIFT算法的理论可行性讨论外,在SIFT实现的过程中还有一个重要的方面是一些参数的选择,例如一个OCTAVE几个图,一个描述子几个子区域,以及舍弃极值点时界限阈值(threshold)的选择,这些都关系到识别的精确度和算法的效率。Lowe在文章中给出了推荐数据,但在具体情况下可能可以再作微调(如识别的场景不同)。

SIFT算法时间复杂度的瓶颈在于描述子的建立和匹配,如何优化对特征点的描述方法是提升SIFT效率的关键,PCA-SIFT等算法在这里做了优化。

SURT特征提取小结

SURF算法(更为SURF特征提取分析,请见详参考博文SURF特征提取分析)是对SIFT算法的改进,其基本结构、步骤与SIFT相近,但具体实现的过程有所不同。SURF算法的优点是速度远快于SIFT且稳定性好。

首先,先对SURF算法的中特征点的提取

  • 在SURF算法中,特征点的判据为某像素亮度的Hessian矩阵的行列式(Dxx*Dyy-Dxy*Dxy)为一个极值。由于Hessian矩阵的计算需要用到偏导数的计算,这一般通过像素点亮度值与高斯核的某一方向偏导数卷积而成;在SURF算法里,为提高算法运行速度,在精度影响很小的情况下,用近似的盒状滤波器(0,1,1组成的box filter)代替高斯核。因为滤波器仅有0,-1,1,因此卷积的计算可以用积分图像(Integral image)来优化(O(1)的时间复杂度),大大提高了效率。每个点需计算Dxx,Dyy,Dxy三个值,故需要三个滤波器;用它们滤波后,得到一幅图像的响应图(Response image,其中每个像素的值为原图像素的Dxx*Dyy-Dxy*Dxy)。对图像用不同尺寸的滤波器进行滤波,得到同一图像在不同尺度的一系列响应图,构成一个金字塔(该金字塔无需像SIFT中的高斯一样进行降采样,即金字塔每组中的每层图像分辨率相同)。
  • 特征点的检测与SIFT一致,即若某点的Dxx*Dyy-Dxy*Dxy大于其邻域的26个点(与SIFT一致)的Dxx*Dyy-Dxy*Dxy,则该点为特征点。特征点的亚像素精确定位与SIFT一致。
其次,描述子的建立
  • 为保证特征点描述子的旋转不变性,需对每个特征点计算主方向。计算主方向的过程如下:
    1. 统计以特征点为中心,正比于特征点尺度的某个数位半径,张角为60°的扇形区域内所有像素点的 sumX=(y方向小波变换响应)*(高斯函数),sumY=(x方向小波变换响应)*(高斯函数), 计算合成向量角度θ=arctan(sumY/sumX),模长sqrt(sumy*sumy+sumx*sumx)。
    2. 将扇形沿逆时针旋转(一般取步长为0.1个弧度),以同样方法计算合成向量。
    3. 求出各方向扇形的合成向量模长最大值,其对应的角度即特征点主方向。
  • 描述子的建立过程如下:
    1. 选定以特征点为中心的一块正方形区域,将其旋转与主方向对齐。
    2. 将正方形分为4x4的16个子区域,对每个区域进行Haar 小波变换(同样用积分图像加速),得到4个系数。
    3. 由上述两步,生成4x4x4=64维向量,即描述子,用它可以进行匹配等工作。

此算法的优点在于大量合理使用积分图像降低运输量,而且在运用的过程中并未降低精度(小波变换,Hessian矩阵行列式检测都是成熟有效的手段)。在时间上,SURF运行速度大约为SIFT的3倍;在质量上,SURF的鲁棒性很好,特征点识别率较SIFT高,在视角、光照、尺度变化等情形下,大体上都优于SIFT。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值