Обнаружение homographies мусора из findHomography в OpenCV?

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

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

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

3 ответов


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

  1. вычислите определитель гомографии и посмотрите, слишком ли он близок к нулю для комфорта.
  2. еще лучше, вычислить его SVD и проверить, что отношение первого к последнему сингулярному значение вменяемое (не слишком высокое). Любой результат скажет вам, близка ли матрица к единственное число.
  3. вычислить изображения углов изображения и его центра (т. е. точек вы получаете, когда вы применяете гомографию к этим углам и центру) и проверяете, что они имеют смысл, т. е. находятся ли они внутри холста изображения (если вы ожидаете, что они будут)? Они хорошо отделяются друг от друга?
  4. график в matlab / octave выходные (данные) точки, которые вы установили гомографию, вдоль с их вычисленными значениями из входных, используя гомографию, и убедитесь, что они близки (т. е. ошибка низкая).

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


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

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

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


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