我有两个网格:网格A和网格B。
我正在使用 MeshLab,我需要的只是对齐它们,然后推断出一个将 B 带到 A 上的变换矩阵。
当我使用对齐工具时,我粘合A 并将其设置为基础网格。然后我在 B 上执行点基粘合,并且可以选择使用处理按钮。在程序结束时,我保存了 MeshLab 项目。
为了推断将 B 带入 A 的转换矩阵,我只需打开 .mlp 项目文件(实际上是纯文本文件)并读取数据。不幸的是,我得到的不是我所期望的。有两个网格,当然,A 和 B。每个网格都有一个变换矩阵。我希望网格 A(粘合并设置为基础网格)具有单位矩阵,而网格 B 具有将 B 带到 A 上所需的变换矩阵。有时,网格 A 的矩阵接近单位,但仍然不是身份一。
这是一个例子:
<!DOCTYPE MeshLabDocument>
<MeshLabProject>
<MeshGroup>
<MLMesh label="A" filename="A.stl">
<MLMatrix44>
1 3.61241e-09 1.85292e-11 -5.04461e-08
-3.61241e-09 1 3.45518e-10 1.03514e-07
-1.85292e-11 -3.45518e-10 1 5.35603e-09
0 0 0 1
</MLMatrix44>
</MLMesh>
<MLMesh label="B" filename="B.stl">
<MLMatrix44>
-0.670956 -0.741136 -0.0231387 78.366
0.738444 -0.665039 -0.111463 24.2717
0.0672212 -0.0918734 0.993499 33.6056
0 0 0 1
</MLMatrix44>
</MLMesh>
</MeshGroup>
<RasterGroup/>
</MeshLabProject>
现在,我的简单假设是,由于某种原因,MeshLab 无法正确地将 B 带到 A 上。相反,它使 B 非常靠近 A,但它也需要最小限度地调整 A 的位置以获得最佳匹配。
如果是这样,为了获得最佳的 B 到 A 转换,我想执行以下操作:
[B 矩阵] * INVERTED[A 矩阵] = [A 矩阵上的 B]
这个对吗?