Как преобразовать проецируемый 3D-прямоугольник в 2D-ориентированный прямоугольник по оси - PullRequest
2 голосов
/ 30 ноября 2010

У меня есть изображение трехмерного прямоугольника (который из-за искажения проекции не является прямоугольником на изображении).Я знаю все координаты мира и изображения всех углов этого прямоугольника.

Мне нужно определить мировую координату точки на изображении внутри этого прямоугольника.Для этого мне нужно вычислить преобразование, чтобы отменить проецирование этого прямоугольника в 2D-прямоугольник.

Как мне вычислить это преобразование?

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 30 ноября 2010

Если я вас правильно понимаю, у вас есть точка 2D в проекции прямоугольника, и вы знаете координаты 3D (мир) и 2D (изображение) всех четырех углов прямоугольника. Цель состоит в том, чтобы найти трехмерные координаты уникальной точки внутри прямоугольника (3D, мир), который выступает в данную точку.

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

  1. Определите (любой) один угол прямоугольника как его «источник» и назовите его «A», который мы будем рассматривать как вектор.
  2. Пометить остальные вершины B, C, D по порядку, так чтобы C была по диагонали напротив A.
  3. Рассчитать векторы v = AB и w = AD. Они формируют хорошие локальные координаты для точек в прямоугольнике. Точки в прямоугольнике будут иметь вид A + rv + sw, где r, s - действительные числа в диапазоне [0,1]. Этот факт верен в мировых координатах и в координатах изображения. В мировых координатах v и w ортогональны, а в координатах изображения - нет. Это нормально.
  4. Работая в координатах изображения, из точки (x, y) на изображении вашего прямоугольника вычислите значения r и s. Это можно сделать с помощью линейной алгебры на векторных уравнениях (x, y) = A + rv + sw, где только r и s неизвестны. Это будет сводиться к матричному уравнению 2x2, которое вы можете решить, как правило, в коде, используя правило Крамера. (Этот шаг будет нарушен, если определитель требуемой матрицы равен нулю. Это соответствует случаю, когда прямоугольник виден ребром. Решение в этом случае не уникально. Если это возможно, сделайте специальное исключение.)
  5. Используя значения r и s из 4, вычислите A + rv + sw, используя векторы A, v, w для world координат. Это точка мира на прямоугольнике.
1 голос
/ 30 ноября 2010

Это особый случай поиска отображений между четырехугольниками, которые сохраняют прямые линии.Они обычно называются гомографическими преобразованиями.Здесь один из четырехугольников представляет собой прямоугольник, так что это популярный особый случай.Вы можете погуглить эти термины ("quad to quad" и т. Д.), Чтобы найти объяснения и код, но вот несколько сайтов для вас.

Оценка преобразования перспективы

обсуждение игрового форума

извлечение четырехугольного изображения в прямоугольник

Проективное деформирование и отображение

ProjectiveMappings для ImageWarping от Paul Heckbert.

Математика не особенно приятна, но и не так сложна.Вы также можете найти код по одной из приведенных выше ссылок.

...