码迷,mamicode.com
首页 > 其他好文 > 详细

【特征匹配】SURF原理与源码解析

时间:2015-08-20 15:21:45      阅读:1544      评论:0      收藏:0      [点我收藏+]

标签:surf   特征匹配   

SURF (Speed Up Robust Features)是SIFT改进版也是加速版,提高了检测特征点的速度,综合性能要优于SIFT。

下面先逐次介绍SURF的原理,最后解析opencv上SURF源码。

转载请注明出处:http://blog.csdn.net/luoshixian099/article/details/47778143

1.积分图像

SURF是对积分图像进行操作,从而实现了加速,采用盒子滤波器计算每个像素点的Hessian矩阵行列式时,只需要几次加减法运算,而且运算量与盒子滤波器大小无关,所以能够快速的构成出SURF的尺度金字塔。

积分图像中每个像元的值,是原图像上对应位置的左上角所有元素之和

技术分享技术分享

如上图:我们要得到绿色矩形区域内的矩形像素之和S,只需要在积分图上,运算S=D-B-C+A就可以得到。

2.尺度空间的构造

2.1

对DoH的近似

SIFT采用了对LoG的近似算法DoG,而SURF (Speed Up Robust Features) 采用对DoH近似进行特征点检测,LoG与DoH是检测特征点的两种常用方法。

连续函数f(x,y)的二阶微分Hessian矩阵。

技术分享

我们可以利用Hessian矩阵的行列式值判断点(x,y)是否是极值点

技术分享

在离散空间上,为了得到Hessian矩阵的四个元素,SURF采用二阶标准高斯核函数的对图像卷积运算,因为高斯核可以构造出不同尺度下的响应图像。在尺度σ下,点 X=(x,y) 处,对应的Hessian矩阵。

技术分享

Lxx是标准高斯函数g(x,y,σ)的二阶偏导数与图像在点(x,y)处卷积的结果;

技术分享

同理,Lyy,Lxy的计算方法。这样可以计算出图像上所有点的Hessian行列式值。

为了能加速运算,Bay等人采用盒子滤波器对高斯二阶微分模板近似处理。

技术分享

LyyLxyDyyDxy

如图所示,图1是y方向的二阶高斯微分模板,图3采用盒子滤波器对其进行近似,数字表示对应颜色区域的权值,灰色区域权值为0,采用盒子滤波器与图像卷积的结果记为Dxx,Dyy,Dxy。因为盒子滤波器在积分图像上计算非常快。

由于是对原Hessian矩阵的近似,由相关推导可以证明采用下面的公式,更接近真实值。由于不同的尺度下,对应的值(0.9)不同,这里为了统一,要求计算盒子滤波响应时,对模板盒子进行归一化处理。

技术分享

采用上面的公式,图像上每一个像素点计算出一个Hessian矩阵响应值,作为在尺度σ下的响应图像。

2.2

构造尺度空间

构造尺度空间是为了在空间域与尺度域上找到极值点,作为初步的特征点。构造尺度空间传统的方法即构造一个高斯金字塔,原始图像作为最底层,然后对图像进行高斯模糊再降采样(2倍)作为下一层图像,循环迭代下去。高斯金字塔是对原图像的尺寸是在不断变化的,高斯模板尺寸不变。每一层的建立必须等到上一层构造完毕后才能进行处理,依赖性很强,这样造成速度上很慢。SURF构建尺度金字塔的方法采用原图像大小不变,变化的是模板大小,即采用变化的模板盒子尺寸对原图像进行滤波,构造出尺度空间。同时,SURF可以采用并行运算,对金字塔中的每层图像同时进行处理。通过逐渐增大的盒子尺寸滤波模板与积分图像卷积产生的Hessian矩阵行列式的响应图像,构造出金字塔。

如下图所示,左图为构建高斯金字塔的方法,右图为SURF构建的方法。

技术分享

SURF首先采用9×9的盒子滤波器(近似等于σ=1.2时的高斯二阶微分,记为尺度s=1.2)得到的响应图像作为最底层的图像,然后逐渐增大盒子的尺寸,对原图像继续进行滤波处理。与SIFT类似,把响应图像分成若干组,每组若干层。每组都是采用逐渐增大的滤波器尺寸进行处理。层与层之间的尺度变化量是高斯二阶微分模板决定的。对于9×9的滤波器,由于要保证滤波器的结构比例不变同时要求存在滤波器模板中心,每个块最小增加量是2,由于有三个块,所以最小增加量是6,即下一个滤波器的大小为15×15,依次增加为21×21,27×27,...;利用这样的模板序列,就构造出尺度空间

技术分享

2.3D非极大值抑制

与SIFT类似,对每层图像上的每个像素与空间邻域内和尺度邻域内的响应值比较(不包括第一层与最后一层图像),同层上有8个邻域像元,向量尺度空间共有2×9=18个,共计26个像元的值进行比较,如果是极大值则保留下来,作为候选特征点。

技术分享

同时如果特征点的响应值小于Hessia行列式的阈值,也被排除。

3.准确定位特征点

由于是离散空间的极值点,通过拟合方法,准确定位到特征点的位置,每个特征点包含三个信息H(x,y,σ),即位置与尺度。与SIFT的方法一样,可以看我写的SIFT原理的文章。
技术分享
求导,并令其等于0得:
技术分享
计算方法:
技术分享,技术分享

求得技术分享即在三个方向的偏移量

通过以上的方法,即找到了每个特征点的位置,下面介绍SURF特征点的描述子。

4.特征点描述子

4.1

为特征点分配主方向

为了保证旋转不变性,首先要为特征点分配主方向。以特征点为中心,6s为半径的圆域,统计所有像素点的Harr小波响应。实际上就是计算圆域每个像素点水平梯度与垂直梯度。Harr小波模板的长度为4s。尺度s的计算,是根据当前模板的大小。

技术分享,Harr小波模板(黑色1,白色-1)技术分享

圆域内的每个像素都计算出Harr小波水平响应与垂直响应值,同时乘以对应位置的高斯权重(σ=2.5s).
为了求取主方向,采用一个张角为60度的扇形滑动窗口,计算其区域内的Harr小波水平与垂直方向的响应之和,滑动扇形窗口,得到最大的响应区域对应的方向即为此特征点的主方向。

技术分享
4.2

形成特征矢量


沿着主方向,取20s×20s的矩形区域作为其邻域,分成4×4个子区域,统计每个子区域内像素点的Harr小波模板,沿着主方向与垂直于主方向的响应,Harr小波模板的宽度为2s。统计16个子区域的响应信息,每个子区域采用下面公式的方法进行统计,同时每个像素点的响应要乘以对应位置的高斯权重(σ = 3.3s)。
技术分享
技术分享
这样每个子区域携带4个信息,共有16个子区域,共64维。最后为了防止光照与对比度的影响,对特征矢量归一化处理。

关于SIFT源码分析,会继续更新....


参考:
SURF: Speeded Up Robust Features :Herbert Bay, Tinne Tuytelaars, and Luc Van Gool
http://blog.csdn.net/crzy_sparrow/article/details/7392345
http://blog.csdn.net/yangtrees/article/details/7482960
http://www.cnblogs.com/tornadomeet/archive/2012/08/17/2644903.html


版权声明:本文为博主原创文章,未经博主允许不得转载。

【特征匹配】SURF原理与源码解析

标签:surf   特征匹配   

原文地址:http://blog.csdn.net/luoshixian099/article/details/47807103

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!