Функция декомпозицияProjectionMatrix () выводит данные rotMatrix, а также rotMatrX, rotMatrY и rotMatrz (а также другие величины).
Насколько я понимаю, что rotMatrix = rotMatrX * rotMatrY * rotMatrZ (где * является оператором умножения матриц). Однако результаты не соответствуют действительности.
Вот пример разложения.
# Decompose rotation vector using Rodridgues decomposition.
self.rotation_matrix, _ = cv2.Rodrigues(self.rotation_vector)
print("Rotation matrix returned from Rodrigues:\n", self.rotation_matrix)
# Combine the rotation matrix and translation vector to create pose matrix.
self.pose_matrix = cv2.hconcat((self.rotation_matrix, self.translation_vector))
# Decompose pose matrix in various properties.
properties = cv2.decomposeProjectionMatrix(self.pose_matrix)
self.projection_matrix = properties[0]
self.rot_matrix = properties[1]
self.trans_vect = properties[2]
self.rot_matrix_x = properties[3]
self.rot_matrix_y = properties[4]
self.rot_matrix_z = properties[5]
self.euler_angles = properties[6]
print("xyz\n",np.matmul(self.rot_matrix_x, np.matmul(self.rot_matrix_y, self.rot_matrix_z)))
print()
print("zyx\n",np.matmul(self.rot_matrix_z, np.matmul(self.rot_matrix_y, self.rot_matrix_x)))
print()
print("yxz\n",np.matmul(self.rot_matrix_y, np.matmul(self.rot_matrix_x, self.rot_matrix_z)))
print()
print(self.rot_matrix)
Вот пример фактического вывода:
Rotation matrix returned from Rodrigues:
[[-0.00353424 0.99998718 0.00362615]
[-0.145003 -0.00410033 0.98942272]
[ 0.9894249 0.00297105 0.14501563]]
xyz
[[-0.00353424 -0.145003 0.9894249 ]
[ 0.99998718 -0.00410033 0.00297105]
[ 0.00362615 0.98942272 0.14501563]]
zyx
[[-0.00353424 -0.99899952 -0.04458098]
[ 0.145003 -0.04462205 0.98842451]
[-0.9894249 -0.00297105 0.14501563]]
yxz
[[-0.0237951 -0.14450917 0.98921731]
[ 0.99949335 -0.02436119 0.02048349]
[ 0.02113845 0.98920353 0.14501563]]
[[-0.00353424 0.99998718 0.00362615]
[-0.145003 -0.00410033 0.98942272]
[ 0.9894249 0.00297105 0.14501563]]
Мы видим, что xyz или zyx не возвращают нам матрицу вращения! Zyx почти дает нам правильный результат, но есть отрицательный знак ошибки! В чем проблема!?!? Спасибо!