如何解决有什么方法可以减少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秒。
正在寻找解决方案以减少这种时间。
解决方法
遍历整个输入一次,对于每个点,检索特定半径内的邻居数。
因此,运行时间取决于云中的点数和搜索半径(半径越大,树查询越慢)。
可能的方法:
- 如果某些点绝对不是异常值,则可以使用setIndices()排除它们。例如,如果您知道所有异常值都为深色(强度pcl::PassThrough用
intensity < I
预选择所有点的索引。 - 减小搜索半径(并相应地减少最小邻居)。
- 我相信该算法不会在内部并行化。因此,您可以将工作分散到多个线程中,每个线程都从云子集中删除异常值。请注意,划分应该是空间划分,而不是基于索引-
pcl::CropBox
可以用于此目的。
可以使用pcl::OctreePointCloud通过迭代叶体素并计算体素中的点数来实现 - “ 近似半径去除”(如果体素包含少于X个点,则应该删除体素。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。