【问题标题】:Is there any way to reduce execution time of Radius outlier removal [pcl outlier removal]?有什么方法可以减少 Radius 异常值删除 [pcl 异常值删除] 的执行时间?
【发布时间】:2020-12-23 14:06:04
【问题描述】:

现在我在点云中工作,就我而言,我的点云在异常值中很嘈杂,我想清除噪声,所以我使用 PCL 中的半径异常值过滤器。小云的执行时间不错,但时间会随着点云大小的增加而增加。

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 秒。

寻找一种解决方案来减少这个时间。

【问题讨论】:

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


    【解决方案1】:

    pcl::RadiusOutlierRemoval

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

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

    可能的方法:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-08
      • 2021-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-11
      相关资源
      最近更新 更多