OpenCV - Объект, соответствующий использованию дескрипторов ПЕРЕМЕЩЕНИЯ и BruteForceMatcher

у меня есть вопрос об объектах, соответствующих OpenCV. Я - useing алгоритм ПЕРЕМЕЩЕНИЯ, реализованный в opencv 2.3 для первого обнаружения функций на каждом изображении и затем извлечения дескрипторов этих функций. Проблема в соответствии Грубой силе использования Matcher, я не знаю, как я сужу, что два изображения подобраны, или не это - то, как тогда, когда я использую два различных изображения существуют строки между дескрипторами в двух изображениях!

Эти выводы моего кода, или два изображения-I соответствуют им - подобны или отличаются, изображение результата указывают, что два изображения подобраны.

вопрос: Как я могу различить два изображения?

Истинное соответствие:

http://store1.up-00.com/Jun11/hxM00286.jpg

Ложное соответствие!!:

http://store1.up-00.com/Jun11/D5H00286.jpg

Мой код:

Mat image1, outImg1, image2, outImg2;

// vector of keypoints
vector<KeyPoint> keypoints1, keypoints2;

// Read input images
image1 = imread("C://Google-Logo.jpg",0);
image2 = imread("C://Alex_Eng.jpg",0);

SurfFeatureDetector surf(2500);
surf.detect(image1, keypoints1);
surf.detect(image2, keypoints2);
drawKeypoints(image1, keypoints1, outImg1, Scalar(255,255,255), DrawMatchesFlags::DRAW_RICH_KEYPOINTS);
drawKeypoints(image2, keypoints2, outImg2, Scalar(255,255,255), DrawMatchesFlags::DRAW_RICH_KEYPOINTS);

namedWindow("SURF detector img1");
imshow("SURF detector img1", outImg1);

namedWindow("SURF detector img2");
imshow("SURF detector img2", outImg2);

SurfDescriptorExtractor surfDesc;
Mat descriptors1, descriptors2;
surfDesc.compute(image1, keypoints1, descriptors1);
surfDesc.compute(image2, keypoints2, descriptors2);

BruteForceMatcher<L2<float>> matcher;
vector<DMatch> matches;
matcher.match(descriptors1,descriptors2, matches);

nth_element(matches.begin(), matches.begin()+24, matches.end());
matches.erase(matches.begin()+25, matches.end());

Mat imageMatches;
drawMatches(image1, keypoints1, image2, keypoints2, matches, imageMatches, Scalar(255,255,255));

namedWindow("Matched");
imshow("Matched", imageMatches);

cv::waitKey();
return 0;
19
задан Adam Lear 26 November 2011 в 23:03
поделиться