OpenCV中SURF特征点检测原理与实现
2014-11-16 10:38
405 查看
SURF,全称是Speed Up Robust Features.是一种尺度旋转不变的特征检测方法。主要思想与SIFT类似。但是,运算速度比SIFT提高了5至10倍。
相对于SIFT,SURF能够大幅提升运算速度主要体现在三方面:
*使用了积分图像完成图像卷积,极大的加快了运算速度。
*将特征向量为64维,而SIFT为128维。
*SIFT用图像金字塔和尺寸不变的卷积核来实现尺度不变性,而SURF则使用相 同的图像和尺寸改变的卷积核来实现尺度不变性。(因为SURF使用了积分图技术,
对于尺寸改变的卷积核只需要三步加减法运算即可得到结果)
(1)选出兴趣点并分别标注在图像上,例如拐角、斑块和T型连接处。
(2)用特征向量描述兴趣点的邻域。
(3)在不同的图片之间匹配特征向量。
积分图IΣ(X)在位置X = (x, y)处代表I在X之前的矩形区域像素值的和。
例如,我们要计算图中Σ区域的值,Σ=A-B-C+D,注意,这里的A其实是代表从A点到原点O矩形区域的值,同理,B和C也是一个矩形区域的值。之后减去D,是因为区域B和C都包含了区域D,用A减时,多减了一次区域D,所以要加上。所以,我们用大小可变的箱型卷积时,计算复杂度不会随着卷积核尺寸的大小改变而变化,因为都是三次简单的加减法运算即可。
对于一个图像中的点X = (x, y),尺度为σ的Hessian矩阵H(X, σ)定义为:
其中Lxx(X, σ)为点X处的高斯二阶倒数
的卷积。Lxy(X, σ)和Lyy(X, σ)与之类似。我们要求黑塞矩阵行列式的值。
以9*9滤波器为例,如上图所示,左边两幅图分别为灰度图像在中心点(黑色点)处的二阶导数d2f(x)/dx2和d2f(x)/dxdy的模板对应的值, 近似后变成右边的两幅图,图中灰色部分像素值为0。可是这样的计算太麻烦,所以我们就用积分图来加速上述计算过程。
因为我们近似了函数模板,所以这里修改特征值α求解公式
用Dxx来表示Lxx,其它同理。0.9是一个平衡因子,原论文作者已经根据实验验证过,我们只需用就可以了,这里不做详细阐述。
非极大值抑制,顾名思义,就是不是极大值的不要。如上图所示,我们将一组大小相同的图像(按照大小不同的高斯滤波二阶导模板)得到平滑后的图像沿Z轴排列,以某特征点为中心,若该点的特征值α比其它26个点的都大,我们就认为该点为特征点。
至此,我们得到了关于特征点4*4*4=64维的描述算子。
注意OpenCV对SURF已有封装函数。之前找错了,走了弯路,还有就是OpenCV2.2以上的版本leagcy路径也变了,大家要注意。奉上我的源程序。
and Luc Van Gool: SURF:Speded Up Robust Features
/article/4670281.html
相对于SIFT,SURF能够大幅提升运算速度主要体现在三方面:
*使用了积分图像完成图像卷积,极大的加快了运算速度。
*将特征向量为64维,而SIFT为128维。
*SIFT用图像金字塔和尺寸不变的卷积核来实现尺度不变性,而SURF则使用相 同的图像和尺寸改变的卷积核来实现尺度不变性。(因为SURF使用了积分图技术,
对于尺寸改变的卷积核只需要三步加减法运算即可得到结果)
1综述
1.1任务
我们目标是找到两幅图像中相同的部分或物体。而且这种匹配要对尺度和旋转具有不变性,而且对于光照和噪声也有很好的鲁棒性。1.2 步骤
SURF算法主要分为三步:(1)选出兴趣点并分别标注在图像上,例如拐角、斑块和T型连接处。
(2)用特征向量描述兴趣点的邻域。
(3)在不同的图片之间匹配特征向量。
2兴趣点检测
2.1积分图
积分图IΣ(X)在位置X = (x, y)处代表I在X之前的矩形区域像素值的和。
例如,我们要计算图中Σ区域的值,Σ=A-B-C+D,注意,这里的A其实是代表从A点到原点O矩形区域的值,同理,B和C也是一个矩形区域的值。之后减去D,是因为区域B和C都包含了区域D,用A减时,多减了一次区域D,所以要加上。所以,我们用大小可变的箱型卷积时,计算复杂度不会随着卷积核尺寸的大小改变而变化,因为都是三次简单的加减法运算即可。
2.2利用Hessian矩阵求特征值α
2.2.1Hessian矩阵
黑塞矩阵(Hessian Matrix),是一个多元函数的二阶偏导数构成的方阵,描述了函数的局部曲率。对于一个图像中的点X = (x, y),尺度为σ的Hessian矩阵H(X, σ)定义为:
其中Lxx(X, σ)为点X处的高斯二阶倒数
的卷积。Lxy(X, σ)和Lyy(X, σ)与之类似。我们要求黑塞矩阵行列式的值。
以9*9滤波器为例,如上图所示,左边两幅图分别为灰度图像在中心点(黑色点)处的二阶导数d2f(x)/dx2和d2f(x)/dxdy的模板对应的值, 近似后变成右边的两幅图,图中灰色部分像素值为0。可是这样的计算太麻烦,所以我们就用积分图来加速上述计算过程。
因为我们近似了函数模板,所以这里修改特征值α求解公式
用Dxx来表示Lxx,其它同理。0.9是一个平衡因子,原论文作者已经根据实验验证过,我们只需用就可以了,这里不做详细阐述。
2.2.2非极大值抑制确定领域特征点
非极大值抑制,顾名思义,就是不是极大值的不要。如上图所示,我们将一组大小相同的图像(按照大小不同的高斯滤波二阶导模板)得到平滑后的图像沿Z轴排列,以某特征点为中心,若该点的特征值α比其它26个点的都大,我们就认为该点为特征点。
3.寻找特征向量
3.1选取特征点的主方向
我们统计特征点邻域(半径为6s的圆内,s为该点所在的尺度)内的harr小波特征。如下图,统计60度范围内的所有点的水平Harr小波特征值和垂直Harr小波特征值的和,Harr小波的尺寸为4s。扇形按照一定间隔在园内旋转,每个扇形得到一个值,最后,将最大值那个扇形的主方向作为该特征点的主方向。3.2构造描述算子
我们以特征点为中心取一个20*20的框,这个框的方向就是上一步计算出的主方向。然后,将此框划分为4*4个子区域,在每个子区域中统计5*5点的水平(相对于主方向)和垂直Harr小波特征之和。为了增加密度改变的极性信息,我们增加了水平方向和垂直方向的绝对值之和。如下图:至此,我们得到了关于特征点4*4*4=64维的描述算子。
3.匹配
生成两幅图像的特征描述算子,将两幅图像中对应的特征点进行匹配。为了加速匹配过程,作者借助Laplacian(比如Hessian矩阵的迹)的符号使匹配过程索引加快。这样可以将下面两种情况区分开:4.实验
注意OpenCV对SURF已有封装函数。之前找错了,走了弯路,还有就是OpenCV2.2以上的版本leagcy路径也变了,大家要注意。奉上我的源程序。
5.源程序资源
http://download.csdn.net/detail/bright_geek/81640056.参考资料:
Herbert Bay, Tinne Tuytelaars,and Luc Van Gool: SURF:Speded Up Robust Features
/article/4670281.html
相关文章推荐
- 图像特征检测描述(一):SIFT、SURF、ORB、HOG、LBP特征的原理概述及OpenCV代码实现
- OpenCV中feature2D学习——SURF和SIFT算子实现特征点检测
- Good Features to track特征点检测原理与opencv(python)实现
- OpenCV2马拉松第20圈——blob特征检测原理与实现
- OpenCv sift surf orb等特征点检测
- OpenCV学习笔记(29)KAZE 算法原理与源码分析(三)特征检测与描述
- OpenCV特征点检测------Surf(特征点篇)
- 【opencv】 特征点检测 sift和surf
- 基于opencv人脸检测原理及实现
- (学习笔记二)——基于opencv人脸检测原理及实现
- OpenCV2马拉松第22圈——Hough变换直线检测原理与实现
- OpenCV中feature2D学习——FAST特征点检测与SIFT/SURF/BRIEF特征提取与匹配
- OpenCV中feature2D学习——SIFT和SURF算法实现目标检测
- OpenCv的sift surf orb等特征点检测
- opencv重映射&surf特征点检测
- Java基于OpenCV的Surf特征检测与匹配
- OpenCV特征点检测——Surf(特征点篇)&flann
- 【opencv】特征点检测方法--GFTT,SIFT,FAST,SURF
- OpenCV中feature2D学习——SIFT和SURF算子实现特征点提取与匹配
- 基于opencv人脸检测原理及实现