Как я могу найти трехмерные координаты проецируемого прямоугольника? - PullRequest
3 голосов
/ 10 марта 2009

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

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

Вопрос в следующем:

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

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

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

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

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

Ответы [ 5 ]

1 голос
/ 20 марта 2009

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

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

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

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

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

1 голос
/ 10 марта 2009

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

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

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

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

Применимо ли это к 3D?

Алгоритм будет выглядеть следующим образом:

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

РЕДАКТИРОВАТЬ: Если бы вы знали расстояние до объекта, это стало бы тривиальным.

РЕДАКТИРОВАТЬ V2:

Хорошо, пусть Rn - четыре луча в мировом пространстве, то есть преобразованные через обратную матрицу, выраженную через 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 - длины сторон прямоугольника, а a, b, c и d - неизвестные.

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

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

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

1 голос
/ 10 марта 2009

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

0 голосов
/ 10 марта 2009

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

0 голосов
/ 10 марта 2009

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

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

...