如何解决SimpleITK.Euler3DTransform 和 scipy.spatial.transform.Rotation.from_euler 之间的区别?
使用这两个库函数:
从欧拉角创建一个简单的旋转矩阵:
import numpy as np
import SimpleITK as sitk
from scipy.spatial.transform import Rotation
from math import pi
euler_angles = [pi / 10,pi / 18,pi / 36]
sitk_matrix = sitk.Euler3DTransform((0,0),*euler_angles).GetMatrix()
sitk_matrix = np.array(sitk_matrix).reshape((3,3))
print(np.array_str(sitk_matrix,precision=3,suppress_small=True))
order = 'XYZ' # Different results for any order in ['XYZ','XZY','YZX','YXZ','ZXY','ZYX','xyz','xzy','yzx','yxz','zxy','zyx']
scipy_matrix = Rotation.from_euler(order,euler_angles).as_matrix()
print(np.array_str(scipy_matrix,suppress_small=True))
我得到两个不同的结果:
[[ 0.976 -0.083 0.2 ]
[ 0.139 0.947 -0.288]
[-0.165 0.309 0.937]]
[[ 0.981 -0.086 0.174]
[ 0.136 0.943 -0.304]
[-0.138 0.322 0.937]]
为什么?如何使用 scipy 计算与 SimpleITK 相同的矩阵?
解决方法
您的“订单”字符串是什么。当我使用 order='xyz' 运行您的代码时,SimpleITK 和 scipy 的旋转得到相同的结果。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。