如何对齐两个网格

5
我有一个非常棘手的问题需要您的帮助。我需要使用一种非常快速的算法对齐两个网格。给定mesh1和mesh2,我想找到如何将mesh1平移和旋转以使其与mesh2处于相同的位置。起初,我使用了两个网格的惯性矩来实现这一点,但是如果第二个网格类似于第一个网格但缺少某些部分,则该算法无法工作。换句话说,拿出两个相同的网格并从其中一个上切下相同的部分。
我想用C语言编写代码,因为我需要在多平台机器(linux/win)上执行,并且需要非常快速:它必须放入GA算法中。
两个网格都是STL(立体光刻)格式(二进制或ASCII),但是可能使用另一种文件格式会更有用。
您是否有任何关于如何执行此操作的想法?
问题更新:
首先,我非常感谢你们提供的所有建议。我已经在我的计算机上下载并安装了PCL,并成功编译了ICP(教程)算法,该算法来自PCL网站。但是现在我对此有一些问题,可能是因为对我来说是全新的东西。 4x4矩阵输出的适合度意味着什么?我应该期望一个旋转矩阵和一个平移向量。
我希望你们中的一些人可以帮助我。如果您需要任何其他信息,请询问。
2个回答

4

点云库有几个资源可能会对您有用。正如@Throwback1986所说,ICP是一种优秀的几何对齐算法。Pcl还具有其他常用的对齐算法,这些算法基于识别和匹配两个几何体中感兴趣的特征。该库在机器人社区中被广泛使用,他们像您一样非常注重性能。

Pcl是用C++编写的。虽然不像纯C那样易移植,但他们提供了Windows、几个*nix版本和Mac OS的安装说明。我也看到它在iOS和Android上运行。请查看教程


3

迭代最近点算法(ICP)是一种使用刚性变换来注册(对齐)三维点云的方法。(它也适用于网格。)

这里有一个很好的介绍: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/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接