1方法
分别利用pcl::VoxelGrid,pcl::PassThrough,pcl::StatisticalOutlierRemoval对点云进行降采样,滤波,去燥处理。
2代码
// 创建滤波器对象
pcl::VoxelGrid<pcl::PCLPointCloud2>sor;
//读入原始点云
sor.setInputCloud(cloud2);
//设置体素大小
sor.setLeafSize(1.0f, 1.0f, 1.0f);
//滤波后点云存储
sor.filter(*cloud2_filtered);
pcl::fromPCLPointCloud2(*cloud2_filtered, *cloud_me);
cout << "原点云点数:" << cloud->points.size() << endl;
cout <<"降采样后点数:" <<cloud_me->points.size() << endl;
//设置滤波器对象
pcl::PassThrough<pcl::PointXYZ> pass;
//设置输入点云
pass.setInputCloud(cloud_me);
//设置过滤时所需点云的字段
pass.setFilterFieldName("z");
//设置过滤字段的范围
pass.setFilterLimits(-54, -45);
//设置保留范围内的还是过滤掉范围内的
pass.setFilterLimitsNegative(true);
pass.filter(*cloud_medium);
cout <<"按Z轴滤波后点数:" << cloud_medium->points.size() << endl;
//创建滤波器对象
pcl::StatisticalOutlierRemoval<pcl::PointXYZ> remov;
//设置带滤波的点云
remov.setInputCloud(cloud_medium);
//设置在进行统计时考虑查询点临近点数
remov.setMeanK(50);
//判断是否为离群点的阈值
remov.setStddevMulThresh(1.0);
remov.filter(*cloud_final);
cout <<"去噪后点数:"<< cloud_final->points.size() << endl;