1

我有两个网格:网格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]

这个对吗?

4

1 回答 1

2

顺序很重要。矩阵 Mb 将网格 B 带到位置 p,矩阵 Ma 将网格 A 带到位置 p。同样,Ma_invert 将网格从位置 p 带到网格 A 的位置。

将 Mb 应用于网格 B,现在它达到 p:

B_transformed = Mb * B

B_transformed位置p网格 A的位置:

B_aligned = Ma_inverse * B_transformed

所以组合操作应该如下所示:

B_aligned = Ma_inverse * Mb * B

于 2016-02-23T19:37:50.393 回答