Подтвердить что ты не робот

Обнаружение мусорных гомографов от findHomography в OpenCV?

Я использую findHomography в списке точек и отправляю результат на warpPerspective.

Проблема заключается в том, что иногда результатом является полный мусор, и результирующее изображение представлено странными серыми прямоугольниками.

Как я могу определить, когда findHomography отправляет мне плохие результаты?

4b9b3361

Ответ 1

На выходе можно выполнить несколько тестов на чувствительность. Наверху:

  • Вычислите детерминант гомографии и посмотрите, слишком ли он близок к нулю для удобства.
  • Еще лучше, вычислите его SVD и убедитесь, что отношение от первого до последнего единственного числа значение является нормальным (не слишком высоким). Любой результат скажет вам, близка ли матрица к единственное число.
  • Вычислить изображения углов изображения и его центра (т.е. точек, которые вы получаете, когда вы применяете гомографию к этим углам и центру), и убедитесь, что они имеют смысл, то есть они находятся внутри холста изображения (если вы ожидаете, что они будут)? Хорошо ли они разделены друг от друга?
  • Участок в matlab/октаве выводит (данные) точки, на которые вы устанавливаете гомографию, вдоль с их вычисленными значениями из входных, используя гомографию, и убедитесь, что они (т.е. ошибка низкая).

Общей ошибкой, которая приводит к результатам мусора, является неправильное упорядочение списков входных и выходных точек, что приводит к тому, что подгоняющая подпрограмма работает с неправильными соответствиями. Убедитесь, что ваши показатели верны.

Ответ 2

Понимание вырожденных случаев гомографии является ключевым. Например, вы не можете получить хорошую гомографию, если ваши точки коллинеарны или близки к коллинеарным, например. Кроме того, огромные серые квадраты могут указывать на крайнее масштабирование. Оба случая могут возникнуть из-за того, что в вашем окончательном вычислении гомографии очень мало, или отображение неверно.

Чтобы этого не произошло:
1. Убедитесь, что точки хорошо распределены на обоих изображениях.
2. Убедитесь, что имеется не менее 10-30 соответствий (4 достаточно, если шум мал).
3. Убедитесь, что точки правильно подобраны, а трансформация - гомография.

Чтобы найти плохую гомологию, примените найденный H к вашим исходным точкам и посмотрите расстояние от ожидаемых точек, которое |x2-H*x1| < Tdist, где Tdist - ваш порог для ошибки расстояния. Если есть только несколько точек, которые удовлетворяют этому порогу, ваша гомография может быть плохим, и вы, вероятно, нарушили один из вышеупомянутых требований.

Ответ 3

Но это зависит от точечных соответствий, которые вы используете для вычисления гомографии... Просто подумайте, что вы пытаетесь найти трансформацию, которая отображает линии в строки (из одной плоскости в другую), поэтому никакая возможная конфигурация точечных соответствий не даст вам гомографии, которая создает красивые изображения. Возможно даже, что гомография отображает некоторые точки в бесконечность.