Я работаю над обработкой изображений. Я хочу сопоставить 2D-функции, и я провел много тестов на SURF, SIFT, ORB.
Как применить RANSAC на SURF/SIFT/ORB в OpenCV?Как применить RANSAC на результаты поиска SURF, SIFT и ORB
5
A
ответ
23
OpenCV имеет функцию cv::findHomography
, которая может использовать RANSAC, чтобы найти матрицу гомографии, относящуюся к двум изображениям. Вы можете увидеть пример этой функции в действии here.
В частности, раздел кода, который вы заинтересованы в том:
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);
Вы можете использовать функцию cv::perspectiveTransform
деформировать изображения в соответствии с матрицей гомография.
Другие варианты cv::findHomography
кроме CV_RANSAC
являются 0
, который использует каждую точку и CV_LMEDS
, которая использует наименее Median метод. Более подробную информацию можно найти в документации по калибровке камеры OpenCV here.