OpenCV: как получить более точные баллы, используя findHomography () / findFundamental () и RANSAC

OpenCV не предоставляет RANSAC-функцию как таковую или, по крайней мере, в такой форме, что вы можете просто вызвать ее и покончить с ней (например,cv::ransac(...)). Все функции / методы, которые могут использовать RANSAC, имеют флаг, который это позволяет. Однако это не всегда полезно, если вы действительно хотите сделать что-то еще с вычислениями RANSAC, после того как вы оценили гомографию / фундаментальную матрицу, например, создайте хороший график в Octave или аналогичном программном обеспечении / библиотеке точек, примените дополнительные алгоритмы к оставшийся набор отфильтрованных совпадений и т. д.

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

РЕДАКТИРОВАТЬ: При написании этого я обнаружил ответ (см. Ниже), но решил в любом случае опубликовать этот вопрос на случай, если кому-то понадобится эта информация как можно скорее и в компактной форме. Обратите внимание, что нам все еще нужна одна из функций OpenCV, которая поддерживает RANSAC. Поэтому, если у вас есть набор точек, но нет намерения вычислять гомографию или фундаментальную матрицу, это явно не тот путь, и я осмелюсь сказать, что я не смог найти ничего полезного в API OpenCV, которое могло бы помочь избежать этого препятствия, поэтому вам нужно использовать внешняя библиотека.

Ответы на вопрос(2)

Ваш ответ на вопрос