Я пытаюсь зарегистрировать два бинарных изображения. Я использовал opencv orb detector и matcher для создания и сопоставления функциональных точек. Однако результат сопоставления выглядит плохим. Может ли кто-нибудь сказать мне, почему и как улучшить? Благодарю. Вот изображения и итоговый результат.Как улучшить совместимость с функцией orb?
Вот код
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);
Вы можете поделиться своим кодом? – tfv
Привет, tfv, я добавил свой код. – fnhdx
вы можете отслеживать лучший и второй лучший матч. Если у обоих есть схожие качества, которые вы не можете решить, вы можете отказаться от этого соответствия – Micka