1、PCL的IO模块
加载主要用到IO模块里的几个类:pcl::io::loadPCDFile、pcl::PCDReader和 pcl::PCDWriter等,他们的成员函数也基本只用到一个,第一个类直接定义对象将PCD加载到定义的点云cloud中,第二个类是通过read(cloud,cloud_name)函数将PCD文件读取到点云cloud中,同理,第三个类是将点云数据写入到.pcd文件中。
2、PCL的visualization模块
显示点云主要用到两个类:pcl::visualization::PCLVisualizer和pcl::visualization::CloudViewer。
pcl::visualization::PCLVisualizer 的成员函数主要用到的有:
具体参见官方库
- addPointCloud(cloud,geometry_handler,cloud_name,viewport)
- addLine(线第一个点,线第二个点,r,g,b,id,viewport)
- addsphere(球心,半径,id,viewport)
- addPlane(平面模型参数coefficients,x,y,z,id,viewport)
- addCone(coefficients,id,viewport) 添加圆锥
- spin()
- spinOnce()
- wasStopped()
pcl::visualization::CloudViewer的成员函数主要有:
- showcloud(cloud)
- wasStopped() 检查gui是否退出
- runOnVisualizationThreadOnce()
- runOnVisualizationThread()
3、PCL的filter模块
点云滤波主要有双边滤波,高斯滤波,条件滤波、直通滤波和基于随机采样一致性滤波。采取点云滤波是因为:
- 点云数据密度不规则需要平滑处理
- 需要去除离群点
- 简化点云数据,下采样(downsample)
- 去除噪音数据
a.直通滤波器
主要用到类 pcl::PassThrough,其主要成员函数如下:
-
setFilterFieldName(field_name) 设置滤波点云类型字段
-
setFilterLimits(limit_min,limit_max) 设置过滤字段上的范围
-
getFilte斜体样式rLimitsNegative(bool) *ture:返回间隔外数据 *
false:返回间隔内数据 -
setInputCloud(cloud) 设置输入点云
-
filter(PointCloud & output) 保存过滤后的点云数据
-
filter(&indices) 保存过滤后的点云索引
b.voxelGrid滤波器
对点云进行下采样,voxelGrid类通过创建一个三维体素格,利用体素格的重心来近似显示体素中其他点。主要用到类:pcl::voxelGrid,成员函数如下:
- setLeafSize(float lx,float ly,float lz) 设置体素网格叶子大小
- setDownsampleAllData(bool downsample) ture:对所有字段下采样 false:仅对xyz进行下采样