是否有任何方法可以减少Radius异常值移除[pcl异常值移除]的执行时间



现在我在点云工作,在我的情况下,我的点云在异常值中有噪声,我想清除噪声,所以我在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秒。

正在寻找减少此时间的解决方案。

pcl::RadiusOutlierRemoval

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

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

可能的方法:

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

最新更新