PCL之Octree理解心得
参考博客:https://www.yuque.com/huangzhongqing/pcl/habl9h
https://blog.csdn.net/weixin_43236428/article/details/103454791?utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control
从空间索引开始讲起
点云数据是表征目标表面的海量点的集合,不具备传统网络数据的集合拓扑信息(通过激光等扫描得到的点云数据一般都是一部分的数据,后期需要进行特征匹配才能合并成一个完整的个体。因此扫描出来的点云数据对于整个结构的拓扑特性等特征是缺失的)。所以点云数据处理中最为核心的问题就是建立离散点间的拓扑关系,实现基于邻域关系的快速查找。
而八叉树便是一种基于划分空间的空间索引结构。
八叉树(Octree)结构
八叉树是一种描述三维空间的树状数据结构,每一个节点表示一个正方体的体积元素,每一个节点有八个子节点,这八个子节点加和得到的体积便是父节点的体积。
实现原理
- 首先设置最大的递归深度,目的:为了避免有不可分割的情况出现;
- 找出场景的最大尺寸,并以此尺寸建立第一个立方体,然后开始对立方体进行划分;
- 假如没有达到最大递归深度,就进行细分八等份,在将改立方体所装的单位元素分担给八个子立方体;
- 若发现子立方体所分配到的单位元素数量不为0且跟父立方体是一样的,则该子立方体停止细分,因为跟据空间分割理论,细分的空间所得到的分配必定较少,若是一样数目,则再怎么切数目还是一样,会造成无穷切割的情形。
- 重复步骤3,直到达到最大递归深度。