Ask Your Question

Revision history [back]

Matching doesn't work for stored data depending on descriptor

Hi there!

I also started a discussion here: http://stackoverflow.com/questions/26657597/different-matching-results-for-opencvs-descriptor-extractor-matcher-when-loadin

I'm trying to match an image against a set of stored keypoints and descriptors. As described in the above link I get different results for these two cases:

  1. ./save: compute keypoints and descriptors for both images, store kp and desc. of image 1 to my disk as yml, load these data again and use it for matching against image 2.

  2. ./load: load the stored keypoints and descriptors of image 1, compute it for image two and do the matching

If I am using SIFT and SURF there is no difference between the two cases, what is basicly what I would have expected, as I'm using in both cases the stored data.

But if I use ORB, BRISK or other descriptors, I get different matching results! So using the descriptor_extractor_matcher.cpp sample (with some edits for reading and writing) it works well for

  • ./save HARRIS SURF BruteForce CrossCheckFilter roof.png roof_sepia.png 3
  • ./load HARRIS SURF BruteForce CrossCheckFilter roof.png roof_sepia.png 3

and it doesnt work for

  • ./save HARRIS ORB BruteForce CrossCheckFilter roof.png roof_sepia.png 3
  • ./load HARRIS ORB BruteForce CrossCheckFilter roof.png roof_sepia.png 3

I don't have a clue whats the difference between the two cases, and why there it is in addition working for some descriptors... ?!

image description

Thanks for your help!