在使用PCL的处理点云时,很多时候我们不需要有太过高的分辨率,因为点云过多会造成计算变慢,并且更加消耗计算资源,所以我们需要把点云变稀,voxel就是一个很好的方法。
voxel就是三维的pixel,也就是把点云画出网格,然后每个网格内保留一个点就可以了。网格的大小可以自己定义,这就相当于一个downsample(下采样)
大概的样子就是这样,我显示出了所有的点,如果某一个格子内没有点就可以不显示了,你也可以把格子调的很密,颜色也可以保留。
话不多说,直接上代码:
首先必要的引用的是
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/filters/voxel_grid.h>
其中特殊的也就是第三个了,前两个要用PCL项目的话基本上都会引用了。第三个引用了就可以使用PCL自带的voxel的功能了,不过如果不太信任pcl的筛选方法也可以自己写一个,voxel的原理很简单,就是遍历塞进不同的格子里,实现起来也就不怎么难了,我们这里只讲怎么使用pcl的方法,毕竟这样实现起来最快。
接下来的核心代码:
pcl::VoxelGrid<pcl::PCLPointCloud2> sor;
sor.setIn