OpenCv-C++-SURF特征检测

SURF采用的是Hessian矩阵(SURF算法核心)行列式近似值图像。SURF(加速版的具有鲁棒性的特征,SpeededUp Robust Features),SURF是尺度不变特征变换算法(SIFT算法)的加速版。SURF最大的特征在于采用了harr特征以及积分图像的概念。
而Hessian矩阵是Surf算法的核心,为了方便运算,如果函数f(z,y),Hessian矩阵H是由函数,偏导数组成。首先来看看图像中某个像素点的Hessian矩阵。例如以下:
在这里插入图片描述
所以每个像素点都能够求出一个Hessian矩阵。

理论部分必须要参考这篇两文章:https://blog.csdn.net/qq_31531635/article/details/73798398
https://www.cnblogs.com/gavanwanggw/p/7073905.html

#include<opencv2/opencv.hpp>
#include<opencv2/xfeatures2d.hpp>
#include<iostream>
#include<math.h>

using namespace cv;
using namespace std;
using namespace cv::xfeatures2d;

Mat src;
int main(int argc, char** argv)
{
	src = imread("D:/test/src.png",IMREAD_GRAYSCALE);//IMREAD_GRAYSCALE加载的就变成一张灰度图像
	if (src.empty())
	{
		cout << "图片未找到!" << endl;
		return -1;
	}
	imshow("input title", src);
	int minHessian = 400;//默认值为100

	//SURF特征检测
	Ptr<SURF>detector = SURF::create(minHessian, 4, 3, false, false);
	//也可以写成SURF::create(minHessian)
	vector<KeyPoint>keyPoints;   
	detector->detect(src, keyPoints, Mat());
	Mat resultImg;
	//绘制关键点
	drawKeypoints(src, keyPoints, resultImg, Scalar::all(-1), DrawMatchesFlags::DEFAULT);
	imshow("KetPoint image", resultImg);

	waitKey(0);
	return 0;
}

运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Daker_Huang/article/details/84557644