Advertisement

SURF特征检测

阅读量:

基于LOG的优化方案DOG有助于提高检测效率, SURF(speeded up robust features)是针对DOH的一种简化的实现方式

虽然SIFT被认为是目前应用最广泛的算法之一,并且具有很高的准确性与稳定性;然而由于其实现过程相对而言较为复杂,在实际应用中往往难以达到实时处理效果;与此同时,SURF则通过近似化处理高斯二阶微分模板,并巧妙地引入了积分图像的概念,将复杂的卷积运算转化为几个简单的加减操作,从而显著提升了计算效率.实验证明SURF在性能上较SIFT提升约3倍

1. 理论

类似于SIFT的方法,SURF也需要构建一个尺度空间金字塔.具体而言,该过程包括将整个图像划分为若干(默认5)个Octave层级,每个层级又包含若干层(默认4).每一层中的图像数据均是通过不同尺度的滤波模板进行计算得到.值得注意的是,SURF算法与SIFT方法存在显著差异:相邻层级之间的图像不再是降采样的关系(这使得降采样计算得以省去),而是通过一组增大的采样步长值进行计算得到.由于下一层级滤波器的空间扩展幅度更大,因此相应地增加滤波器移动步长也是完全合理的.这种设计使得SURF算法在某些方面与小波变换中的DOH函数具有相似性.

与SIFT最大不同是,滤波时不再采用卷积的方式:

(1)首先回顾下DOH用到的Hessian矩阵:对于图像每个点 f(x,y),有

,一般做偏导前先做不同尺度的高斯模糊

共识认为,在实际应用中卷积操作具有较高的计算复杂度。该算法对图像中x和y方向的一、二阶导数以及xy交叉项等进行了近似的计算(图1-1):

图1-1. y方向二阶导的近似(左),xy方向的二阶导近似(右)

在图中所示,在该场景下定义区域1为S_1、区域2位于S_2以及区域-1位于S_0的情况下,则各方向上的二阶导数可采用如下近似处理方式。

为了消除重复计算的问题,在此我们引入了积分图像这一概念。其实这一概念非常简单,在积分图像中,每个点的值代表的是以坐标(0,0)为左上角、该点所在位置为右下角所围成矩形区域内的所有像素值之和(如图1-2所示)。

**图1-2. 积分图像(来源

这样,复杂的卷积运算就简化为了加减运算。

根据DOH,最终的响应值是Hessian矩阵的行列式,有:

通常采用的初始模板尺寸设定为9×9,并选取其对应的高斯函数参数σ=1.2,则可得到Y值定为0.9。考虑到计算过程中的简化需求,在实际应用中将其设定为固定值(实际上不同尺寸的模板对应不同的Y值)。同样地将C参数近似处理为常数值(因为C参数的变化不影响行列式极值分布特性),从而使得行列式的近似计算更为简便。

其中Dxx,Dyy和Dxy基于上文所述的积分图像计算(经过除以积分区域面积后将结果进行归一化处理)。

(2)该层次由第(1)步计算得出。基于5个Octave层次划分,并将每个Octave划分为4层结构,在此框架下起始尺寸设定为9×9矩阵,并相应地考虑垂直方向上的二阶微分滤波器响应特性:对于该滤波器,在垂直方向上的响应长度L等于水平方向上采样点数的一半(即当水平方向上有9个采样点时,在垂直方向上将有4个采样点用于计算两个方向的一阶导数),由此可得其对应的积分模板

图1-3. 滤波尺度为9的积分模板(左为yy,右为xy)

由此可得, 积分模板尺寸f与其滤波模板尺寸w之间存在特定关系: 在y轴方向上(f的高度等于w), x轴方向为其转置(f的宽度等于(2⁄3)w减去1); 而在xy平面中(f的高度等于(2⁄3)w), 宽度则与其高度相等。

由于响应长度取值为3、5、7、9……(每次增加上下两个像素才能计算微分),由此可推出滤波模板尺寸取值为9、15、21、27……(如图所示),其中图1-4表示常规设置

图1-4. 滤波尺寸

第n个_octave是从第n-1个_octave的模板尺寸序列中每隔一个元素进行抽取得到,并且这种操作会不断重复以确保输出的一致性。相应地,在这种情况下其高度和宽度是前一层次的一半,并且步长是前一层次的两倍

在构建尺度空间金字塔的过程中,在每个位置上检测其周围的26个相邻区域以识别局部极值;随后通过对响应点的x、y、o坐标进行内插计算来实现亚像素级别的调整。这种方法与SIFT算法的操作完全一致

(4)计算每个候选极值点处的梯度方向。SIFT方法通过直方图统计邻域中的方向特征,并最终生成一个128维的方向特征向量;而SURF则采用Haar小波变换来确定目标点的方向特性(这一做法的主要目的是为了简化积分图像的应用)。

图1-5. Haar小波模板(左X方向,右Y方向)

对于每一个待选点,在该区域中(应用高斯分布对每个点赋权重)通过高斯分布为每个点分配权重系数,并计算该区域在X和Y方向上的Haar特征响应值(其中Haar的尺寸设定为4倍尺度范围),然后选择具有最大响应角的方向作为主方向

生成特征描述向量。对于每一个待选点,在其20倍尺度范围内的邻域区域中进行主方向上的旋转操作以实现对称性处理后将其划分为16个子区域并计算每个子区域内该点在X轴及Y轴方向上的响应强度总和与绝对值总和(共四项指标)。从而生成了具有64维特特征向量的结果

类似于SIFT的方法同样具备匹配能力,并且在这一领域中也展现出一定的优势。然而,在实际应用中运算速度较慢。建议参考《SIFT算法原理及实现》中的BBF算法基于特征点检测技术构建特征向量空间模型的方法。

2. 代码

基于C++开发的OpenSURF版本号为...地址:http://opensurf1.googlecode.com/files/OpenSURFcpp.zip;翻墙必要性不可忽视。

SHOW一个运行的效果:

3.参考

[1] http://www.cnblogs.com/tornadomeet/archive/2012/08/17/2644903.html

[2] (代码分析)

[3]

全部评论 (0)

还没有任何评论哟~