调用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
相关产品推荐
相关产品推荐

