有什么方法可以减少Radius离群值删除[pcl离群值删除]的执行时间吗?

时间:2020-09-04 09:52:25

标签: c++ point-cloud-library point-clouds vision

现在,我在点云中工作,以我为例,我的点云在离群值中比较嘈杂,我想清除噪声,因此我在PCL中使用了Radius离群值过滤器。小云的执行时间很好,但是随着点云大小的增加,时间会增加。

pcl::RadiusOutlierRemoval<pcl::PointXYZ> outrem;
 outrem.setInputCloud(box_cloud);
outrem.setRadiusSearch(0.007);
outrem.setMinNeighborsInRadius (150);
outrem.setKeepOrganized(false);
// apply filter
outrem.filter (*box_cloud);** 

就我而言,这大约需要15秒。

正在寻找解决方案以减少这种时间。

1 个答案:

答案 0 :(得分:1)

pcl::RadiusOutlierRemoval

遍历整个输入一次,对于每个点,检索特定半径内的邻居数。

因此,运行时间取决于云中的点数和搜索半径(半径越大,树查询越慢)。

可能的方法:

  1. 如果某些点绝对不是异常值,则可以使用setIndices()排除它们。例如,如果您知道所有异常值都为深色(强度pcl::PassThrough用intensity < I预选择所有点的索引。
  2. 减小搜索半径(并相应地减少最小邻居)。
  3. 我相信该算法不会在内部并行化。因此,您可以将工作分散到多个线程中,每个线程都从云子集中删除异常值。请注意,划分应该是空间划分,而不是基于索引-pcl::CropBox可以用于此目的。
  4. 可以使用pcl::OctreePointCloud通过迭代叶体素并计算体素中的点数来实现
  5. 近似半径去除”(如果体素包含少于X个点,则应该删除体素。)