4 × 4 матрица преобразования, которая всегда удовлетворяет форме
Код: Выделить всё
[[R , t], [ 0, 1]]
, где m обычно очень большой (1k ~ 2K).
Моя проблема заключается в следующем: когда я выполняю преобразование координат с использованием метода 1 (однородные координаты), результат является неверным. В частности, последнее число некоторых преобразованных точек (points_local_homogenous) не равно 1, это неверно. Однако, когда я использую Метод 2 , все результаты верны.
# Method 1: wrong result.
ones = np.ones((points.shape[0], 1))
points_homogeneous = np.hstack((points, ones))
points_local_homogeneous = (T @ points_homogeneous.T).T
points_local = points_local_homogeneous[:, :3]
# Method 2: Good results.
points_local= (T[:3, :3] @ points.T).T + T[:3, 3]
< /code>
Существует также странное явление, которое отражает проблему: когда я сначала выполняю умножение матрицы, а затем извлекаю точку, результат неверен. Но когда я сначала извлекаю точку, а затем выполняю умножение матрицы, результат верен. < /P>
>> (T @ points_homogeneous.T).T[547]
array([-15.44923687, -0.03295934, -0.07585889, -15.45439878])
>> T @ points_homogeneous[547]
array([6.58938647, 3.43626129, 2.84996901, 1. ])
< /code>
Может ли кто -нибудь помочь мне понять причину этого? Любое руководство было бы очень оценено!import numpy as np
T =np.array([[-9.99997984e-01, 2.00338436e-03, 1.36517526e-04,2.30385575e+01],
[-2.00432316e-03, -9.99971609e-01, -7.26382636e-03,3.48879370e+00],
[ 1.21961414e-04, -7.26408534e-03, 9.99973609e-01,-5.29494007e-02],
[ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,1.00000000e+00]])
points = np.random.random((1000,3))
print(points)
ones = np.ones((points.shape[0], 1))
points_homogeneous = np.hstack((points, ones))
points_local_homogeneous = (T @ points_homogeneous.T).T
print(points_local_homogeneous)
points_local = points_local_homogeneous[:, :3]
print(points_local)
points_local= (T[:3, :3] @ points.T).T + T[:3, 3]
print(points_local)
< /code>
output: < /p>
points:
[[0.70431115 0.18240672 0.33961428]
[0.03708955 0.67343087 0.82448419]
[0.56714298 0.73581627 0.6482321 ]
...
[0.57882963 0.04147515 0.05351834]
[0.67357367 0.02644866 0.19563735]
[0.86036017 0.27597764 0.63466743]]
points_local_homogeneous:
[[ 2.23346596e+01 3.30251359e+00 2.85416795e-01 1.00000000e+00]
[ 2.30029297e+01 2.80931870e+00 7.66625690e-01 1.00000000e+00]
[ 2.24729783e+01 2.74715294e+00 5.89989729e-01 1.00000000e+00]
...
[ 4.21157332e-01 -1.46142995e-03 9.03349144e-01 5.65885052e-01]
[ 3.26428767e-01 -1.54217777e-03 5.56317837e-01 4.18719365e-01]
[ 1.39730259e-01 -3.72909348e-03 6.30229075e+00 1.10249332e+00]]
points_local(Method 1):
[[ 2.23346596e+01 3.30251359e+00 2.85416795e-01]
[ 2.30029297e+01 2.80931870e+00 7.66625690e-01]
[ 2.24729783e+01 2.74715294e+00 5.89989729e-01]
...
[ 4.21157332e-01 -1.46142995e-03 9.03349144e-01]
[ 3.26428767e-01 -1.54217777e-03 5.56317837e-01]
[ 1.39730259e-01 -3.72909348e-03 6.30229075e+00]]
points_local(Method 2):
[[2.23346596e+01 3.30251359e+00 2.85416795e-01]
[2.30029297e+01 2.80931870e+00 7.66625690e-01]
[2.24729783e+01 2.74715294e+00 5.89989729e-01]
...
[2.24598194e+01 3.44577082e+00 3.36839801e-04]
[2.23650649e+01 3.45957466e+00 1.42572815e-01]
[2.21788386e+01 3.20648934e+00 5.79801482e-01]]
< /code>
Последний столбец точек Локальный гомогенный должен быть 1,0000, но это не так, а результат метода 1 и метода 2 отличается. Я не знаю почему?
Подробнее здесь: https://stackoverflow.com/questions/795 ... -a-wrong-r