有啥方法可以减少 Radius 异常值删除 [pcl 异常值删除] 的执行时间?

Posted

技术标签:

【中文标题】有啥方法可以减少 Radius 异常值删除 [pcl 异常值删除] 的执行时间?【英文标题】: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 秒。

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

【问题讨论】:

【参考方案1】:

pcl::RadiusOutlierRemoval

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

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

可能的方法:

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

【讨论】:

以上是关于有啥方法可以减少 Radius 异常值删除 [pcl 异常值删除] 的执行时间?的主要内容,如果未能解决你的问题,请参考以下文章

PC端系统,软件维护异常处理方法,提供各种效率

oracle中有一亿多行数据的表,要全表更新某字段值,有啥号的方法?

网格搜索需要 30 多分钟,有啥方法可以减少这种情况吗? (朱庇特天青)

CE 更新事件:有啥方法可以将之前/之后的属性值传递给工作流?

有啥方法可以访问本地网络中的 GAE 开发应用服务器吗?

有啥方法可以在单独的远程 Windows 机器上执行机器人测试吗?