Есть ли алгоритм для определения 3d-позиции в таком случае? (изображения ниже) - PullRequest
5 голосов
/ 03 апреля 2010

Итак, во-первых, у меня есть такое изображение (и, конечно, у меня есть координаты всех точек в 2d, чтобы я мог восстановить линии и проверить, где они пересекаются)

альтернативный текст http://superior0.narod.ru/2d.jpg

Но, эй, у меня есть другое изображение с такими же линиями (я знаю, что они одинаковые) и новые координаты моих точек, как на этом изображении альтернативный текст http://superior0.narod.ru/3d.jpg

Итак ... теперь имея точки (координаты) на первом изображении, как я могу определить поворот плоскости и глубину Z на втором изображении (если предположить, что центр первого находился в точке (0,0,0) без вращения)?

Ответы [ 4 ]

5 голосов
/ 03 апреля 2010

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

Эта тема даст вам базовый обзор техник, которые вам нужно использовать.

2 голосов
/ 03 апреля 2010

Позвольте мне сказать это заранее: эта проблема сложная. Есть причина, по которой на связанный вопрос Дана Стори не был дан ответ. Позвольте дать объяснение людям, которые хотят нанести удар в этом. Надеюсь, я ошибаюсь из-за того, как это тяжело.

Я предполагаю, что координаты 2D-экрана и матрица проекции / перспективы вам известны. Вы должны знать, по крайней мере, так много (если вы не знаете матрицу проекции, по сути, вы используете другую камеру, чтобы смотреть на мир). Давайте назовем каждую пару 2D экранных координат (a_i, b_i), и я предполагаю, что матрица проекции имеет вид

P = [ px  0  0  0 ]
    [ 0   py 0  0 ]
    [ 0   0  pz pw]
    [ 0   0  s  0 ], s = +/-1

Почти любая разумная проекция имеет такую ​​форму. Работая через конвейер рендеринга, вы обнаружите, что

a_i = px x_i / (s z_i)
b_i = py y_i / (s z_i)

, где (x_i, y_i, z_i) - исходные трехмерные координаты точки.

Теперь давайте предположим, что вы знаете свою форму в наборе канонических координат (что хотите), так что вершины равны (x0_i, y0_i, z0_i). Мы можем расположить их как столбцы матрицы C. Фактические координаты формы представляют собой жесткое преобразование этих координат. Давайте аналогично организуем фактические координаты в виде столбцов матрицы V. Тогда они связаны

V = R C + v 1^T             (*)

, где 1^T - вектор строк с правильной длиной, R - матрица ортогонального вращения жесткого преобразования, а v - вектор смещения преобразования.

Теперь у вас есть выражение для каждого столбца сверху V: первый столбец - { s a_1 z_1 / px, s b_1 z_1 / py, z_1 } и т. Д.

Вы должны решить систему уравнений (*) для системы скаляров z_i, а жесткие преобразования определены R и v.

Сложности

  • Уравнение нелинейно по неизвестным, с коэффициентами R и z_i
  • До сих пор мы предполагали, что вы знаете, какие 2D-координаты соответствуют каким вершинам исходной фигуры (если ваша фигура квадратная, это немного меньше проблем).
  • Мы предполагаем, что вообще есть решение; если в 2D-данных есть ошибки, то трудно сказать, насколько хорошо будет выполнено уравнение (*); преобразование будет нежестким или нелинейным.
1 голос
/ 03 апреля 2010

Если вы действительно заинтересованы в такого рода проблемах (которые часто встречаются в компьютерном зрении, слежении за объектами с помощью камер и т. Д.), Следующая книга содержит подробное описание:

Ma, Soatto, Kosecka, Sastry, Приглашение к 3D Vision , Springer 2004.

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

1 голос
/ 03 апреля 2010

Это называется (цифровая) фотограмметрия. Начните гуглить.

...