我有一个物体的点云,用激光扫描仪获得,以及该物体的CAD表面模型。
如何将点云与曲面相匹配,以获得云与模型之间的平移和旋转?
我想我可以对表面进行采样并尝试使用Iterative Closest Point(ICP)算法将得到的采样点云与扫描仪点云进行匹配。
这实际上有用吗?
这项任务有更好的算法吗?
是的,ICP可以应用于此问题,正如您建议对表面进行采样。最好是你的激光扫描中有所有可用的面孔,否则你可能需要从模型中移除隐形面(取决于其中有多少面)。
通过去除一些隐藏面来自动准备模型的一种方法是计算可用于丢弃隐藏面(例如,不是靠近凹形船体的面)的凹形船体。根据模型的相关程度,这可能是必要的,也可能不是必需的。
如果给出良好的初始猜测,ICP工作良好,因为它忽略了与当前猜测不相近的点。如果ICP没有提供良好的对齐,您可以尝试通过多次随机重启来尝试解决此问题,选择最佳对齐方式。
更复杂的解决方案是进行局部特征匹配。您可以对SHOT或FPFH等不变描述符进行采样和计算。您可以找到最佳匹配,拒绝不一致的匹配,使用它们来获得良好的初始对齐,然后使用ICP进行优化。但您可能不需要此步骤,具体取决于随机重启ICP的稳健性和快速性。
在新的OpenCV中,我实现了一个表面匹配模块,以将3D模型与3D场景相匹配。无需初始姿势,检测过程完全自动化。该模型还涉及ICP。
要了解一下,请在此处查看视频(尽管它不是由OpenCV中的实现生成的):
https://www.youtube.com/watch?v=uFnqLFznuZU
您提到需要对CAD模型进行采样。这是正确的,我们给出了适合点对特征匹配的采样算法,例如在OpenCV中实现的算法:
新娘,托尔加和斯洛博丹伊利奇。不规则几何三维匹配的点采样算法。 2017年IEEE / RSJ智能机器人和系统国际会议(IROS)。 IEEE,2017。
http://campar.in.tum.de/pub/tbirdal2017iros/tbirdal2017iros.pdf
有一个point cloud algorithms的开源库,它针对其他点云实现registration。也许你可以试试他们的一些方法,看看是否合适。
作为入门者,如果他们没有任何特定的东西适合多边形网格,您可以将网格顶点视为另一个点云,并使您的点云适合它。这是他们绝对支持的。