其他分享
首页 > 其他分享> > OpenCV第十三讲:SURF特征点的检测与匹配详解

OpenCV第十三讲:SURF特征点的检测与匹配详解

作者:互联网

Dog算子,SIFT特征点, Fast角点 ,ORB特征点 有时间慢慢再来解析

1. SURF的优势

2.SURF算法原理

1. 构建Hessian矩阵, 构造高斯金字塔尺度空间

SURF构造的金字塔图像与SIFT有很大不同,是造成SURF快很多的原因之一。

Sift采用的是Dog算子, 而surf采用的是Hessian矩阵行列式近似值图像, Hessian矩阵是Surf算法的核心

但由于特征点需要具备尺度无关性,所以在在计算Hessian矩阵之前,需要对其进行高斯滤波

在SURF算法中,为了计算Hessian矩阵,我们选用二阶标准高斯函数作为滤波器, 通过特定核间的卷积计算二阶偏导数,从而可以得到H矩阵
在这里插入图片描述

L(x,t)=G(t)I(x,t)L(x, t)=G(t) \cdot I(x, t)L(x,t)=G(t)⋅I(x,t), G(t)=2g(t)x2G(t)=\frac{\partial^{2} g(t)}{\partial x^{2}}G(t)=∂x2∂2g(t)​.

为应用方便, 有人(Herbert Bay)提出了用近似值线线代替L(x,t), 为了平衡误差引入权值,权值随着尺度变换, 则H矩阵的判别式可表示为:

det(H)=DxxDyy(0.9Dxy)2\operatorname{det}(\text {H})=D x x D y y-\left(0.9 D_{x y}\right)^{2}det(H)=DxxDyy−(0.9Dxy​)2

2. 利用非极大值抑制初步确定特征点

初步特征点的确定: 将经过hessian矩阵处理过的每个像素点与其3维领域的26个点进行大小比较,如果它是这26个点中的最大值或者最小值,则保留下来,当做初步特征点。

3. 精确定位极值点

和sift算法类似,采用三维线性插值法得到亚像素级的特征点,同时也去掉那些值小于一定阈值的点,增加极值使检测到的特征点数量减少,最终只有几个特征最强点会被检测出来。

4. 选取特征点的主方向

梯度直方图不熟,记个标签,后面专门补上。

haar小波特征不熟,记个标签2,后面补上更新

5. 构造SURF特征点描述算子

3. SURF缺点

在上面讲述SURF的原理过程中,都与sift特征进行了对比, 突出了surf特征的优势所在,那么现在分析一下surf有那些缺点:

4.SURF特征的提取和匹配–OpenCV函数

		int minHessian = 400; ## 检测关键点的数量
		cv::Ptr<xfeatures2d::SURF> detector = xfeatures2d::SURF::create( minHessian );
		cv::Ptr<xfeatures2d::SIFT> detectorSift = xfeatures2d::SIFT::create(minHessian);
		## 画出关键点位置
		drawKeypoints(image1, kyPoints1, img_kyPoints1, cv::Scalar::all(-1), DrawMatchesFlags::DEFAULT);  
		vector<DMatch> matches;
		FlannBasedMatcher matcher;
		matcher.match(descrip1, descrip2, matches);
		# 画出匹配的关键点
		drawMatches ( image1, kyPoints1, image2, kyPoints2, matches, img_matches );

在这里插入图片描述

4. SURF特征与SIFT特征各项指标对比

在这里插入图片描述

且理论上, SURF比SIFT快3倍。

标签:SURF,第十三,特征,矩阵,OpenCV,SIFT,方向,Hessian
来源: https://blog.csdn.net/qq_29797957/article/details/100156303