特征检测算法--SURF

reference:https://blog.csdn.net/streamchuanxi/article/details/50924549

SURF 算法,全称是 Speeded-Up Robust Features。该算子在保持 SIFT 算子优良性能特点的基础上,同时解决了 SIFT 计算复杂度高、耗时长的缺点,对兴趣点提取及其特征向量描述方面进行了改进,且计算速度得到提高。 

具体步骤为: 
1、构造Hessian矩阵,计算特征值α 
surf构造的金字塔图像与sift有很大不同,就是因为这些不同才加快了其检测的速度。Sift采用的是DOG图像,而surf采用的是Hessian矩阵行列式近似值图像。首先是图像中某个像素点的Hessian矩阵: 
这里写图片描述 
其中,Lxx、Lxy、Lyy为高斯滤波后图像g(σ)在各个方向的二阶导数。 
二阶导数计算方法为:d2L(x)/dx2=(L(x+1)-L(x))-(L(x)-L(x-1))=-2*L(x)+L(x+1)+L(x-1),其中L(x)=g(h(x))(h(x)为原始图像的灰度值,L(x)是将h(x)高斯滤波处理后的图像)。 
为了找出图像中的特征点,需要对原图进行变换,在sift算法中,实在DOG图像中进行,那么,在surf算法中,该如何进行呢?该变换图就是原图每个像素的Hessian矩阵行列式的近似值构成的。公式为 
这里写图片描述 
其中,0.9为原文作者给出的一个经验值。 
由于求Hessian时要先高斯平滑,然后求二阶导数,这在离散的像素点是用模板卷积形成的,这2种操作合在一起用一个模板代替就可以了,比如说y方向上的模板如下,以9*9的模板为例: 
这里写图片描述 
图中灰色像素代表0;上图中1为y方向的先高斯滤波然后二阶求导的处理,近似处理为图3,图2位x和y方向上的先高斯滤波然后二阶混合偏导,近似为图4。 
有了这个近似的模板以后,计算高斯滤波和二阶导数两个步骤就可以一个步骤完成,同时,为了提高计算效率,还引入了积分图像的概念,提高了速度。 
下面就来介绍一下积分图像的知识:

积分图像,就是当前的每个像素的灰度都是它与坐标原点(0,0)形成的对角线的矩形内的所有像素的灰度值之和。如下图 
这里写图片描述 
图中蓝色像素的积分图像的灰度值就是黄色框内的所有像素的灰度值之和。其他像素同样的计算方法。 
有了积分图像的概念,在计算某个矩形框内的像素灰度值之和时,就可以很简单的得出了。如下图 
这里写图片描述 
灰色矩形框内的灰度值之和就是A+D-C-B,就是很简单的一个矩形面积计算公式,A代表AO对角线矩形的面积,以此类推。 
这样,计算像素的H矩阵时,将会非常的方便,比如-2那一块,只需要知道4个顶点像素的积分图像的值,便可以求出那一块的灰度值之和。 
至此,我们求出了原图的Hessian矩阵,然后计算行列式的近似值就得出了我们需要寻找特征点的变换图像。 
2、构造高斯金字塔 
相比于sift算法的高斯金字塔构造过程,sift算法速度有所提高。在sift算法中,每一组(octave)的图像大小是不一样的,下一组是上一组图像的降采样(1/4大小);在每一组里面的几幅图像中,他们的大小是一样的,不同的是他们采用的尺度σ不同。而且在模糊的过程中,他们的高斯模板大小总是不变的,只是尺度σ改变。对于surf算法,图像的大小总是不变的,改变的只是高斯模糊模板的尺寸,当然,尺度σ也是在改变的。 
这里写图片描述 
上图中a为高斯模板保持不变,图像大小改变的情况,适用于sift算法,图b是高斯模板改变,图像大小保持不变的情况,适用于surf算法。因为surf算法没有了降采样的过程,因此处理速度得到提高。 
3、定位特征点 
首先初步定为特征点,如下图,将经过hessian矩阵处理过的每个像素点与其3维领域的26个点进行大小比较,如果它是这26个点中的最大值或者最小值,则保留下来,当做初步的特征点。 
这里写图片描述 
然后,跟sift算法类似,采用3维线性插值法得到亚像素级的特征点,同时也去掉那些值小于一定阈值的点,增加极值使检测到的特征点数量减少,最终只有几个特征最强点会被检测出来。 
4、确定特征点主方向 
为了保证旋转不变性,在SURF中,不统计其梯度直方图,而是统计特征点领域内的Harr小波特征。即以特征点为中心,计算半径为6s(S为特征点所在的尺度值)的邻域内,统计60度扇形内所有点在x(水平)和y(垂直)方向的Haar小波响应总和(Haar小波边长取4s),并给这些响应值赋高斯权重系数,使得靠近特征点的响应贡献大,而远离特征点的响应贡献小,然后60度范围内的响应相加以形成新的矢量,遍历整个圆形区域,选择最长矢量的方向为该特征点的主方向。这样,通过特征点逐个进行计算,得到每一个特征点的主方向。该过程的示意图如下: 
这里写图片描述 
5、构造特征描述子 
在特征点周围取一个正方形框,框的边长为20s(s是所检测到该特征点所在的尺度)。该框带方向,方向当然就是第4步检测出来的主方向了。然后把该框分为16个子区域,每个子区域统计25个像素的水平方向和垂直方向的haar小波特征,这里的水平和垂直方向都是相对主方向而言的。该haar小波特征为水平方向值之和,水平方向绝对值之和,垂直方向之和,垂直方向绝对值之和。该过程的示意图如下所示: 
这里写图片描述 
这样每个小区域就有4个值,所以每个特征点就是16*4=64维的向量,相比sift而言,少了一半,这在特征匹配过程中会大大加快匹配速度。

综上所述,可知SURF采用Henssian矩阵获取图像局部最值还是十分稳定的,但是在求主方向阶段太过于依赖局部区域像素的梯度方向,有可能使得找到的主方向不准确,后面的特征向量提取以及匹配都严重依赖于主方向,即使不大偏差角度也可以造成后面特征匹配的放大误差,从而匹配不成功;另外图像金字塔的层取得不足够紧密也会使得尺度有误差,后面的特征向量提取同样依赖相应的尺度,在这个问题上我们只能采用折中解决方法:取适量的层然后进行插值。

猜你喜欢

转载自blog.csdn.net/zhuisaozhang1292/article/details/80982679