《点云库PCL学习教程》八叉树PPT课件

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

删除另一个缓冲区中对应八叉树的结构及其叶子节点。
void deleteCurrentBuffer()
删除当前缓冲区中对应八叉树的结构和其叶子节点。
void switchBuffers()
交换缓冲区,并重设八叉树结构。
void serializeTree(std::vector<char>& binaryTreeOut_arg, bool doXOREncoding_arg=false)
本章首先对常用的点云空间索引方法octree概念进行介 绍,然后对PCL的octree相关模块及类进行简单说明, 最后通过应用实例来展示如何对PCL中octree模块进行 灵活运用。
.
2
本章各小节目录
6.1 octree概述பைடு நூலகம்相关算法简介 6.2 PCL中octree模块及类介绍 6.3 应用实例解析
.
10
void deserializeTree(std::vector<char>& binaryTreeIn _arg, bool doXORDecoding_arg=false)
类Octree2BufBase关键成员函数:
void setMaxVoxelIndex(unsigned int maxVoxelIndex_arg)
设置在各个维度上最大的体素个数。
.
7
void setTreeDepth(unsigned int depth_arg)
设置八叉树的深度,需要在初始化八叉树时设置。
.
6
octree模块中类说明
目前PCL中octree模块中目前共有16个类,以后有可能增 加。
1. class pcl::octree::Octree2BufBase<DataT, LeafT>
类Octree2BufBase实现了同时存储管理两个八叉树于内 存中,如此,可以非常高效地实现八叉树的建立管理 等操作,并且该类实现对临近树节点结构的变化探测, 对应到空间点云,其就可以对空间曲面的动态变化进 行探测,在进行空间动态变化探测中非常有用,例如 目前基于kinect设备的体感交互应用。
.
3
6.1 octree概述及相关算法简介
八叉树结构是由Hunter博士于1978年首次提出的一 种数据模型。八叉树结构通过对三维空间的几何 实体进行体元剖分,每个体元具有相同的时间和 空间复杂度,通过循环递归的划分方法对大小为 2n×2n×2n的三维空间的几何对象进行剖分,从而 构成一个具有根节点的方向图。在八叉树结构中 如果被划分的体元具有相同的属性,则该体元构 成一个叶节点;否则继续对该体元剖分成8个子立 方体,依次递归剖分,对于2n×2n×2n大小的空间 对象,最多剖分n次,如图6-1所示。
第6章 八叉树
.
1
建立空间索引在点云数据处理中已被广泛应用,常见空 间索引一般是自顶向下逐级划分空间的各种空间索引 结构,比较有代表性的包括BSP树、KD树、KDB树、R 树、R+树、CELL树、四叉树和八叉树等索引结构,而 在这些结构中KD树和八叉树在3D点云数据组织中应用 较为广泛。PCL对八叉树的数据结构建立和索引方法 进行了实现,以方便在此基础上的其他点云处理操作。
返回在该八叉树中的叶子数目。
unsigned int getBranchCount() const
返回在该八叉树中的分支数目。
.
8
void deleteTree(bool freeMemory_arg=false)
删除八叉树的结构及其叶子节点。
void deletePreviousBuffer()
void add(unsigned int idxX_arg, unsigned idxY_arg, unsigned int idxZ_arg, const DataT& data_arg)
在idxX、idxY、idxZ对应的叶子节点上填充DataT的数据, 其中idxX、idxY、idxZ为在三个维度上的整型索引值。
串行化重载函数,其中参数dataVector_arg存储八叉树中 叶子节点上的数据,其他两个参数同上。
void serializeLeafs(std::vector<DataT>& dataVector_arg)
参数dataVector_arg存储八叉树中叶子节点上的数据,该 函数只串行化八叉树中的数据。
串行化输出八叉树结构到binaryTreeOut_arg向量,
doXOREncoding_arg设置输出时是否将当前缓冲区与后
台缓冲区中数据进行异或操作后再输出,异或操作是
两个八叉树结构之间差异数据的输出。
.
9
void serializeTree(std::vector<char>& binaryTreeOut_arg, std::vector<DataT>& dataVector_arg, bool doXOREncoding_arg=false)
bool existLeaf(unsigned int idxX_arg, unsigned int idxY_arg, unsigned int idxZ_arg) const
判断在idxX、idxY、idxZ对应的叶子节点是否存在,如果 存在返回true,否则返回false。
unsigned int getLeafCount() const
void serializeNewLeafs(std::vector<DataT>& dataVector_arg, const int minPointsPerLeaf_arg=0)
串行化当前缓冲区八叉树中存在但在后台缓冲区八叉树 中不存在的节点数据,其中,minPointsPerLeaf_arg为 需要串行化的节点中点的最小个数,如果点个数小于 该值则不串行化此新节点。
.
4
.
5
6.2 PCL中octree模块及类介绍
PCL中octree库提供了octree数据结构,利用FLANN进 行快速邻域检索。邻域检索在匹配、特征描述子 计算、领域特征提取中是非常基础的核心操作。 octree模块利用十几个类实现了利用octree数据结 构对点云的高效管理和检索,以及相应的一些空 间处理算法,例如压缩、空间变化检测,其依赖 于pcl_common模块。
相关文档
最新文档