一、PCL 中的搜索树概述
在 PCL(Point Cloud Library)中,搜索树是实现高效点云处理算法的关键组件,为各种点云操作提供了强大的支持。常见的搜索树包括 K-D 树(K-Dimensional Tree)和八叉树(Octree)等。这些搜索树在不同的点云处理任务中发挥着重要作用,帮助我们更高效地存储、查询和操作点云数据,为机器人、自动驾驶、计算机视觉等领域的三维数据处理提供了基础架构。
二、八叉树(Octree)的实现原理
八叉树结构是由 Hunter 博士于1978年首次提出的一种数据模型,专为处理三维空间数据而设计的树状数据结构,其构建和搜索操作都基于对三维空间的有效划分。
八叉树的结构是这样的:
给点云构造八叉树,首先把点云的包围盒分割成8个小方格,小方格可以再分为8个更小的方格,直到满足迭代终止条件。迭代的终止条件可以是达到最大迭代深度,或者是达到最小分辨率(就是小方格的边长不可以小于这个分辨率)。
八叉树里最小的格子就是叶子节点(leaf node),PCL支持直接返回一个叶子节点里包含的所有点的索引,用octree.voxelSearch (searchPoint, pointIdxVec)这个函数,可以将八叉树中searchPoint这个点所在的叶子节点中包含的所有点的索引存到pointIdxVec里。
为了更直观地理解八叉树的思想,可通过其二维形式——四叉树来进行说明。仍以六个数据点作为研究对象: