SURF特征基本介绍 SURF(Speeded Up Robust Features)特征关键特性: -特征检测 -尺度空间 -选择不变性 -特征向量 工作原理 1. 选择图像中POI(Points of Interest) Hessian Matrix 2. 在不同的尺度空间发现关键点,非最大信号压制 3. 发现特征点方法、旋转不变性要求 4. 生成特征向量 SURF特征提取代码演示 -upright // 0- 表示计算选择不变性,1表示不计算,速度 更快 -HessianThreshold // 默认值在300~500之间 -Octaves // 4表示在四个尺度空间 -OctaveLayers // 表示每个尺度的层数
#include <opencv2/opencv.hpp> #include <opencv2/xfeatures2d.hpp> #include <iostream> using namespace cv; using namespace cv::xfeatures2d; using namespace std; int main(int argc, char** argv) { Mat src = imread("D:/vcprojects/images/test.png", IMREAD_GRAYSCALE); if (src.empty()) { printf("could not load image... "); return -1; } namedWindow("input image", CV_WINDOW_AUTOSIZE); imshow("input image", src); //SURF特征检测 int minHessian = 100; Ptr<SURF> detector = SURF::create(minHessian); vector<KeyPoint> keypoints; detector->detect(src, keypoints, Mat()); //绘制关键点 Mat keypoint_img; drawKeypoints(src, keypoints, keypoint_img, Scalar::all(-1), DrawMatchesFlags::DEFAULT); imshow("KeyPoints Image", keypoint_img); waitKey(0); return 0; }