给定 2 个
4x4
矩阵代表 2 个相机姿势,我可以通过 获得相对相机变换
M = torch.inverse(p1).mm(p2)
如何进一步计算从一个相机到另一个相机的相对旋转和平移(phi、theta 和半径)?
假设这两个相机姿势都在同一参考系中,那么在您的情况下 MM 将是两个相机之间的变换矩阵。平移将是带有 XYZ 的变换矩阵的第一列。 4x4 矩阵中的其他值是旋转矩阵,它描述两个相机姿势之间的旋转。我有更多使用 NumPy 的经验,但以下是如何提取平移向量和旋转矩阵。
import numpy as np
# Compute the relative transformation matrix
M = np.linalg.inv(p1) @ p2
translation_vector = M[:3, 3]
rotation_matrix = M[:3, :3]
通常我将其保留为 3x3 旋转矩阵或将其转换为欧拉角(弧度),看起来像 [theta_x, theta_y, theta_z]。可以通过以下方式完成:
from scipy.spatial.transform import Rotation as R
euler_angles = R.from_matrix(rotation_matrix).as_euler('xyz', degrees=False)
我不太确定将翻译转换为(phi、theta 和 radius),因为我通常保持原样。我确实找到了这篇文章,您可以在其中了解如何找到这些内容。 更快的 numpy 笛卡尔到球坐标转换?