通过非接触法测量设备获取物体的点云数据时,由于测量设备的精度,环境因素和被测物体的表面性质的影响,点云数据中不可避免会出现一些噪声点,噪声点对后续的点云拼接、曲面重构影响十分大。必须对其进行去噪处理。PCL中点云滤波模块提供了很多灵活实用的滤波处理算法,例如:双边滤波,高斯滤波,条件滤波,直通滤波,基于随机采样一致性滤波等等。
1、体素网格滤波VoxelGrid
//主要代码
pcl::PointCloud<pcl::PointXYZ> ::Ptr filtered
(new pcl::PointCloud<pcl::PointXYZ>); //创建点云对象,用以存储滤波后点云
pcl::VoxelGrid<pcl::PointXYZ> sor; //创建滤波对象
sor.setInputCloud(cloud); //设置需要过滤的点云给滤波对象
sor.setLeafSize(0.01f, 0.01f, 0.01f); //设置滤波时创建的体素体积为1cm的立方体
sor.filter(*filtered); //执行滤波处理,存储输出
2、统计滤波器statisticalOutlierRemoval
//主要代码
pcl::StatisticalOutlierRemoval<pcl::PointXYZ> sor; //创建滤波器对象
sor.setInputCloud(cloud); //设置待滤波的点云
sor.setMeanK(50); //设置在进行统计时考虑查询点临近点数
sor.setStddevMulThresh(1.0); //设置判断是否为离群点