【问题标题】:Rotation matrix is changed with scipy.spatial.transform.Rotation旋转矩阵用 scipy.spatial.transform.Rotation 改变
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 2019-02-08
      • 2015-08-29
      • 1970-01-01
      • 2011-05-01
      相关资源
      最近更新 更多