我使用PCL检测我的激光雷达点云中的表面,我的配置如下:
pcl::RegionGrowing<pcl::PointXYZ, pcl::Normal> reg;
reg.setMinClusterSize(static_cast<int>(100));
reg.setMaxClusterSize(static_cast<int>(1000));
reg.setSearchMethod(new pcl::search::KdTree<pcl::PointXYZ>);
reg.setNumberOfNeighbours(30);
reg.setInputCloud(point_cloud);
reg.setInputNormals(normals);
reg.setSmoothnessThreshold(6_deg);
reg.setCurvatureThreshold(1.0);它工作得很好,但我发现它提取了一些离群点,如下图所示。
我试图探测到一架带有腿的飞机,而这种方法似乎能在腿上找到一些点。是否有办法避免在PCL区域生长方法中使用例如密度阈值?在花了一些时间在文档和调整区域增长设置的值之后,我仍然想不出如何去做。

发布于 2019-05-19 07:50:57
RegionGrowing没有考虑到“候选点”的距离。包含决策是基于正常的数据,而实际的候选结果是K最近邻查询。
因此,您可以选择减少NumberOfNeighbours参数。这是最简单的,它只能部分工作,因为它没有直接解决问题(点距离)。在您发布的示例中,您可能需要将其减少到大约6,这可能会导致分割的总体结果更糟,而且您可能在其他地方仍然存在异常值。
一个更好的解决方案是使用radius离群值删除作为后处理步骤来过滤从RegionGrowing获得的每个区域。
outliers.php
https://stackoverflow.com/questions/56193516
复制相似问题