Вопрос

Я работаю над приложением, которое обнаруживает наиболее заметный прямоугольник на изображении, а затем пытается повернуть его так, чтобы нижний левый угол прямоугольника находился в начале координат, аналогично тому, как IUPR ОСКАР система работает.Однако, как только наиболее заметный прямоугольник обнаружен, я не уверен, как учитывать компонент глубины или ось Z, поскольку прямоугольник не всегда будет «в лоб».Буду очень признателен за любые примеры, которые помогут мне лучше понять.Ниже приведен пример системы OSCAR IUPR.

альтернативный текст http://quito.informatik.uni-kl.de/oscar/oscar.php?serverimage=img_0324.jpg&montage=use

Это было полезно?

Решение

В этом случае вам на самом деле не нужно иметь дело с 3D-информацией, это просто функция отображения одного набора координат в другой.

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

Чуть не забыл: если «быстро» действительно важно, вы могли бы упростить систему, используя только простые сдвиговые преобразования в комбинации, хотя это плохо повлияет на качество изображения для сильно наклоненных объектов.

Другие советы

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

  1. Получив 2D-координаты перекошенного изображения, используйте эти координаты как координаты текстуры.

  2. В средстве рендеринга нарисуйте простой прямоугольник, вершины каждого угла которого сопоставлены текстурой с вершинами, найденными на перекошенном 2D-изображении (нормализованном и иным образом преобразованном в плоскость координат текстуры вашей системы рендеринга).

Теперь вы можете полагаться на аппаратное обеспечение (с использованием OpenGL или аналогичного), которое сделает коррекцию за вас, или вы можете написать свой собственный преобразователь текстур:

Соотношение сторон нужно будет угадать, поскольку мы избавляемся от фактической 3D-информации.Однако вы можете просто взять максимальную ширину и максимальную высоту перекошенного прямоугольника.

Перспективное наложение текстур Криса Хекера

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top