转自:https://blog.csdn.net/lz20120808/article/details/49302373
SURF算法简介:
SURF (Speeded Up Robust Features, 加速稳健特征) 是一个稳健的图像识别和描述算法,首先于2006年发表在ECCV大会上。这个算法可被用于计算机视觉任务,如物件识别和3D重构。他部分的灵感来自于 SIFT 算法。SURF标准的版本比SIFT要快数倍,并且其作者声称在不同图像变换方面比SIFT更加稳健。
SURF使用海森矩阵(Hessian)的行列式值作特征点响应侦测并用积分图加速运算;SURF 的描述子基于 2D 离散小波变换响应Harr小波并且有效地利用了积分图。
SURF算法的概念及步骤均建立在SIFT之上,但详细的流程略有不同。
SURF算法包含以下三个步骤:特征点侦测、特征邻近描述、描述子配对。
1.特征点侦测:
SIFT对原图像不断地进行Gauss平滑+降采样。得到金字塔图像后,有进一步得到了DoG图,边和斑状结构就是通过DoG图得到其在原图的位置。而高斯核的尺度因子即sigma是不同的。
SURF使用了方型滤波器取代SIFT中的高斯滤波器,借此达到高斯糢糊的近似。图像大小保持不变,改变的是滤波器的大小。其滤波器可表示为:
此外使用方型滤波器可利用积分图大幅提高运算速度,仅需计算位于滤波器方型的四个角落値即可。
SURF使用了斑点侦测的海森矩阵来侦测特征点,其行列式值代表相素点周围的变化量,因此特征点需取行列式值为极大、极小值。除此之外,为了达到尺度上的不变,SURF还使用了尺度σ的行列式值作特征点的侦测,给定图形中的一点x=(x, y),在尺度σ的海森矩阵为H(x, σ):
使用近似的Hessian矩阵行列式来表示图像中某一点x处的斑点响应值,遍历图像中所有的像元点,便形成了在某一尺度下特征点检测的响应图像。使用不同的模板尺寸,便形成了多尺度特征点响应的金字塔图像,利用这一金字塔图像,就可以进行特征点响应极值点的搜索,其过程完全与SIFT算法类同。
作者为了加速卷积的速度,采用了方型滤波器(box filter)对高斯滤波器二阶偏导进行近似。
上图分别为X方向,Y方向,XY方向的近似模板。
由SURF原作者得出w的值近似为0.9。
2.尺度空间描述与特征点定位:
1.特征点定位
因为影像会在不同的尺度下作比较,特征点往往会在不同尺度下被侦测到。为特征点具有尺度不变性,在SIFT中,由于连续的高斯糢糊处理以及影像的降采样,在尺度上会形成类似金字塔的概念,例如高斯金字塔。
而SURF中尺度是由方型滤波器的大小决定的,并不是连续的斯糢糊及降采样处理。其中最底层的尺度(初始尺度)的方型滤波器大小为9*9,近似于σ=1.2的高斯滤波器。越往上层的尺度滤波器的大小也就跟着增加,例如15*15、21*21、27*27……。
即第一层的每组相隔6,第二层的每组相隔12,第三层的每组相隔24。。。
在通常尺度分析情况下,随着尺度的增大,被检测到的斑点数量迅速衰减。所以一般进行3-4组就可以了,与此同时,为了减少运算量,提高计算的速度,可以考虑在滤波时,将采样间隔设为2。
与SIFT相同,SURF会使用特征点海森矩阵的行列式值作邻近资料插补来定位特征点。
为了在图像及不同尺寸中定位兴趣点,我们用了3×3×3邻域非最大值抑制:所有小于预设极值的取值都被丢弃,增加极值使检测到的特征点数量减少,最终只有几个特征最强点会被检测出来。该尺度层图像中9个像素点之一作为检测特征点与自身尺度层中其余8个点和在其之上及之下的两个尺度层9个点进行比较,共26个点,图中标记‘x’的像素点的特征值(hessian矩阵行列式)若大于周围像素则可确定该点为该区域的特征点。
2.特征点描述
为了特征点具有旋转不变的特性,需要赋予特征点一个描述子,使其能保有其不变性且能够轻易地被区分。大多数的描述子建立的方法为描述特征点与其相邻的相素点间的变化,因此描述子往往都是区域性的。
同时描述子的维度也是描述子重要的考量之一,一个维度不足的描述子可能会使能特征点不易区分,然而维度过大的描述子要耗费的计算也就越复杂。SURF的描述子使用了哈尔小波转换的概念,并利用积分图简化描述子的计算。
方位定向:
以特征点为中心,计算半径为6s(S为特征点所在的尺度值)的圆形邻域内的点在x、y方向的Haar小波(Haar小波边长取4s)响应,Harr小波模板如图所示:
分别为X,Y方向响应
计算出图像在哈尔小波的x和y方向上的响应值之后,对两个值进行因子为2S的高斯加权,加权后的值分别表示在水平和垂直方向上的方向分量。Harr特征值反应了图像灰度变化的情况,那么这个主方向就是描述那些灰度变化特别剧烈的区域方向。接着,以特征点为中心,张角为π/3的扇形滑动,计算窗口内的Harr小波响应值dx、dy的累加:
在所有的向量当中最长的(即x、y分量最大的)即为此特征点的方向。
特征点特征矢量的生成
选定了特征点的方向后,其周围相素点需要以此方向为基准来建立描述子。以特征点为中心,构造一个20*20的正方形窗口(为特征点所在窗口的尺度值)。其后将将该窗口划分为更小的4X4个子区域,在每个子区域内按照5X5的大小进行取样,计算子区域内的x、y方向(此时以平行特征点方向为x、垂直特征点方向为y)的哈尔小波转换总合sum dx、sum dx与其向量长度总合sum |dx|、sum |dy|共四个量值,共可产生一个4X4X4=64维资料的描述子。
3.匹配
为了加速匹配过程,作者借助Laplacian(比如Hessian矩阵的迹)的符号使匹配过程索引加快。
相关知识点简介附:
对于OPENCV,opencvsurf和opencv中的surf是不同的,这点要清楚。否则网上有很多surf源码分析,让人摸不着头脑。
opencv中的surf类继承结构如下:
积分图解释如下: