使用scipy.spatial.transform更改旋转矩阵,

yxyvkwin  于 2022-11-29  发布在  其他
关注(0)|答案(1)|浏览(281)

我在语义分割后对3D图像执行PCA,以定义对象的方向并对齐它们。它工作正常,产生的特征向量形成一个有效的旋转矩阵,正确对齐对象。但我希望从矩阵中获得旋转Angular 。当我使用scipy.spatial.transform.Rotation.from_matrix并转换为r.as_euler("xyz")的Angular 时,它给我错误的Angular 。此外,从相同的旋转对象返回矩阵,得到一个错误旋转对象的不同矩阵。简而言之: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,并将矩阵转换为欧拉角,然后再转换回矩阵-矩阵变得不同了(尽管它也与scipycase不同)。UPD:transforms3d给出了一个“二次”矩阵,它进行了同样正确的旋转,所以我认为这只是原始矩阵的优化变体。
我检查了矩阵的正交性并计算了行列式--它们很好。此外,当我将初始旋转矩阵应用于数据时,它们的工作效果和预期的一样。
我希望scipy能给予正确的外部欧拉角,或者至少不改变旋转矩阵,我将其用作错误的指示器。

wribegjk

wribegjk1#

解决了!我的错,矩阵包含反射,所以它不是一个正确的旋转矩阵。https://github.com/scipy/scipy/issues/17324

相关问题