You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用pcl::VoxelGrid构造函数传bool参数失败,无法使用getRemovedIndices()

PCL VoxelGrid无法通过bool构造参数获取移除点索引的问题与解决

问题场景

在ROS Noetic(Ubuntu 20.04,PCL 1.10)环境中处理点云时,尝试用pcl::VoxelGrid滤波并提取被过滤点的索引,用于同步处理对应的法线点云。参考pcl::PassThrough等过滤器的用法,在构造VoxelGrid对象时传入true(用于后续调用getRemovedIndices),但编译报错。

代码示例

void voxelFilter(const pcl::PointCloud<pcl::PointXYZ>::Ptr& cloud, const pcl::PointIndices::Ptr& inliers_filtered)
{
    ROS_INFO("Apply voxelization.");
    pcl::VoxelGrid<pcl::PointXYZ> vox(true);
    vox.setInputCloud (cloud);
    vox.setLeafSize (0.001f, 0.001f, 0.001f);
    vox.filter (*cloud);
    vox.getRemovedIndices(*inliers_filtered);
}

编译错误

编译器提示pcl::VoxelGrid仅提供无参构造函数和拷贝构造函数,不支持传入bool类型参数。

原因分析

虽然VoxelGrid继承自pcl::Filter<PointT>,但它的滤波逻辑是生成新的体素化点云——输出点是体素内点的重心或随机采样点,并非直接保留原始点集中的点,输入与输出点之间没有一一对应的索引关系。因此PCL没有为VoxelGrid实现带bool参数的构造函数(该参数用于启用移除索引的记录),获取移除索引本身没有实际意义。

解决方案

改用pcl::UniformSampling过滤器,它的逻辑是从原始点云中按照指定间隔采样保留点,输出点均来自原始点集,输入与输出点的索引对应关系明确,可以正常调用getRemovedIndices获取被过滤点的索引,从而实现法线点云的同步处理。

内容的提问来源于stack exchange,提问作者mboga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 02:20:09