OpenCV не предоставляет функцию RANSAC как таковой или, по крайней мере, в такой форме, которую вы можете просто вызвать и выполнить с ней (например, cv::ransac(...)
). Все функции/методы, которые могут использовать RANSAC, имеют флаг, который позволяет это. Однако это не всегда полезно, если вы действительно хотите что-то сделать с помощью вычислений, которые RANSAC вычисляет после того, как вы оценили гомографию/фундаментальную матрицу, например, создайте хороший сюжет в Octave или аналогичном программном обеспечении/библиотеке точек, примените дополнительные алгоритмы на оставшийся набор фильтрованных совпадений и т.д.
После сопоставления двух изображений получается вектор совпадений. Наряду с этим у нас есть, конечно, 2 набора ключевых точек (по одному для каждого изображения), которые использовались в процессе сопоставления. Используя совпадения и ключевые точки, мы создаем два вектора точек (например, cv::Point2f points
) и передаем их в findHomography()
. Из этого и этих сообщений я узнал, как точно помечены метки с помощью маски, которые мы передаем этому функция. Каждая строка внутри маски относится к более раннему/выброшенному. Однако я не могу понять, как использовать информацию индекса строки из моих двух наборов точек. Глядя на исходный код OpenCV, я не зашел слишком далеко. В findFundamental()
(аналогично findHomography()
, когда дело доходит до его подписи и части маски), они используют compressPoints()
, который каким-то образом объединяет два набора, которые мы имеем в качестве входных (исходные и целевые точки), в один. Во время тестирования, чтобы определить природу маски, я попробовал 2 набора совпадающих точек (преобразованный cv::Keypoints
в cv::Point2f
- стандартная процедура). Каждый набор содержит 300 очков, поэтому в общей сложности у нас 600 баллов. Возвращаемая маска содержит 300 строк (значения для данного раздела не важны).
EDIT: при написании этого я обнаружил ответ (см. ниже), но решил опубликовать этот вопрос в любом случае, если кому-то нужна эта информация как можно скорее и в компактной форме. Обратите внимание, что нам по-прежнему нужна одна из функций OpenCV, которые поддерживают RANSAC. Поэтому, если у вас есть набор точек, но вы не хотите вычислять гомографию или фундаментальную матрицу, это явно не так, и я осмелюсь сказать, что мне не удалось найти что-либо полезное в API OpenCV, которое может помочь избежать этого препятствия, поэтому вам нужно использовать внешняя библиотека.