Different matching results for opencv's descriptor_extractor_matcher when loading data from file -
Different matching results for opencv's descriptor_extractor_matcher when loading data from file -
i using next code in descriptor_extractor_matcher.cpp sample compute descriptors of img1 (mat descriptors01), write disk , load (mat descriptors1). (same steps keypoints, code rather much same ...)
ptr<descriptorextractor> descriptorextractor = descriptorextractor::create( argv[2] );
...
mat descriptors01; descriptorextractor->compute( img1, keypoints1, descriptors01 ); // compute descriptors filestorage storage("test.yml", filestorage::write); //save disc storage << "blub" << descriptors01; storage.release(); mat descriptors1; filestorage storage1("test.yml", filestorage::read); // load 1 time again storage1["blub"] >> descriptors1; storage1.release();
the keypoints & descriptors image 2 computed , used without saving , loading.
i using loaded info (keypoints & descriptors) image 1 matching, descriptors: descriptors1.
now here thing: if compare cases a) using code above computing, storing , loading; b) using loaded info (without computing , store again)
for matching different results, can see in pictures keypoints aswell matching descriptors. have expect no differences... missing here? must compare 2 images, , cannot compare image stored set of keypoints , it's descriptors ?
of course of study i'm using same values [detectortype] [descriptortype] [matchertype] [matcherfiltertype] [image1] [image2] [ransacreprojthreshold], way ;)
thanks alot!
update:
it seems issue depending on descriptor. working loaded descriptors works sift , surf, not orb , other. images: results different descriptors case , b:
try repeating or b individually , see if results coming out same. suspect won't , because, #1 object of involvement has poor texture , result in poor descriptors. #2 viewpoint alter between 2 images huge , leads problem of non-repeatability best of descriptors sift.
now, comes part of how solve repeatability issue, #1 utilize threshold on norm of descriptor strong features used matching. #2 utilize epipolar constraint along ransac filter out wrong matches. attaching 2 images show how filter hugely affects correspondences. using surf find correspondence between 2 images (two images in red-cyan colormap) after filtering images using ransac using epipolar constraint.
feel free comment , discuss farther on issue. :-)
opencv matching surf feature-extraction orb
Comments
Post a Comment