pcl库中滤波器总结

1 引言

在获取点云时由于设备精度、操作者经验、环境因素等带来的影响,以及电磁波衍射的特性、被测物体表面性质变化和数据拼接配准操作过程的影响,点云数据中将不可避免的出现一些噪声点。在点云处理流程中,滤波处理作为预处理的第一步,往往对后续处理管道影响很大,只有在滤波预处理中将噪声点、离群点、孔洞、数据压缩等按照后续处理定制,才能够更好地经行配准、特征提取、曲面重建、可视化等后续应用处理

2 pcl中相关算法函数

2.1 直通滤波器

对某一维度实行一个简单的滤波,即去掉在用户指定范围内部或外部的点。

#include <pcl/filters/passthrough.h> //所需头文件

pcl::PassThrough< Point Type > passName; //创建滤波对象
passName.setInputCloud(cluod); //setInputCloud;
passName.setFilterFileldName("z"); //设置过滤 'z'轴点(x,y 轴都可以,但是其他的譬如一个旋转轴没试过)
passName.setFilterLimits(0.0,1.0); //对z轴上(0,1)区间的点进行处理
passName.setFilterLimintsNegative(true or false); //true 为滤掉z轴上(0,1)的点云,false为保存该范围的点云,即滤掉不属于(0,1)上的点。不写该函数,只写上面一行代码,则对是保留区间的点云。源码中有一句话需要注意:This method will be removed in the future. Use setNegative();
passName.filter(*cloud_out_filtered); //执行滤波

图一 pass_before

图二 pass_after

2.2 使用VoxelGrid滤波器对点云进行下采样

该算法可以减少点的数量、减小点云数据,并同时保持点云的形状特征。

通过对输入点云数据创建一个三维体素栅格,然后在每个体素内,用体素中所有点的重心来近似显示体素中的其他店,这样该体素中的所有点就用一个重心点最终表示。

#include <pcl/filters/voxel_grid.h>

pcl::VoxelGrid<Point Type> downsample;
downsample.setInputCloud(cloud_in);
downsample.setLeafSize(0.1f,0.1f,0.1f);//设置leaf size 为10cm的立方体
downsample.filter(*cloud_out_flitered);

图一点云下采样参数0.03,点云数量337271;

图2 为参数0.05的下采样,点云数量为121015。

2.3 统计滤波器

使用StatisticalOutlierRemoval滤波器移除离群点

对每个点的邻域进行一个统计分析,并修剪掉那些不符合一定标准的点。对每个点我们计算它到它的所有临近点的平均距离。假设得到的结果是一个高斯分布,其形状由均值和标准差决定,平均距离在标准范围(由全局距离平均值和方差定义)之外的点,可被定义为离群点并从数据集中去掉。

#include <pcl/filters/statistical_outlier_removal.h>

pcl::StatisticalOutlierRemoval<Point Type> sor;
sor.setInputCloud(cloud_in);
sor.setMeanK(50); // set统计时考虑查询近邻点数;
sor.setStddevMulThresh(1.0); //set 判断是否为离群点的阈值;
sor.filter(*cloud_out_filtered); //滤波后保存点云到 cloud_out_filtered;
sor.setNegative(true);// 得到离群点;
sor.filter(*cloud_out_removal); //离群点保存至 cloud_out_removal;

3 总结

以上为常用的三种滤波器,当然后pcl/filters模块中还有其他方法,包括投影滤波pcl::ProjectInliers ;提取子集pcl::ExtractIndices ;ConditionalRemoval 以及RadiusOutlierRemoval来通过设置条件来滤波,还有多边形内部点云提取CropHull。学习PCL最好还是要上官网看文档:http://docs.pointclouds.org/trunk/group__filters.html

猜你喜欢

转载自www.cnblogs.com/xiaoniubenrecord-6161/p/11904871.html