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...\n");
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;
}