点云滤波

mac2026-01-03  6

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;

3效果

最新回复(0)