【发布时间】:2022-11-10 18:27:46
【问题描述】:
我在语义分割后对 3D 图像执行 PCA 以定义对象的方向并对齐它们。
它工作正常,产生的特征向量形成一个有效的旋转矩阵,可以正确对齐对象
但我想从矩阵中获得旋转角度。
当我使用scipy.spatial.transform.Rotation.from_matrix 并使用r.as_euler("xyz") 转换为角度时,它给了我错误的角度。
此外,从同一个旋转对象返回矩阵会给我一个不同的矩阵,它会错误地旋转对象
简而言之:
r = R.from_matrix(rotation_matrix) r.as_matrix()
给我一个不等于初始矩阵的矩阵,它不是正确旋转的某种变体。这是错误的旋转。
例如,矩阵。
[[ 0.86345719 -0.48700394 0.13141101]
[ 0.02362667 -0.221185 -0.97494563]
[-0.5038685 -0.84492861 0.1794775 ]]
改变成改变的矩阵
[[ 0.82327846 -0.4171921 -0.3849199 ]
[-0.46561791 -0.88418854 -0.03755775]
[-0.32467296 0.21014609 -0.9221855 ]]
初始旋转矩阵看起来没问题,是正交的,行列式是1。 而且它不是奇异的,不存在万向节锁。
顺便说一下,第二个矩阵由下式给出scipy是“稳定的”;进一步检索后保持不变。
问题是永久性的;从 PCA 产生的每个旋转矩阵都被 scipy 错误处理 我想念什么?
我尝试了其他 python 工具,例如transforms3d,并将矩阵转换为欧拉角并返回矩阵 - 矩阵变得不同(尽管它也不同于scipy案子)。
UPD:transforms3d 给出了一个“辅助”矩阵,可以进行相同的正确旋转,所以我认为这只是原始矩阵的优化变体。
我检查了矩阵的正交性并计算了行列式——它们很好。 此外,当我将初始旋转矩阵应用于数据时,它们会按预期工作。
我希望scipy会给我正确的外在欧拉角,或者至少不改变旋转矩阵,我用它作为不当行为的指标。
【问题讨论】:
标签: python matrix scipy 3d rotation