SURF原理与源码解析

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

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

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

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等人采用盒子滤波器对高斯二阶微分模板近似处理。


           Lyy                                   Lxy                                    Dyy                                     Dxy

如图所示,图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小波响应。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维。最后为了防止光照与对比度的影响,对特征矢量归一化处理。

SURF源码分析参看下一篇文章。



参考:
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

  • 3
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值