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