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>
Может ли кто -нибудь помочь мне понять причину этого? Любое руководство будет очень ценится!
Подробнее здесь: https://stackoverflow.com/questions/795 ... -a-wrong-r