- 1、本文档共64页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《点云库PCL学习教程》第6章八叉树要点
第6章 八叉树;建立空间索引在点云数据处理中已被广泛应用,常见空间索引一般是自顶向下逐级划分空间的各种空间索引结构,比较有代表性的包括BSP树、KD树、KDB树、R树、R+树、CELL树、四叉树和八叉树等索引结构,而在这些结构中KD树和八叉树在3D点云数据组织中应用较为广泛。PCL对八叉树的数据结构建立和索引方法进行了实现,以方便在此基础上的其他点云处理操作。
本章首先对常用的点云空间索引方法octree概念进行介绍,然后对PCL的octree相关模块及类进行简单说明,最后通过应用实例来展示如何对PCL中octree模块进行灵活运用。;本章各小节目录;6.1 octree概述及相关算法简介; ;6.2 PCL中octree模块及类介绍;octree模块中类说明
目前PCL中octree模块中目前共有16个类,以后有可能增加。
1. class pcl::octree::Octree2BufBaseDataT, LeafT
类Octree2BufBase实现了同时存储管理两个八叉树于内存中,如此,可以非常高效地实现八叉树的建立管理等操作,并且该类实现对临近树节点结构的变化探测,对应到空间点云,其就可以对空间曲面的动态变化进行探测,在进行空间动态变化探测中非常有用,例如目前基于kinect设备的体感交互应用。
类Octree2BufBase关键成员函数:
void setMaxVoxelIndex(unsigned int maxVoxelIndex_arg)
设置在各个维度上最大的体素个数。;void setTreeDepth(unsigned int depth_arg)
设置八叉树的深度,需要在初始化八叉树时设置。
void add(unsigned int idxX_arg, unsigned idxY_arg, unsigned int idxZ_arg, const DataT data_arg)
在idxX、idxY、idxZ对应的叶子节点上填充DataT的数据,其中idxX、idxY、idxZ为在三个维度上的整型索引值。
bool existLeaf(unsigned int idxX_arg, unsigned int idxY_arg, unsigned int idxZ_arg) const
判断在idxX、idxY、idxZ对应的叶子节点是否存在,如果存在返回true,否则返回false。
unsigned int getLeafCount() const
返回在该八叉树中的叶子数目。
unsigned int getBranchCount() const
返回在该八叉树中的分支数目。;void deleteTree(bool freeMemory_arg=false)
删除八叉树的结构及其叶子节点。
void deletePreviousBuffer()
删除另一个缓冲区中对应八叉树的结构及其叶子节点。
void deleteCurrentBuffer()
删除当前缓冲区中对应八叉树的结构和其叶子???点。
void switchBuffers()
交换缓冲区,并重设八叉树结构。
void serializeTree(std::vectorchar binaryTreeOut_arg, bool doXOREncoding_arg=false)
串行化输出八叉树结构到binaryTreeOut_arg向量,doXOREncoding_arg设置输出时是否将当前缓冲区与后台缓冲区中数据进行异或操作后再输出,异或操作是两个八叉树结构之间差异数据的输出。;void serializeTree(std::vectorchar binaryTreeOut_arg, std::vectorDataT dataVector_arg, bool doXOREncoding_arg=false)
串行化重载函数,其中参数dataVector_arg存储八叉树中叶子节点上的数据,其他两个参数同上。
void serializeLeafs(std::vectorDataT dataVector_arg)
参数dataVector_arg存储八叉树中叶子节点上的数据,该函数只串行化八叉树中的数据。
void serializeNewLeafs(std::vectorDataT dataVector_arg, const int minPointsPerLeaf_arg=0)
串行化当前缓冲区八叉树中存在但在后台缓冲区八叉树中不存在的节点数据,其中,minPointsPerLeaf_arg为需要串行化的节点中点的最小个数,如果点个数小于该值则不串行化此新节点。;void deserializeTree(std::vectorcha
文档评论(0)