Speeded Up Robust Features(SURF)

本文讲述的是SURF的骨架,有利于理解SURF算法本身,如需探究SURF算法细节、实现请参考SURF原文、OpenCV对SURF的实现( OpenCV 2.4.13.6解压后路径在opencv-2.4.13.6\modules\nonfree\src\surf.cpp)。

积分图、Haar特征

贯穿SURF特征检测、描述整个过程需要用到的两个常用的技术是Integral Image
(Summed-area table)
Haar-like feature
积分图计算方法和图示见公式(1)和图1。

I(xi,yj)=x=0x<xiy=0y<yjf(x,y)(1) (1) I ( x i , y j ) = ∑ x = 0 x < x i ∑ y = 0 y < y j f ( x , y )

ellipse
图1 Intergral Image

Haar特征有多种模板,本文中用到的是提取图像水平、竖直方向梯度的两种,如图2所示。

ellipse
图2 Haar Feature

Interest Point Detection

首先,建立图像的积分图。

然后,类似SIFT对图像进行降采样分Octave,每个Octave再分Layer。Octave之间的差别是图像大小是2倍关系;Octave内部各层之间的关系是使用的Box Filter模板大小不同。每个Layer使用的Box Filter模板大小示例如图3所示。

ellipse
图3 Graphical representation of the filter side lengths for three different octaves

然后,需要对每个Octave内的每个Layer求Hessian Matrix的行列式det和迹trace。det用来和预设阈值进行比较,大于阈值认为是特征点。trace的符号表示了对比度的变化,用来做匹配的一个条件,trace符号相同认为梯度方向相同,trace符号不同认为梯度方向不同肯定不是相互匹配的点对,如图4所示。

ellipse
图4 the trace of the Hessian Matrix

建立Hessian矩阵的方法是利用Box Filter(具体形式可参考SURF原文中的介绍)。因为在特征点检测的过程中采用了积分图、使用Box Filter对Gaussian Filter进行了近似等加速运算的方法,所以SURF特征检测的方法叫做Fast-Hessian。我们知道Laplacian of Gaussian(LoG)是最好的保证特征尺度不变的方法,其具体实现方法就是先进行Gaussian滤波,然后求二阶导数。而进行Gaussian Filter耗时而且效果未必好,因此SURF采用了Box Filter进行近似,具体实现时利用Box Filter一次性完成了滤波和求二阶导,实现了Hessian-Laplace从而保证了特征点的尺度不变性(Hessian matrix本身是无法实现尺度不变的)。每个Layer的Box Filter形式如图5所示,但是每个Layer的Box Filter模板大小是不同的。需要做相应的缩放,如图6所示。

ellipse
图5 Box Filter

图5中上面一行是Gaussian滤波器的二阶微分卷积模板,下面一行是对其近似的Box Filter滤波器的二阶微分卷积模板。

ellipse
图6 Box Filter模板缩放示例

对于Hessian Matrix上某一点 (i,j) ( i , j ) 其Hessian Matrix的值 det(Hessianapprox) d e t ( H e s s i a n a p p r o x ) 求解方式。利用Box Filter进行卷积不需要遍历求解,根据Box Filter的特殊性利用积分图进行加减法得到关于 x x 的二阶导数Dxx、关于 y y 的二阶导数Dyy、关于 xy x y 的二阶导数 Dxy D x y ,然后根据公式(2)进行求解。

det(Hessianapprox)=DxxDyy(0.9Dxy)2(2) (2) d e t ( H e s s i a n a p p r o x ) = D x x D y y − ( 0.9 D x y ) 2

遍历整个Layer即可得到该Layer的Hessian Matrix。

剔除不合理特征点

得到Hessian Matrix之后,根据预设阈值来初步判断特征点,大于预设阈值则认为是可能的特征点。利用非极大值抑制、插值偏移的合理性来剔除不合理的特征点。
非极大值抑制,用法和SIFT是一致的,比较该候选特征点的Hessian Matrix det值与其周围8个点,上、下Layer的各9个,共26个点的det值大小,如图7所示,如果候选点的det比26个点中的任何一个小则剔除该候选特征。由于不同Octave的Layer大小不同,因此只能在每个Octave中除了该Octave的最上、最下层的中间层才能进行非极大值抑制。

ellipse
图7 非极大值抑制

插值法剔除不合理特征点,在各个Layer中检测到的特征点都是经过离散化、降采样得到的积分图上得到的,映射到原图上未必是特征点。在Hessian Matrix中对每个点进行泰勒展开,然后对泰勒展开式求导并令导函数为零,即可得到极值点相对于该点的偏移量。如果偏移量合理(不大于1)则保留,否则剔除。

特征点角度判断

SURF实现旋转不变是通过为每个特征点分配一个复现性好的角度实现的。具体地,以特征点为中心以6s为半径做圆,得到6s圆邻域,以s为采样间隔利用尺寸是4s的Haar Filter进行滤波得到该6s圆邻域内的Haar响应,然后在梯度坐标系里以张角60度以一定步长遍历一周,统计每个张角里梯度和以及角度和(Haar响应),如图8所示。由于离特征点越近对特征点影响越大因此需要进行一定的加权。得到Haar响应之后根据对x轴、y轴的响应建立梯度坐标系,然后在梯度坐标系里做一个张角为60度的扇形滑窗口,以一定的角度步长滑动一圈,分别累计各个位置Haar响应的模和幅角,如公式(3)(4)所示。

m=dxx+dyy(3) (3) m = ∑ d x x + ∑ d y y

θ=arctandxxdyy(4) (4) θ = arctan ⁡ ∑ d x x ∑ d y y

ellipse
图8 Orientation assignment

认定模值最大的窗口所在的幅角就是该特征点的角度。
需要明确的是在一些应用场景下不需要保证特征点角度不变,因此可以采用Upright-SURF。

特征点描述

对特征点检测的时候应该使其repeatability好,在描述特征点的时候应该使其区分性要好。
以每个特征点为中心建立4*4的区块,每个区块有5*5像素,然后将区块旋转到特征点方向,如图9所示。对每个小区块计算Haar 特征,然后用特征向量 v=[dx,|dx|,dy,|dy|] v = [ ∑ d x , ∑ | d x | , ∑ d y , ∑ | d y | ] 表示该小区块的特征,因此该特征点共4*4*4=64维特征。更精细的可用128维特征表示,即将正负梯度分开统计。
为降低光照的影响需要对特征进行归一化处理,即将每一维特征除以64维特征的模长。

ellipse
图9 特征表示

特征点匹配

特征点匹配时先利用Hessian Matrix的trace的符号进行判断,符号不同肯定不是匹配的特征点。然后可利用距离进行判断,常用的欧氏距离。

参考文献

  1. SURF
  2. OpenCV 2.4.13.6
  3. opencv2.4.9源码分析——SURF
  4. Opencv2.4.9源码分析——SURF
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值