如何去除 PCL 中的异常点以进行基于区域增长的表面检测
Posted
技术标签:
【中文标题】如何去除 PCL 中的异常点以进行基于区域增长的表面检测【英文标题】:how to remove outlier points in PCL for region grow based surface detection 【发布时间】:2019-05-17 21:00:15 【问题描述】:我正在使用 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 中区域生长方法中的密度阈值来避免这种情况?在花了一些时间在文档上并调整了区域增长设置的值之后,我仍然无法弄清楚如何去做。
【问题讨论】:
【参考方案1】:RegionGrowing 不考虑“候选”点的距离。包含决策基于正常数据,而实际候选者来自 K 最近邻查询。
因此,您可以选择减少 NumberOfNeighbours 参数。这是最简单的,只能部分工作,因为它不能直接解决问题(点距离)。在您发布的示例中,您可能需要将其减少到大约 6。这可能会导致分割的整体结果更差,并且您可能在其他地方仍有异常值。
更好的解决方案是使用半径异常值去除作为后处理步骤来过滤您从 RegionGrowing 获得的每个区域。
http://pointclouds.org/documentation/tutorials/remove_outliers.php
【讨论】:
以上是关于如何去除 PCL 中的异常点以进行基于区域增长的表面检测的主要内容,如果未能解决你的问题,请参考以下文章