如何从包含两个对齐网格的MeshLab项目文件中推断变换矩阵?

时间:2015-03-17 11:42:29

标签: matrix alignment mesh meshlab

我有两个网格:网格 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 [矩阵] = [矩阵上的B]

这是对的吗?

1 个答案:

答案 0 :(得分: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