我正在使用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的区域生长方法中是否有避免使用密度阈值的方法来避免这种情况?花了一些时间在文档上并调整了区域增长设置的值后,我仍然不知道该怎么做。
答案 0 :(得分:2)
RegionGrowing不考虑“候选”点的距离。包含决策基于常规数据,而实际候选对象来自K个最近邻居查询。
因此,您可以选择的一种方法是减少NumberOfNeighbours参数。这是最简单的方法,仅能部分起作用,因为它不能直接解决问题(点距)。在您发布的示例中,您可能需要将其减少到大约6。这可能会导致分割结果整体变差,并且在其他地方可能还有离群值。
一种更好的解决方案是使用半径离群值作为后处理步骤,以过滤从RegionGrowing获得的每个区域。
http://pointclouds.org/documentation/tutorials/remove_outliers.php