当尝试在不同图像之间匹配特征时,我们通常面临尺度变化的难题,即需要分析的图像在拍摄时与目标物体的距离是不同的,因此,目标物体在图像中有些不同的尺寸.为了解决这个问题,计算机视觉引人尺度不变的特征,主要的思想是每个检测到的特征点都伴随着对应的尺寸因子,即SURF特征。尺寸不变的特性,而且计算非常高效。特征点对应的圆圈的尺寸与图像尺寸的改变成正比。
cv::Mat image= cv::imread("church03.jpg",0);
std::vector<cv::KeyPoint> keypoints;
cv::SurfFeatureDetector surf(2500);
surf.detect(image,keypoints);
cv::Mat featureImage;
cv::drawKeypoints(image,keypoints,featureImage,cv::Scalar(255,255,255),cv::DrawMatchesFlags::DRAW_RICH_KEYPOINTS);
cv::namedWindow("SURF3 Features");
cv::imshow("SURF3 Features",featureImage);
image= cv::imread("church01.jpg",0);
keypoints.clear();
cv::SiftFeatureDetector sift(
0.03,
10.);
sift.detect(image,keypoints);
cv::drawKeypoints(image,keypoints,featureImage,cv::Scalar(255,255,255),cv::DrawMatchesFlags::DRAW_RICH_KEYPOINTS);
cv::namedWindow("SIFT Features");
cv::imshow("SIFT Features",featureImage);
image= cv::imread("church01.jpg",0);
keypoints.clear();
cv::MserFeatureDetector mser;
mser.detect(image,keypoints);
cv::drawKeypoints(image,
keypoints,
featureImage,
cv::Scalar(255,255,255),
cv::DrawMatchesFlags::DRAW_RICH_KEYPOINTS);
cv::namedWindow("MSER Features");
cv::imshow("MSER Features",featureImage);
cv::waitKey();
return 0;