一、统计滤波
#include <iostream>
#include <pcl/point_cloud.h>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/filters/voxel_grid.h>
#include <pcl/common/common_headers.h>
#include <pcl/visualization/cloud_viewer.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/filters/extract_indices.h>
#include <pcl/filters/statistical_outlier_removal.h>
#include <pcl/registration/gicp.h>
#include <pcl/registration/icp.h>
#include <pcl/features/normal_3d.h>
#include <pcl/kdtree/kdtree_flann.h>
using namespace std;
int main()
{
// 加载源点云
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_source(new pcl::PointCloud<pcl::PointXYZ>());
pcl::io::loadPCDFile<pcl::PointXYZ>("D:\\PPCL\\room_scan1.pcd", *cloud_source);
cout << "点云加载完成!" << endl;
// 创建统计滤波器对象
pcl::StatisticalOutlierRemoval<pcl::PointXYZ> staticOR;
staticOR.setInputCloud(cloud_source);
staticOR.setMeanK(50); // 设置统计平均点数,增加MeanK的值会使每个点的邻域变大
staticOR.setStddevMulThresh(5); // 设置标准差倍数阈值,增加StddevMulThresh的值会减少被移除的点的数量
// 进行滤波
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZ>());
staticOR.filter(*cloud_filtered);//cloud_filtered 将用于存储经过离群点移除处理后的点云数据。
cloud_source = cloud_filtered;
cout << "点云滤波完成!" << endl;
//可视化
pcl::visualization::CloudViewer viewer("Viewer");
viewer.showCloud(cloud_source); // 直接显示点云
// 保存点云到文件
pcl::io::savePCDFileBinary("D:\\PPCL\\room_scan1121.pcd", *cloud_source);
cout << "滤波后点云文件已经保存" << endl;
system("pause");
return 0;
}
二、直通滤波,滤波掉x、y、z轴上限制范围外的点云数据
#include <iostream>
#include <pcl/point_cloud.h>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/common/common_headers.h>
#include <pcl/visualization/cloud_viewer.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/filters/extract_indices.h>
#include <pcl/filters/statistical_outlier_removal.h>
#include <pcl/filters/passthrough.h>
using namespace std;
int main()
{
// 加载源点云
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_source(new pcl::PointCloud<pcl::PointXYZ>());
pcl::io::loadPCDFile<pcl::PointXYZ>("F:\\实验数据1022\\24.10.22\\4.pcd", *cloud_source);
cout << "点云加载完成!" << endl;
// 显示点云中的点的数量
cout << "点云中的点的数量: " << cloud_source->size() << endl;
// 设置滤波器对象
pcl::PassThrough<pcl::PointXYZ> pass;
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZ>);
pass.setInputCloud(cloud_source); //设置输入点云
pass.setFilterFieldName("z"); //设置过滤时所需要点云类型的Z字段
pass.setFilterLimits(550,650); //设置在过滤字段的范围
pass.filter(*cloud_filtered);
//cloud_source = cloud_filtered;
//可视化
pcl::visualization::CloudViewer viewer("Viewer");
viewer.showCloud(cloud_filtered); // 直接显示点云
// 保存点云到文件
pcl::io::savePCDFileBinary("F:\\实验数据1022\\24.10.22\\444.pcd", *cloud_filtered);
cout << "滤波后点云文件已经保存" << endl;
cout << "点云中的点的数量: " << cloud_filtered->size() << endl;
system("pause");
return 0;
}
标签:PointCloud,source,可视化,pcl,点云,filtered,include,cloud,通滤波 From: https://blog.csdn.net/qq_64095888/article/details/143321872