Умножение матрицы Python Numpy для преобразования координат дает неправильный результатPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Умножение матрицы Python Numpy для преобразования координат дает неправильный результат

Сообщение Anonymous »

Вот мой код: я выполняю преобразование координат в наборе 3D -точек. T < /code> - моя
4 × 4 матрица преобразования, которая всегда удовлетворяет форме

Код: Выделить всё

[[R , t], [ 0, 1]]
(я уверен в этом). Точки - это набор точек, которые мне нужно преобразовать, с формой (M, 3)
, где 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Умножение матрицы Python Numpy для преобразования координат дает неправильный результат
    Anonymous » » в форуме Python
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Умножение матрицы Python Numpy для преобразования координат дает неправильный результат
    Anonymous » » в форуме Python
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Умножение матрицы Python – размер матрицы результата
    Anonymous » » в форуме Python
    0 Ответы
    109 Просмотры
    Последнее сообщение Anonymous
  • Лучший способ вычислить умножение логической матрицы в numpy
    Anonymous » » в форуме Python
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Действителен ли этот тест? torch vs numpy vs tinygrad умножение матрицы 10000 на 10000 (ЦП)
    Anonymous » » в форуме Python
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»