SURF:加速鲁棒特征算法
SURF:Speed Up Robust Features是继SIFT算法后有H Bay提出的一特征点提取算法,其灵感来自于SIFT,所以该算法的几个步骤和SIFT算法相似,但其速度是SIFT算法的多倍之多(基于hessian的快速计算方法),下面我们就来看看该算法实现的过程:(ps:本文纯属个人理解,如有错误望指正)
1、初始化图像:将图像转变成32位单精度单通道图像
2、得到图像积分图:积分图是为下面计算fast-hessian做准备
3、hessian矩阵计算:采用近似计算,加快计算速度
4、构建尺度空间:保持图片不变,增大高斯核的尺度
5、找出关键点:利用hessian矩阵发现关键点,同时关键点还需是临近26个像素中最大或最小值
6、确定描述因子方向:为了保持特征点的旋转不变性,确定描述因子主方向
7、计算描述因子:利用harr小波变换计算描述因子
接下来介绍几个主要知识点:
1、积分图像:
X代表点(x,y),即输入图像的原点和点X所组成的矩阵内所有像素的和。将图像所有像素点计算即可
2、hessian matrix
点X的hessian matrix 可由下式定义:
其中Lxx为高斯二阶导数和图像在X点的卷积,Lxy、Lyy 类似
算法提出一种hessian matrix 的近似求解方法:即box filters
下图为二阶高斯导数的近似图像:
左边为二阶高斯导数图像,右边为二阶高斯近似图像
采用近似方法的好处是,hessian matrix的求解速度可以得到很大的提高,然后采用此方法也会造成结果出现一定的误差,因此我们在计算det(H)时加上一个系数w
w取0.9,具体是由下面式子计算而来:
3、构建尺度空间
为了满足尺度不变性,特征点必须在不同的尺度空间下提取。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
4、找出关键点
为了在目标影像上确定SURF特征点,我们使用了3*3*3的模板在3维尺度空间进行非最大化抑制,根据预设的Hessian阈值H,当h大于H,而且比临近的26个点的响应值都大的点才被选为兴趣点。最后进行插值精确。
5、特征点主方向确定
为了保证特征矢量具有旋转不变形,需要对每一个特征点分配一个主要方向。需要以特征点为中心,以6s(s为特正点的尺度)为半径的圆形区域内,对图像进行Haar小波响应运算。这样做实际就是对图像进行了梯度运算,但是利用积分图像,可以提高计算图像梯度的效率。为了求取主方向值,需要设计一个以方向为中心,张角为PI/3的扇形滑动窗口,以步长为0.2弧度左右,旋转这个滑动窗口,并对窗口内的图像Haar小波的响应值进行累加。 主方向为最大的Haar响应累加值对应的方向 。
6、描述因子形成
生成特征点的特征矢量需要计算图像的Haar小波响应。在一个矩形的区域内,以特征点为中心,沿主方向将20s*20s的图像划分成4*4个子块,每个子块利用尺寸2s的Haar小波模板进行响应计算,然后对响应值进行统计形成的特征矢量
到此,SURF的描述因子就已经形成,我们就可以利用该描述因子去做我们想做的事情了!