【问题标题】:How to decompose affine matrix?如何分解仿射矩阵?
【发布时间】:2018-08-16 12:03:34
【问题描述】:

我在两个 3D 系统中有一系列点。有了它们,我使用 np.linalg.lstsq 来计算两者之间的仿射变换矩阵(4x4)。但是,由于我的项目,我必须“禁用”转换中的剪切。有没有办法将矩阵分解为基本变换?我已经找到了如何进行平移和缩放,但我不知道如何分离旋转和剪切。 如果没有,有没有办法从不包括剪切的点计算转换矩阵? 顺便说一句,我只能使用 numpy 或 tensorflow 来解决这个问题。

【问题讨论】:

  • 这看起来更像是一个连续统力学问题,而不是编程问题。
  • 你必须为此使用 numpy 或 tensorflow 吗?有时自己做数学会更容易,从长远来看,最终可能会更好地为你服务。 math.stackexchange.com/questions/612006/…

标签: python-3.x numpy transformation affinetransform matrix-decomposition


【解决方案1】:

我不确定我明白你在问什么。

无论如何,如果你有两组 3D 点 P 和 Q,你可以使用 Kabsch 算法找出一个旋转矩阵 R 和一个平移向量 T,使得 (RP+T) 和 Q 之间的平方距离之和最小化. 您当然可以将 R 和 T 组合成一个 4x4 矩阵(仅旋转和平移。没有剪切或缩放)。

【讨论】:

  • 感谢您的回复。我需要的是能够仅使用平移、旋转和缩放来找到从 P 到 Q 的最接近的转换,即没有剪切。我需要从点计算相似度变换矩阵
  • 你可以看这里:stackoverflow.com/questions/13432805/… 他们解释了如何扩展 Kabsch 算法以包括缩放。无论如何,最终的变换矩阵中没有剪切。
  • 感谢大卫!我在这里找到了该论文的 python 翻译:gist.github.com/CarloNicolini/7118015
  • 太棒了!很高兴它对您有所帮助!
猜你喜欢
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 2015-10-17
  • 1970-01-01
  • 2020-08-11
  • 1970-01-01
  • 1970-01-01
  • 2020-07-06
相关资源
最近更新 更多