Обнаружение мусорных гомографов от findHomography в OpenCV?
Я использую findHomography
в списке точек и отправляю результат на warpPerspective
.
Проблема заключается в том, что иногда результатом является полный мусор, и результирующее изображение представлено странными серыми прямоугольниками.
Как я могу определить, когда findHomography
отправляет мне плохие результаты?
Ответы
Ответ 1
На выходе можно выполнить несколько тестов на чувствительность. Наверху:
- Вычислите детерминант гомографии и посмотрите, слишком ли он близок к нулю для удобства.
- Еще лучше, вычислите его SVD и убедитесь, что отношение от первого до последнего единственного числа
значение является нормальным (не слишком высоким). Любой результат скажет вам, близка ли матрица к
единственное число.
- Вычислить изображения углов изображения и его центра (т.е. точек, которые вы получаете, когда
вы применяете гомографию к этим углам и центру), и убедитесь, что они имеют смысл,
то есть они находятся внутри холста изображения (если вы ожидаете, что они будут)? Хорошо ли они разделены
друг от друга?
- Участок в matlab/октаве выводит (данные) точки, на которые вы устанавливаете гомографию, вдоль
с их вычисленными значениями из входных, используя гомографию, и убедитесь, что они
(т.е. ошибка низкая).
Общей ошибкой, которая приводит к результатам мусора, является неправильное упорядочение списков входных и выходных точек, что приводит к тому, что подгоняющая подпрограмма работает с неправильными соответствиями. Убедитесь, что ваши показатели верны.
Ответ 2
Понимание вырожденных случаев гомографии является ключевым. Например, вы не можете получить хорошую гомографию, если ваши точки коллинеарны или близки к коллинеарным, например. Кроме того, огромные серые квадраты могут указывать на крайнее масштабирование. Оба случая могут возникнуть из-за того, что в вашем окончательном вычислении гомографии очень мало, или отображение неверно.
Чтобы этого не произошло:
1. Убедитесь, что точки хорошо распределены на обоих изображениях.
2. Убедитесь, что имеется не менее 10-30 соответствий (4 достаточно, если шум мал).
3. Убедитесь, что точки правильно подобраны, а трансформация - гомография.
Чтобы найти плохую гомологию, примените найденный H к вашим исходным точкам и посмотрите расстояние от ожидаемых точек, которое |x2-H*x1| < Tdist
, где Tdist
- ваш порог для ошибки расстояния. Если есть только несколько точек, которые удовлетворяют этому порогу, ваша гомография может быть плохим, и вы, вероятно, нарушили один из вышеупомянутых требований.
Ответ 3
Но это зависит от точечных соответствий, которые вы используете для вычисления гомографии...
Просто подумайте, что вы пытаетесь найти трансформацию, которая отображает линии в строки (из одной плоскости в другую), поэтому никакая возможная конфигурация точечных соответствий не даст вам гомографии, которая создает красивые изображения.
Возможно даже, что гомография отображает некоторые точки в бесконечность.