Я использую opencv для оценки аффинного преобразования между двумя изображениями (назовем его A и B, и я хочу оценить от A до B), и мне нужно реализовать RANSAC, чтобы получить наилучшую возможную оценку. На данный момент моя структура для RANSAC (учитывая, что у меня уже есть ключевые точки для обоих изображений и совпадений между ними):
1: Выберите 3 случайных совпадения и используйте совпадающие точки из A и B в качестве входных данных для функции getAffineTransform;
2: Используйте функцию warpAffine, чтобы деформировать точки из A и сравнить результаты с точками B., получив скорость выбросов: e;
3: Учитывая, что размер моей выборки составляет 3 балла (getAffineTransform требуется 3 балла, чтобы найти преобразование) и у меня есть частота выбросов e, я могу найти количество раз, которое мне нужно запускать RANSAC, чтобы иметь высокую вероятность найти хорошая оценка, N раз;
4: повторите шаги 1 и 2 N раз, сохраняя преобразование с наименьшей частотой выбросов;
Хотя основная идея кажется хорошей, у меня возникли проблемы с выполнением, особенно с шагом 2. Моя проблема в том, что я не уверен, как я могу проверить количество выбросов. Я думал о сопоставлении точек A с B с помощью warpAffine, но я почти уверен, что это не сработает, потому что я считаю, что функция будет интерпретировать мой мат точек (который представляет собой мат Mx2, где M - количество точек, а каждый столбец координаты x и y точки) в качестве изображения вместо набора точек, которые я хочу отобразить. Как я могу это сделать?
Я использую opencv 2.4.2 с С++.