math - 通过 3 点相关性对齐点云?

标签 math 3d geometry points vertices

假设我有 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 个自由度的矩阵(3 个平移,3 个旋转,1 个尺度)?

最佳答案

将单位向量 {1, 0, 0}、{0, 1, 0} 和 {0, 0, 1} 转换为 {x1, y1, z1}、{x2, y2, z2}, {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 factorization 来计算出这些参数。 。 Q 矩阵提供旋转参数,R 矩阵提供缩放参数(沿对角线)和剪切参数(对角线上方)。

关于math - 通过 3 点相关性对齐点云?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/358557/

相关文章:

python - DSA 验证计算

c++ - T(n)嵌套循环

python - matplotlib 没有正确显示 3D 平面的交点

java - 搜索当前颜色的和谐颜色

android - 为什么 Matrix.MutiplyMV 顺时针旋转向量?

c++ - 是否可以在网络浏览器上运行与 SDL+OpenGL 代码绑定(bind)的 C++?

CSS 3D 变换容器来反转子项的 3D 变换

菜单项的 JavaScript 旋转在单击后卡住

python - 在 Matplotlib 3D 散点图中显示线的长度

arrays - 如何检查直线多边形是否相交