OpenCV - Objet correspondant à l'aide de descripteurs SURF et BruteForceMatcher

J'ai une question à propos des objets de correspondance avec OpenCV.
Je suis en utilisant les VAGUES de l'algorithme mis en œuvre dans opencv 2.3 d'abord de détecter les caractéristiques de chaque image, et puis l'extraire les descripteurs de ces caractéristiques.
Le problème de l'appariement en utilisant la Force Brute de Traits, je ne sais pas comment je juge que les deux images correspondent ou pas, c'est que lorsque je suis à l'aide de deux images différentes, il y a des lignes entre les descripteurs dans les deux images!

Ces sorties de mon code, soit les deux images-je le compare avec ceux - ci, sont semblables ou différentes, le résultat de l'image indiquent que les deux images sont appariés.

La question est: Comment puis-je distinguer entre les deux images?

Véritable correspondance:

OpenCV - Objet correspondant à l'aide de descripteurs SURF et BruteForceMatcher

Faux correspondance!! :

OpenCV - Objet correspondant à l'aide de descripteurs SURF et BruteForceMatcher

Mon code:

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;
InformationsquelleAutor khateeb | 2011-09-04