我有两个网格:网格 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]
这是对的吗?
答案 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
强>