我有一个需要坐标系( x , y , z )的矩阵(称为T
)旋转为新的坐标系( a , b , c )。根据{{3}}的来源,旋转矩阵R
可以在笛卡尔空间中定义如下:
R = [[ax, bx, cx],
[ay, by, cy],
[az, bz, cz]]
我想在python的原始矩阵T
上实现旋转,这给了我新的图像。 T
的索引( z , y , x )以及numpy中的所有矩阵。到目前为止,我的策略是执行以下操作:
from scipy.ndimage import rotate as sp_rotate
# Get the rotation angles in each axis
theta_y = math.asin(R[0, 2])
theta_z = math.acos(R[0, 0] / math.cos(theta_y))
theta_x = math.acos(R[2, 2] / math.cos(theta_y))
# Convert them to degrees
theta_y = math.degrees(theta_y)
theta_z = math.degrees(theta_z)
theta_x = math.degrees(theta_x)
# Rotate along each axis
T = sp_rotate(T, -theta_x, axes=(0, 1), reshape=False, mode='reflect')
T = sp_rotate(T, -theta_y, axes=(0, 2), reshape=False, mode='reflect')
T = sp_rotate(T, -theta_z, axes=(1, 2), reshape=False, mode='reflect')
是否有一种方法可以根据旋转矩阵R
在python中定义旋转,而无需沿每个轴分别进行三个单独的旋转?