0

我有 2 组带有 N 个条目的 3D 矢量。我正在尝试计算最能将第一组与第二组对齐的旋转矩阵。

我相信我可以使用 Java 库 JAMA 通过奇异值分解或特征值分解来完成此任务。

1) SVD 或 EVD 是正确的算法吗?

2) JAMA 中的 SVD/EVD 需要一个矩阵。如何根据我的两组向量填充矩阵?

4

1 回答 1

0

这是我相信您所描述的内容的 2-D 版本(将其转换为 3-D 应该很简单,除了 m 矩阵将是 3x3 并且有 shftx/y/z条目)。

点 (x, y) 到点 (u, v) 的仿射变换可以写为:

u    m11 m12    x      shftx
  =          *      +   
v    m21 m22    y      shfty

You can rewrite this as:

x y 0 0 1 0     m11      u
             *       =  
0 0 x y 0 1     m12      v

                m21

                m22

                shftx

                shfty

这样做的原因是您使左侧的矩阵(具有 x/y/0/1 值)具有与数据集中的点一样多的行。如果你称这个矩阵 X 和右边的列向量为 U,那么问题就变成了找到方程 X * m = U 的最小二乘解 m。你可以通过 (new QRDecomposition(X)).solve(U). 我应该说在至少有一个版本的 QRDecomposition 代码中有一个错误,它假设解决方案矩阵的维度错误,但我通过更改 solve() 方法中的一行来修复它。

于 2013-12-01T18:36:42.720 回答