К сожалению, у вас недостаточно информации для решения проблемы. Давайте посмотрим, смогу ли я сделать рисунок здесь, чтобы показать вам, почему:
/
cam1 < (1) (2) (3)
\
\ /
v
cam2
Надеюсь, это понятно. Допустим, вы делаете три снимка из cam1
, с некоторым объектом, расположенным в (1)
, (2)
и (3)
. Во всех трех случаях объект расположен точно в центре изображения.
Теперь вы перемещаете камеру в положение cam2
, что включает поворот на 90 градусов против часовой стрелки по оси Y и некоторый перевод по X и Z.
Для простоты, скажем, ваш Px,Py
является центром изображения. Три изображения, которые вы сделали с помощью cam1
, имеют один и тот же объект в этом пикселе, поэтому, какие бы уравнения и расчеты вы ни использовали для определения местоположения этого пикселя в cam2
изображениях, они будут иметь одинаковый вход для трех изображений, поэтому они также будут производить тот же результат. Но ясно, что это будет неправильно, поскольку из местоположения cam2
каждое из трех снимков, которые вы делаете, будет видеть объект в совершенно ином положении, двигаясь горизонтально по кадру.
Вы видите, чего не хватает?
Если вы хотите сделать это правильно, вам понадобится ваше устройство cam1
, чтобы также захватить карту глубины , чтобы для каждого пикселя вы также знали, как далеко от камеры находится объект, представленный это было. Это то, что будет отличать три изображения, где объект перемещается дальше от камеры.
Если у вас была глубина для Px,Py
, тогда вы можете выполнить обратную проекцию перспективы из cam1
и получить трехмерное местоположение этого пикселя относительно cam1
. Затем вы примените обратное вращение и перемещение, чтобы преобразовать точку в трехмерное пространство относительно cam2
, а затем выполните перспективную проекцию из cam2
, чтобы найти то, что будет новым местоположением в пикселях.
Извините за плохие новости, надеюсь, это поможет!