如何对齐两个网格

时间:2012-01-30 14:13:08

标签: c computational-geometry mesh

我有一个非常好的&棘手的问题。 我需要使用非常快的算法对齐两个网格。给定mesh1和mesh2我想找到我需要如何traslate并将mesh1旋转到mesh2的相同位置。 首先,我使用两个网格的惯性矩做到了这一点,但如果第二个网格与第一个网格相似但有一些缺失部分,则该算法不起作用。换句话说,取两个相同的网格,并从其中一个切掉相同的部分。

我想用C语言编写代码,因为我需要在多平台机器(linux / win)上执行该操作,并以非常快的方式执行此操作:必须将其放入GA算法中。

这两个网格采用STL(立体绘图)格式(二进制或ascii),但使用其他类型的文件格式可能很有用。

你知道怎么做这些东西吗?

问题更新:

首先,我非常感谢你们所有的建议。我在我的机器上下载了一个安装PCL并成功编译了ICP(教程)算法,取自PCL网站。 但现在我对此有一些疑问,也许是因为对我来说是一件全新的事情。健身的4x4矩阵输出是什么意思?我应该期待一个旋转矩阵和一个traslational矢量..

我希望你们中的一些人可以帮助我。 如果您需要任何其他信息,请询问。

2 个答案:

答案 0 :(得分:4)

Point Cloud Library有几种您可能会觉得有用的资源。正如@ Throwback1986所说,ICP是一种用于对齐几何的优秀算法。 Pcl还具有其他通常更快的对齐算法,基于在两个几何体中识别和匹配感兴趣的特征。图书馆在机器人社区中发现了很多用途,他们和你一样,非常注重表现。

Pcl是用c ++编写的。虽然不像直C那样便携,但它们提供了windows,几种* nix风格和mac os的安装说明。我已经看到它在ios和android上运行了。查看tutorials

答案 1 :(得分:3)

迭代最近点(ICP)是使用刚性变换注册(对齐)3D点云的一种方法。 (它也可以应用于网格。)

这是一个很好的介绍:http://www.cs.duke.edu/courses/spring07/cps296.2/scribe_notes/lecture24.pdf

这是一个合理的总结: students.asl.ethz.ch/upl_pdf/314-report.pdf

这是一个matlab实现: http://www.mathworks.com/matlabcentral/fileexchange/12627-iterative-closest-point-method

以下是一些潜在的优化: http://www.cs.princeton.edu/~smr/papers/fasticp/