PCL:点云滤波处理–下采样
学习pcl库的时候只是看了个大概,用到的时候直接到pcl官方文库里找了来用,没实际研究过,今天学习点云网格化处理的时候遇到了这个问题,在此记录下。
使用VexelGrid滤波器对点云下采样
简单来说,下采样的功能就是过滤掉大量的噪点,减少点的数量,同时保持点云的形状特征,是对点云操作的预处理,而VexelGrid滤波器是点云下采样的一种,这里先简单说说:
VexelGrid下采样采用的方法是点云删格化处理的方法,栅格化处理分为二维栅格化处理和三维栅格化处理,在此采用的是三维栅格化处理的方法,即,体素化网格的方法,通过设定小立方体的size,计算它的重心(而不是中心)代替它周围立方体大小内其中所有的点,只保留一个重心点,由此进行下采样。 E = M C 2 E=MC^2 E=MC2
PCL的具体实现语句:
#include <pcl/point_types.h>
#include <pcl/filters/voxel_grid.h> //包含所需的头文件
关键语句
pcl::VoxelGrid<pcl::PointXYZ> sor; // 创建滤波(下采样)对象
sor.setInputCloud(cloud); //设置需要过滤的点云
sor.setLeafSize(0.1f, 0.1f, 0.1f); //设置滤波时创建的体素体积为1cm的立方体,意思是1cm
3里面的点云只留重心一个。
sor.filter(*cloud_filtered); //执行滤波处理,储存输出点云
其中,VoxelGrid是pcl库中的一个类,PCL库中有很多类,也就是说有很多功能,里面已经封装好了,我们很多功能可以直接拿来用,sor是构建的一个类对象,这个类里面有很多函数,其中setInputCloud()就是输入要过滤点云的一个函数。更多函数及其类的定义请移往 PCL-API.
暂时想到这么多,后续再来补充。
了解点云二维栅格化移步--点云栅格化处理