Ошибка подтверждения CVC в OpenCV CV - счетчик => 4
В настоящее время я заканчиваю свой инструмент оценки для детекторов точек интереса. На последних шагах я обнаружил непонятную ошибку.
Mat findHomography(InputArray srcPoints, InputArray dstPoints, int method=0, double ransacReprojThreshold=3, OutputArray mask=noArray() )
srcPoints
а также dstPoints
являются vector<Points2f>
который хранит соответствующие точки совпадающих ключевых точек. Пока ничего особенного - это как в уроках.
Но когда я использую RANSAC и имею vector<Points2f>
в диапазоне [0, ..., 4] я получаю ошибку утверждения, что счетчик должен быть больше или равен четырем.
Вопрос 1: Нужно ли алгоритму как минимум четыре пункта, чтобы описать, что принадлежит текущей модели или нет, и создать консенсус?
Вопрос 2: Есть ли документация по этому поводу? (Я посмотрел на документ и учебники.)
Обратите внимание, что я уже видел этот вопрос. Но нет удовлетворительного ответа за поведение RANSAC. Или я должен согласиться с тем, что для этого метода нужно как минимум четыре пункта, чтобы найти гомографию?
Спасибо за вашу помощь.
2 ответа
Гомография не может быть рассчитана с менее чем 4 парами точек. Это потому, что только с 3 пунктами есть неоднозначность перспективы. Изобразите треугольник
a
b c
на рисунке 1. На рисунке 2 точки были преобразованы, чтобы выглядеть следующим образом
a
b c
Расстояние между b и c было сокращено вдвое. К сожалению, вы не знаете, так ли это, потому что точка c стала ближе к вам или дальше от вас. С 4-м пунктом разница становится очевидной.
a d
b c
Вот квадрат на изображении 1
d
a
b c
здесь D и C повернулся к вам
a
d
b c
и вот они повернулись от вас.
Я не вижу этого требования в документации openCV, но если вы найдете какие-либо ресурсы для расчета гомографии, вам не нужно будет читать слишком далеко, прежде чем вы найдете это требование и более строгое доказательство того, что достаточно 4 баллов.
RANSAC используется для выбора 4 пар совпадающих точек в большем наборе или соответствиях (т.е. когда srcPoints.size() >= 4
). Вот почему вы получаете ошибку, если srcPoints.size() <=4
,
Вам нужно как минимум 4 соответствия просто потому, что матрица гомографии H
имеет 8 степеней свободы, следовательно, 8 линейных уравнений необходимы, чтобы найти решение. Так как каждая пара точек генерирует два линейных уравнения (используя координаты x и y), вам потребуется не менее 4 соответствий.