我有2组3D矢量,有N个条目。我正在尝试计算旋转矩阵,它最好地将第一个集合与第二个集合对齐。
我相信我可以使用java库JAMA通过奇异值分解或EigenValue分解来实现这一点。
1) SVD或EVD是正确的算法吗?
2) JAMA中的SVD/EVD需要一个矩阵。如何根据我的两组向量填充矩阵?
发布于 2013-12-02 02:36:43
这是我相信你正在描述的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()方法中的一行来修复它。
https://stackoverflow.com/questions/17198470
复制相似问题