如何比较两个3D点云?FPFH与RANSAC匹配无效后的方案咨询
先做好预处理,排除干扰
首先得把两个点云的坐标系对齐——如果组件是不会变形的刚性结构,用ICP算法做粗配准加精配准效果通常不错。另外要先去噪,比如用统计滤波、半径滤波去掉点云里的杂点,不然这些杂点会干扰后续的特征提取和匹配,这可能是你之前用FPFH和RANSAC没出结果的原因。试试基于距离的直接比较方法
配准完成后,计算两个点云的Hausdorff距离,这个指标能直接反映两个点云之间的最大或平均距离差异,很适合判断组件位置有没有偏移。你可以设定一个阈值,比如Hausdorff距离超过X毫米就判定组件位置有差异。另外也可以用点到点的平均距离作为相似性分数,数值越小说明两个点云越相似。换用更鲁棒的特征匹配方法
如果FPFH效果不好,可以换成SHOT特征(Signature of Histograms of OrienTations),它比FPFH更稳定,对旋转、缩放的抗干扰能力更强。匹配的时候别只用RANSAC,可以先用FLANN快速匹配找出候选的对应点,再用RANSAC剔除错误匹配的点,最后用匹配率作为相似性指标——匹配率越高,组件位置越一致。针对单个组件做检测(如果能分割的话)
如果能把点云先分割成单个组件(比如用区域生长、聚类这类分割算法),就对每个组件单独做配准和距离计算。这样不仅能得到整体的相似性分数,还能定位到具体哪个组件位置有问题,精度更高。比如分割后计算每个组件的重心偏移量,超过阈值就标记异常。用深度学习方法(有标注数据的话)
如果有足够的标注样本(正常和异常的点云对),可以试试PointNet、PointNet++这类专门处理点云的深度学习模型,让模型直接学习点云的相似性特征,输出相似性分数。这种方法对复杂场景的适应性更好,不过需要一定量的数据集支撑。
内容的提问来源于stack exchange,提问作者Ayush Singh

