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
标签:滤波器,库中,滤波,sor,pcl,点云,cloud,out 来源: https://www.cnblogs.com/xiaoniubenrecord-6161/p/11904871.html