Pracuję nad przetwarzaniem obrazu. Chcę dopasować cechy 2D i zrobiłem wiele testów na SURF, SIFT, ORB.
Jak mogę zastosować RANSAC na SURF/SIFT/ORB w OpenCV?Jak zastosować RANSAC w dopasowywaniu wyników SURF, SIFT i ORB
5
A
Odpowiedz
23
OpenCV ma funkcję cv::findHomography
, która może opcjonalnie użyć RANSAC do znalezienia macierzy homograficznej związanej z dwoma obrazami. Możesz zobaczyć przykład tej funkcji w akcji here.
szczególności sekcja kodu jesteś zainteresowany to:
FlannBasedMatcher matcher;
std::vector<DMatch> matches;
matcher.match(descriptors_object, descriptors_scene, matches);
for(int i = 0; i < good_matches.size(); i++)
{
//-- Get the keypoints from the good matches
obj.push_back(keypoints_object[ good_matches[i].queryIdx ].pt);
scene.push_back(keypoints_scene[ good_matches[i].trainIdx ].pt);
}
Mat H = findHomography(obj, scene, CV_RANSAC);
Następnie można użyć funkcji cv::perspectiveTransform
wygięcie obrazy według matrycy homography.
Inne opcje cv::findHomography
innego niż CV_RANSAC
są 0
który wykorzystuje każdy punkt i CV_LMEDS
która wykorzystuje metodę najsłabiej mediany. Więcej informacji można znaleźć w dokumentacji kalibracji kamery OpenCV here.