PCL的filter模块中实现了很多点云滤波算法,以下简单介绍直通滤波器,条件滤波器,统计滤波器和体素栅格滤波器的基本原理,并给出使用对应滤波器的代码片段。
直通滤波器
最简单的一种滤波器,它的作用是过滤掉在指定维度方向上取值不在给定值域内的点。直通滤波器的实现原理如下:首先,指定一个维度以及该维度下的值域,其次,遍历点云中的每个点,判断该点在指定维度上的取值是否在值域内,删除取值不在值域内的点,最后,遍历结束,留下的点即构成滤波后的点云。直通滤波器简单高效,适用于消除背景等操作。
typedef pcl::PointXYZRGBA PointT;
typedef pcl::PointCloud<PointT> PointCloudT;
typedef PointCloudT::Ptr PointCloudTPtr;
pcl::PassThrough<PointT> pass;
pass.setFilterFieldName("z");
pass.setFilterLimits(0.7,1.3);
pass.setInputCloud(preprocess_cloud);
pass.filter(*preprocess_cloud);
条件滤波器
与直通滤波器类似