2

假设我有 3 个点云:第一个点云有 3 个点 {x1,y1,z1}、{x2,y2,z2}、{x3,y3,z3},第二个点云与 {xx1,yy1, zz1}, {xx2,yy2,zz2}, {xx3,yy3,zz3} ...我假设将第二个点云与第一个点云对齐,我必须将第二个点乘以 T[3x3matrix]。

1)那么我如何找到这个变换矩阵(T)?我试图用手做方程式,但未能解决它们。某处是否有解决方案,因为我很确定我不是第一个遇到问题的人。

2)我假设矩阵可能包括倾斜和剪切。有没有办法找到只有 7 个自由度(3translation、3rotation、1scale)的矩阵?

4

4 回答 4

4

将单位向量 {1, 0, 0}, {0, 1, 0} 和 {0, 0, 1} 取为 {x1, y1, z1}, {x2, y2, z2} 的变换矩阵 T1, {x3, y3, z3} 很简单

     | x1 x2 x3 |
T1 = | y1 y2 y3 |
     | z1 z2 z3 |

同样,将这 3 个单位向量带到第二组点的变换 T2 是

     | xx1 xx2 xx3 |
T2 = | yy1 yy1 yy3 |
     | zz1 zz2 zz3 |

因此,前三点到后三点的矩阵由 T2 * T1 -1给出。如果 T1 是非奇异的,那么这个变换是唯一确定的,所以它没有自由度。如果 T1 是奇异矩阵,则可能没有解,或者可能有无穷多个解。

当你说你想要 7 个自由度时,这有点误用了术语。在一般情况下,该矩阵由 3 个旋转自由度、3 个缩放度和 3 个剪切度组成,总共 9 个。您可以通过执行QR 分解来计算这些参数。Q 矩阵为您提供旋转参数,R 矩阵为您提供缩放参数(沿对角线)和剪切参数(对角线上方)。

于 2008-12-11T06:27:45.147 回答
1

Adam Rosenfield 的方法是正确的。但是 T2 * Inv (T1) 的解决方案是错误的。由于在矩阵乘法中 A * B != B * A :因此结果为 Inv(T1) * T2

于 2008-12-11T07:24:59.197 回答
1

您所说的七参数变换被称为 3d 保形变换,或者有时是 3d 相似变换,因为这两个云是相似的。如果两个形状相同,则 Adam Rosenfields 解决方案很好。如果差异很小,并且您希望获得最佳拟合,最常用的解决方案是Helmert 变换,它使用最小二乘法来最小化残差。乍一看,维基百科和谷歌的东西似乎并不好。我对此的参考是 Ghilani & Wolf 的调整计算,p345。这也是一本很好的关于矩阵数学的书,适用于空间问题,也是图书馆的一个很好的补充。

编辑:此变换的 Adam 的 9 参数版本称为仿射变换

于 2008-12-11T07:53:40.090 回答
0

这是计算 R 中 2D 仿射变换参数的最小二乘估计的示例。

于 2008-12-29T18:53:27.937 回答