八叉树(OcTree)
pcl的octree库提供了从点云数据创建具有层次的数据结构的方法。这样就可以对点数据集进行空间分区,下采样和搜索操作。每个八叉树节点有八个子节点或没有子节点。根节点描述了一个包围所有点的3维包容盒子。
pcl_octree实现提供了有效的最近邻居搜索(邻域搜索)API,例如“ 体素(Voxel)邻居搜索”,“ K最近邻居搜索”和“半径搜索邻居”。叶子节点类也提供其他功能,例如空间“占用率”和“每个体素(Voxel)的点密度”检查;序列化和反序列化功能可将八叉树结构有效地编码为二进制格式;此外,内存池实现减少了昂贵的内存分配和释放操作,以便快速创建八叉树。
下图说明了最低树级别的八叉树节点的体素边界框。八叉树体素围绕着兔子表面的每个3D点。红点代表点数据。该图像是使用octree_viewer创建的(visualization/tools/octree_viewer)。
https://robot.czxy.com/docs/pcl/chapter01/decomposition/
pcl_octree_viewer工具¶
a -> 增加显示深度(减小体素大小)
z -> 降低显示深度 (增加体素大小)
v -> 隐藏或显示octree立方体
b -> 隐藏或显示体素中心店
n -> 隐藏或显示原始点云
q -> 退出
三种搜索方式
● “体素内近邻搜索(Neighbors within VOxel Search)”
● “K近邻搜索(K Nearest Neighbor Search)”
● “半径内近邻搜索”(Neighbors within Radius Search)
点云压缩
官方文档这块有点云压缩的详细教程,PCL自带了相关压缩的API,需要用到OPENNI,目前没学这块,暂时用不到。留个地址,需要时候再用
https://pcl.readthedocs.io/projects/tutorials/en/latest/compression.html#octree-compression
八叉树的空间分区和搜索操作
代码和KD树基本一个套路,多了一种体素的搜索方式。
官方文档翻译过来的
https://pcl.readthedocs.io/projects/tutorials/en/latest/octree.html#octree-search
无组织点云数据的空间变化检测
看了下这块好像可以检索存储在当前八叉树结构(基于 cloudB)的体素中而在先前八叉树结构(基于 cloudA)中不存在的点,目前用不到,用到在详细探究。