Note that there are some explanatory texts on larger screens.

plurals
  1. POOpenCV - Object matching using SURF descriptors and BruteForceMatcher
    primarykey
    data
    text
    <p>I have a question about objects matching with OpenCV. I'm useing SURF algorithm implemented in opencv 2.3 to first detect features on each image, and then extracting the descriptors of these features. The problem in matching using Brute Force Matcher, I don't know how I judge that the two images are matched or not that's as when I'm using two different images there are lines between descriptors in the two images!</p> <p>These outputs of my code, either the two images -I compare with them - are similar or different, the result image indicate that the two images are matched. </p> <p><strong>The question is: How can I distinguish between the two images?</strong></p> <p>True matching: </p> <p><img src="https://i.stack.imgur.com/Xz310.jpg" alt="http://store1.up-00.com/Jun11/hxM00286.jpg"></p> <p>False matching!! : </p> <p><img src="https://i.stack.imgur.com/7xXeS.jpg" alt="http://store1.up-00.com/Jun11/D5H00286.jpg"></p> <p>My code: </p> <pre><code>Mat image1, outImg1, image2, outImg2; // vector of keypoints vector&lt;KeyPoint&gt; 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&lt;L2&lt;float&gt;&gt; matcher; vector&lt;DMatch&gt; 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; </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload