Как работает проекция 2d в 3d, когда глубина берется из центральной точки? - PullRequest
0 голосов
/ 06 января 2020

Я смотрю от 2d (глубина / rgbd) до 3d проекции облака точек. Потратив последние несколько дней на чтение, я смутно разбираюсь в матрицах проекций и смотрю на функции, предоставляемые open3d. Я полагаю, что 2d> 3d-проекция может быть выполнена с использованием следующего кода:

z = d / depth_scale

x = (u - cx) * z / fx

y = (v - cy) * z / fy

Это работает, когда глубина рассчитывается по плоскости solid. В моем случае глубина рассчитывается из центральной точки (камеры-обскуры) и, как таковая, проекция выдвигается в сторону от центральной точки.

Например:

На изображении 1 длина A, B, C может составлять 11, 10, 11 м, в то время как на изображении 2 они все будут равны на 10, 10 и 10 м. (эти измерения не являются точными, просто чтобы доказать свою точку зрения.)

В результате, использование измерений на изображении 1 с приведенной выше формулой даст ощущение, что объект искривлен (от центра) , Как я могу изменить формулу, чтобы скорректировать это?

Если у кого-то есть примеры в Python, это было бы очень полезно.

enter image description here

Спасибо

1 Ответ

0 голосов
/ 03 февраля 2020

1) Проверьте, какое у вас определение «глубина». Казалось бы, ваша глубина измеряется как расстояние до главной плоскости, а не расстояние до центра камеры. Это объясняет, почему ваши реконструкции выглядят «изогнутыми»

2) Если вы читали о матрицах проекций, то хорошим способом решения этой проблемы является их использование. https://towardsdatascience.com/inverse-projection-transformation-c866ccedef1c

(Рекомендуемая книга: геометрия с несколькими видами, автор Хартли и Циссерман)

...