После проецирования 3D точек в 2D, как вернуться в 3D? - PullRequest
0 голосов
/ 06 июня 2019

Простой вопрос: я использовал матрицу перевода и вращения и матрицу встроенных функций камеры, чтобы получить матрицу 3x4, используемую для преобразования 3d-точек в 2d-точки (обозначенную как Tform)

Я преобразовал точку [10, -5, 1] с матрицей, добавляя единицу в конец, и новая точка обозначается как новая точка.

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

Я ищу решение для подключения к матрице XXX в моем коде ниже

import numpy as np

Tform=np.array([[4000,0,-1600,-8000],[500,5000,868,-8000],[.5,0,.8,-8]])
old=np.array([10,-5,1,1])
newpoint=np.dot(Tform,old)
print(newpoint)

old_est=np.dot(XXX,np.append(newpoint,1))
print(old_est)

1 Ответ

0 голосов
/ 06 июня 2019

Добавьте 4-ю строку к Tform со значениями 0 0 0 1, то есть последней строкой единичной матрицы:

>>> m = np.vstack(Tform, np.array([0,0,0,1]))
>>> m
array([[ 4.00e+03,  0.00e+00, -1.60e+03, -8.00e+03],
       [ 5.00e+02,  5.00e+03,  8.68e+02, -8.00e+03],
       [ 5.00e-01,  0.00e+00,  8.00e-01, -8.00e+00],
       [ 0.00e+00,  0.00e+00,  0.00e+00,  1.00e+00]])

Обратите внимание, что вы не можете использовать append, потому что это такжевыравнивает входные массивы.

Обратите внимание, что при умножении на old четвертый компонент результата равен 1, т. е. результат равен np.append(newpoint, 1):

>>> np.dot(m, old)
array([ 3.0400e+04, -2.7132e+04, -2.2000e+00,  1.0000e+00])
                                               ----------

Следовательно, XXX является обратным этой новой матрицы:

>>> XXX = np.linalg.inv(m)
>>> np.dot(XXX, np.append(newpoint, 1))
array([10., -5.,  1.,  1.])
       -------------

И мы получаем компоненты old обратно.

В качестве альтернативы вы можете вычесть 4-й столбец Tform из newpoint и умножить результат на инверсию левой подматрицы 3x3 Tform, но это немного неудобно, поэтому мы можем также позволить numpy сделатьбольше работы :) 1030 *

...