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

Popular posts from this blog

formatting - SAS SQL Datepart function returning odd values -

c++ - Apple Mach-O Linker Error(Duplicate Symbols For Architecture armv7) -

php - Yii 2: Unable to find a class into the extension 'yii2-admin' -