SURF:Speed Up Robust Features是继SIFT算法后有H Bay提出的一特征点提取算法,其灵感来自于SIFT,因此该算法的几个步骤和SIFT算法类似,但其速度是SIFT算法的多倍之多(基于hessian的快速计算方法),下面咱们就来看看该算法实现的过程:(ps:本文纯属我的理解,若有错误望指正)算法
一、初始化图像:将图像转变成32位单精度单通道图像spa
二、获得图像积分图:积分图是为下面计算fast-hessian作准备设计
三、hessian矩阵计算:采用近似计算,加快计算速度code
四、构建尺度空间:保持图片不变,增大高斯核的尺度图片
五、找出关键点:利用hessian矩阵发现关键点,同时关键点还需是临近26个像素中最大或最小值unicode
六、肯定描述因子方向:为了保持特征点的旋转不变性,肯定描述因子主方向io
七、计算描述因子:利用harr小波变换计算描述因子ast
接下来介绍几个主要知识点:模板
一、积分图像:效率
X表明点(x,y),即输入图像的原点和点X所组成的矩阵内全部像素的和。将图像全部像素点计算便可
二、hessian matrix
点X的hessian matrix 可由下式定义:
其中Lxx为高斯二阶导数和图像在X点的卷积,Lxy、Lyy 相似
算法提出一种hessian matrix 的近似求解方法:即box filters
下图为二阶高斯导数的近似图像:
左边为二阶高斯导数图像,右边为二阶高斯近似图像
采用近似方法的好处是,hessian matrix的求解速度能够获得很大的提升,而后采用此方法也会形成结果出现必定的偏差,所以咱们在计算det(H)时加上一个系数w
w取0.9,具体是由下面式子计算而来:
三、构建尺度空间
为了知足尺度不变性,特征点必须在不一样的尺度空间下提取。SIFT采用的是高斯图像金字塔。因为使用了box filters 和积分图像,因此没有必要重复的计算采样层,不须要像SIFT算法那样去直接创建金字塔图像,不一样尺度的采样层只需计算一次便可,采用不断增大的盒子滤波模板的尺寸的间接方法。经过不一样尺寸盒子滤波模板和积分图像求取Hessian矩阵行列式的响应图像,而后,在响应图像上采用3D非最大值抑制,求取各类不一样尺度的斑点。
与SIFT相相似,SURF也将尺度空间划分红若干组(Octaves)。一个组表明了逐步放大的滤波模板对同一个输入图像进行滤波的一系列响应图像。每一组又有若干固定的层组成
尺度空间被分红5组(five ostavls),每组4层(four intervals),高斯核的尺度空间以下:
// Oct1: 9, 15, 21, 27
// Oct2: 15, 27, 39, 51
// Oct3: 27, 51, 75, 99
// Oct4: 51, 99, 147,195
// Oct5: 99, 195,291,387
四、找出关键点
为了在目标影像上肯定SURF特征点,咱们使用了3*3*3的模板在3维尺度空间进行非最大化抑制,根据预设的Hessian阈值H,当h大于H,并且比临近的26个点的响应值都大的点才被选为兴趣点。最后进行插值精确。
五、特征点主方向肯定
为了保证特征矢量具备旋转不变形,须要对每个特征点分配一个主要方向。须要以特征点为中心,以6s(s为特正点的尺度)为半径的圆形区域内,对图像进行Haar小波响应运算。这样作实际就是对图像进行了梯度运算,可是利用积分图像,能够提升计算图像梯度的效率。为了求取主方向值,须要设计一个以方向为中心,张角为PI/3的扇形滑动窗口,以步长为0.2弧度左右,旋转这个滑动窗口,并对窗口内的图像Haar小波的响应值进行累加。 主方向为最大的Haar响应累加值对应的方向 。
六、描述因子造成
生成特征点的特征矢量须要计算图像的Haar小波响应。在一个矩形的区域内,以特征点为中心,沿主方向将20s*20s的图像划分红4*4个子块,每一个子块利用尺寸2s的Haar小波模板进行响应计算,而后对响应值进行统计造成的特征矢量
到此,SURF的描述因子就已经造成,咱们就能够利用该描述因子去作咱们想作的事情了!