проективная геометрия: как превратить проекцию прямоугольника в 3D в 2D-вид

Итак, проблема в том, что у меня есть 3D-проекция прямоугольника, которую я хочу превратить в 2D. То есть у меня есть фотография листа бумаги, лежащего на столе, который я хочу преобразовать в 2D-вид этого листа. Итак, что мне нужно, так это получить неискаженное 2D-изображение, вернув все преобразования 3D/проекции и получив простой вид листа сверху. Мне удалось найти несколько указаний по этому вопросу, но они не предлагают немедленной инструкции о том, как этого можно достичь. Было бы очень полезно получить пошаговую инструкцию того, что нужно сделать. Или, как вариант, ссылка на ресурс, который разбивает его на мелкие детали.


person Trident D'Gao    schedule 10.11.2012    source источник
comment
Не уверен, правильно ли я вас понял, но, возможно, вы ищете ProjMatrix songho.ca/opengl/gl_projectionmatrix .html   -  person JAre    schedule 11.11.2012


Ответы (3)


Для этого вам нужно больше информации. Например, размер листа бумаги. Допустим, он у вас есть.

То, о чем вам нужно узнать, называется «омография». Это в основном следующая ситуация:

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

Существует преобразование из 2D-пространства одного изображения в 2D-пространство другого изображения (гомография), и ваша цель — найти его. Как только вы найдете его, вы просто примените его к своему изображению, чтобы получить вид сверху.

Для того, чтобы найти матрицу гомографии, вам нужно (как минимум) 4 точки, координаты которых вы знаете на ОБОИХ изображениях.

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

Информации о матрице гомографии из 4 точек в сети предостаточно. Это только одно из первых, с которыми я столкнулся, так что должны быть лучшие источники там :)

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

person Petar Ivanov    schedule 12.11.2012

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

См. раздел 4 от Microsoft Research "Whiteboard It!" paper, чтобы узнать, как это сделать.

person joshuahhh    schedule 03.04.2016

Если вы сделаете правильное 3D -> 2D преобразование вершин, все должно работать нормально. Отправной точкой является исследование модели Да Винчи для трехмерной точечной --> двумерной точечной проективной геометрии.

person pbierre    schedule 16.04.2016