2009-03-10 6 views
3

У меня есть следующая проблема, которая в основном алгоритмическая.Как найти 3D-координаты проецируемого прямоугольника?

  • Пусть ABCD представляет собой прямоугольник с известными размерами d1, d2, лежащим где-то в пространстве.
  • Прямоугольник ABCD проецируется на плоскость P (образуя в общем случае трапецию KLMN). Я знаю проекционную матрицу H.
  • Я также могу найти 2D-координаты точек края трапеции K, L, M, N.

Вопрос заключается в следующем:

  • Учитывая Матрица проекции Н Координаты ребер на трапеции и осознанием того, что наш объект представляет собой прямоугольник с заданной геометрией (размеры d1, d2) , мы могли бы вычислить 3D-координаты точек A, B, C, D?

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

Одной проекционной матрицы недостаточно, поскольку луч проецируется в ту же точку. Тот факт, что объект имеет известные размеры, заставляет меня поверить, что проблема разрешима и существуют конечные решения.

Если я выясню, как эта реконструкция может быть выполнена, я знаю, как ее запрограммировать. Поэтому я прошу алгоритмический/математический ответ.

Любые идеи приветствуются Благодаря

ответ

1

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

+0

Обратное к матрице проецирования недостаточно, так как одна точка на плоскости изображения будет «непроектировать» на луч. Таким образом, путем обратного проецирования четырех точек K, L, M, N мы получаем только четыре строки, а не точное положение от прямоугольника в пространстве. – 2009-03-10 16:30:43

+0

@netclectic - Исходная карта проекции указывает на лучи? Нет - и ни один из них не будет обратным. Когда вы строите матрицу проекции, вы решаете «глубину», для которой нужно проектировать. – mbeckish

0

m_oLogin является правильным. Если я понимаю вашу цель, изображение, которое камера защелкивает, это плоскость P, правильно? Если это так, вы измеряете K, L, M, N с 2D-изображения. Вам нужна обратная матрица проекции для восстановления A, B, C и D.

Теперь я никогда не делал этого раньше, но мне кажется, что вы можете столкнуться с той же проблемой, что и GPS, только с 3 спутниковые исправления - есть два возможных решения: один «за» P и один «впереди», верно?

1

Я думаю, что эта проблема создаст множество возможных решений, по крайней мере, в 2D. Для 2D случая:

  | 
-----------+----------- 
      /|\ 
     /| \ 
     /| \ 
     /---+---\VP 
    / | \ 
    / |  \ 
    / |  \ 
/  |  \ 
/  | -- \ 
/  | | \ 
/  | |  \ 

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

Итак, в 2D пространстве существует множество решений в пределах четко определенного набора.

Это относится к 3D?

Алгоритм будет по линиям:

  1. Invert проекция матрица
  2. вычислить четыре луча, которые проходят через вершину прямоугольника, фактически создавая перекос пирамиды
  3. Try и подгонку ваш прямоугольник в пирамиду. Это сложный бит, и я пытаюсь мысленно визуализировать прямоугольники в пирамидах, чтобы увидеть, могут ли они поместиться более чем одним способом.

EDIT: Если бы вы знали расстояние до объекта, это стало бы тривиальным.

EDIT V2:

ОК, пусть Шп в мировом пространстве, т.е. преобразованного с помощью обратной матрицы четырех лучей, выраженные в терминах m.Rn, где | Rn | это один. Четыре точки прямоугольника в поэтому:

P1 = aR1 
P2 = bR2 
P3 = cR3 
P4 = dR4 

, где P1..P4 являются точки по окружности прямоугольника. Исходя из этого, используя немного векторной математики, можно получить четыре уравнения:

|aR1 - bR2| = d1 
|cR3 - dR4| = d1 
|aR1 - cR3| = d2 
|bR2 - dR4| = d2 

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

Теперь, не может быть никакого решения выше, в этом случае вы должны поменять d1 с d2. Вы можете расширить каждую строку:

(a.R1x - b.R2x) + (a.R1y - b.R2y) + (a.R1z - b.R2z) = d1

, где R1? и R2? являются компонентами x/y/z лучей 1 и 2. Заметим, что вы решаете для a и b выше, а не x, y, z.

+0

+1 Если у вас его нет, вы близки. –

0

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

+0

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

+0

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

+0

Матрица проецирования не инкапсулирует масштаб. – Jacob

1

Я собираюсь дать достаточно краткий ответ, но я думаю, вы получите мой общий дрейф. Я предполагаю, что у вас есть матрица проецирования 3x4 (P), поэтому вы можете получить центр камеры, найдя нулевой вектор P: назовите его C.

Как только у вас будет C, вы будете способный вычислять лучи с тем же направлением, что и векторы CK, CL, CM и CN (т.е. поперечное произведение C и K, L, M или N, например CxK)

Теперь вам нужно всего вычислить 3 балла (u1, u2, u3), которая удовлетворяет следующим ограничениям 6 (произвольно при условии, KL и КН являются смежными и || KL ||> = || || К.Н., если d1> = d2):

  1. u1 лежит на CK, т.е. u1.CK = 0
  2. и2 лежит на CL
  3. и3 лежит на CN
  4. || u1-u2 || = d1
  5. || u1-u3 || = D2
  6. (u1xu2). (U1xu3) = 0 (ортогональность)

, где, A.B = скалярное произведение векторов А и В || Л || = евклидова норма A AxB = поперечное произведение A и B

 Смежные вопросы

  • Нет связанных вопросов^_^