2016-04-18 1 views
1

Я пытаюсь зарегистрировать два бинарных изображения. Я использовал opencv orb detector и matcher для создания и сопоставления функциональных точек. Однако результат сопоставления выглядит плохим. Может ли кто-нибудь сказать мне, почему и как улучшить? Благодарю. Вот изображения и итоговый результат.Как улучшить совместимость с функцией orb?

enter image description here

enter image description here

enter image description here

Вот код

OrbFeatureDetector detector; //OrbFeatureDetector detector;SurfFeatureDetector 
vector<KeyPoint> keypoints1; 
detector.detect(im_edge1, keypoints1); 
vector<KeyPoint> keypoints2; 
detector.detect(im_edge2, keypoints2); 

OrbDescriptorExtractor extractor; //OrbDescriptorExtractor extractor; SurfDescriptorExtractor extractor; 
Mat descriptors_1, descriptors_2; 
extractor.compute(im_edge1, keypoints1, descriptors_1); 
extractor.compute(im_edge2, keypoints2, descriptors_2); 

//-- Step 3: Matching descriptor vectors with a brute force matcher 
BFMatcher matcher(NORM_L2, true); //BFMatcher matcher(NORM_L2); 

vector< DMatch> matches; 
matcher.match(descriptors_1, descriptors_2, matches); 


vector<DMatch> good_matches; 
vector<Point2f> featurePoints1; 
vector<Point2f> featurePoints2; 
for(int i=0; i<int(matches.size()); i++){ 
    good_matches.push_back(matches[i]); 
} 

//-- Draw only "good" matches 
Mat img_matches; 
imwrite("img_matches_orb.bmp", img_matches); 
+0

Вы можете поделиться своим кодом? – tfv

+0

Привет, tfv, я добавил свой код. – fnhdx

+0

вы можете отслеживать лучший и второй лучший матч. Если у обоих есть схожие качества, которые вы не можете решить, вы можете отказаться от этого соответствия – Micka

ответ

0

ORB дескрипторы, в отличие от SURF, двоичные дескрипторы. Расстояние HAMMING подходит для сравнения двоичных дескрипторов. Используйте NORM_HAMMING при инициализации BFMatcher.

Смежные вопросы