PCL中Octree模块中类的说明

 前面已经简单讲解了八叉树的原理和PCL Octree模块的使用代码,链接为:
https://blog.csdn.net/CFH1021/article/details/121499140?spm=1001.2014.3001.5501
 原理和应用事例已经说明过了,毕竟Octree是PCL的一个模块,内容还是挺多的,特别是涉及到里面的类也有很多,那么今天就简单的说明一下:

1. class Octree2BufBase

 类Octree2BufBase实现了同时存储管理两个八叉树于内存中,因此,可以非常高效地实现八叉树的建立管理等操作,并且该类实现对邻近节点结构的变化探索,对应到空间点云,其就可以面对空间曲面的动态变化进行探索,在进行空间动态变化探索中非常有用,例如基于kinect设备的体感交互作用。

序号函数名称解释说明
1setMaxVoxelIndex

设置各维度上支持的最大体素格个数

2setTreeDepth

设置八叉树的最大深度,需要在初始化八叉树时进行设置

3createLeaf

创建一个新的叶节点

4findLeaf

根据坐标信息查找相应的叶节点,存在返回该节点指针,不存在返回nullptr

5existLeaf

判断xyz对应的叶节点是否存在,不存在返回false,存在返回true

6removeLeaf

删除xyz对应的叶节点

7getLeafCount

获取八叉树中的叶节点的数目

8getBranchCount

获取八叉树的分支数目

9deleteTree

删除当前的八叉树

10deletePreviousBuffer

删除另一个缓冲区中对应八叉树的结构及其叶节点

11deleteCurrentBuffer

删除当前缓冲区中对应的八叉树结构及其叶节点

12switchBuffers

交换缓冲区,并重新设置八叉树结构

13serializeTree

序列化八叉树结构到std::vector中,do_XOR_encoding_arg设置输出时是否将前缓冲区和后缓冲区中数据进行异或操作后再输出,异或操作是两个八叉树结构之间差异数据的输出

14serializeTree

序列化函数重载,其中参数leaf_container_vector_arg用于存储八叉树中叶节点上的数据,其余参数同上

15serializeLeafs

序列化重载,leaf_container_vector_arg用于存储八叉树中叶节点上的数据,该函数只序列化八叉树中的数据

16serializeNewLeafs

序列化当前缓冲区八叉树中存在但在后缓冲区八叉树中不存在的点数据

17deserializeTree

反序列化,将容器中的点云数据反序列到当前缓冲区的八叉树中

18switchBuffers

反序列化,将容器中的点云数据反序列到当前缓冲区的八叉树中

2. class OctreeBase

 类OctreeBase为八叉树的基类,其关键函数可参考上文。

3. class OctreeContainerBase

 类OctreeContainerBase为八叉树的容器类,是八叉树叶节点的基类。

序号函数名称解释说明
1addPointIndex

将一个点的index添加到该容器对象中,仅支持单点index存储

2getPointIndex

获取容器中点的index

3getPointIndices

获取容器中点的index,并将它存储到std::vector中

4. class OctreeIteratorBase

 类OctreeIteratorBase为八叉树迭代器的基类,用于深度优先或广度优先遍历八叉树时使用。

序号函数名称解释说明
1reset

初始化迭代器

2getCurrentOctreeKey

获取当前八叉树节点对应的迭代器的key值

3getCurrentOctreeDepth

获取当前八叉树迭代器对应节点所在的深度

4getCurrentOctreeNode

获取当前八叉树节点

5isBranchNode

判断当前节点是否为分支节点,是返回true,不是返回false

6isLeafNode

判断当前节点是否为叶节点,是返回true,不是返回false

7getNodeConfiguration

获取当前节点的设置对应的bit值

8getLeafContainer

获取八叉树中单叶节点

9getBranchContainer

获取八叉树分支节点的容器

10getNodeID

获取当前节点的唯一标识

备注:
  a. 类OctreeDepthFirstIterator、OctreeBreadthFirstIterator是继承于类OctreeIteratorBase,分别表示深度优先遍历、广度优先遍历迭代器,它们的关键成员函数可以参考类OctreeIteratorBase。
  b. 类OctreeFixedDepthIterator继承于类OctreeBreadthFirstIterator,表示以给定的深度来遍历所有的节点,并且是以广度优先进行遍历的。
  c. 类OctreeLeafNodeDepthFirstIterator是继承于类OctreeDepthFirstIterator,表示深度优先遍历的叶节点迭代器
  d. 类OctreeLeafNodeBreadthFirstIterator是继承于类OctreeBreadthFirstIterator,表示深度优先遍历的叶节点迭代器

5. class OctreeKey

 类OctreeKey,表示八叉树键包含每个坐标轴的整数索引,以寻址八叉树叶节点。

序号函数名称解释说明
1pushBranch

将一个子节点添加到八叉树key中

2popBranch

从八叉树key中去除一个子节点

3getChildIdxWithDepthMask

根据depthMask值,获取子节点的索引

6. class OctreeNodePool

 类OctreeNodePool,表示在快速生成八叉树时,减少内存分配和类实例化动作。

序号函数名称解释说明
1pushNode

在八叉树节点池中,添加一个节点

2popNode

在八叉树节点池中,取出一个节点

3deletePool

删除八叉树节点池中所有的节点

7. class OctreeNode

 类OctreeNode为抽象类,即八叉树的节点;它的派生类有类OctreeLeafNode和OctreeBranchNode。

8. class OctreePointCloud

 类OctreePointCloud为针对点云实现的八叉树数据结构,它的派生类有很多个,用于实现不同的点云处理或操作。

序号函数名称解释说明
1setInputCloud

设置八叉树管理的点云

2getIndices

获取点云中每一点对应的索引的容器vector

3getInputCloud

获取点云数据集合的指针

4setEpsilon

设置近邻搜索时的误差限

5getEpsilon

获取近邻搜索时的误差限

6setResolution

设置为点云建立的八叉树结构的分辨率,即体素的大小

7getResolution

获取为点云建立的八叉树结构的分辨率,即体素的大小

9getTreeDepth

获取八叉树的最大深度

10addPointsFromInputCloud

将点云中的点,添加到八叉树中进行管理

11addPointFromCloud

添加对应索引中的点到八叉树中进行管理

12addPointToCloud

添加点point_arg到点云cloud_arg中

13isVoxelOccupiedAtPoint

判断点所处的空间是否存在与八叉树体素中

14deleteTree

删除八叉树数据结构和它的所有叶节点

15getOccupiedVoxelCenters

获取所有被点云占据的体素的中心,并存储在voxel_center_list_arg中,返回值为被占数据的体素个数

16getApproxIntersectedVoxelCentersBySegment

用参数origin和end给定空间一线段,该函数求得与改线段相交的体素中心,存储在voxel_center_list,并返回相交体素的个数

17deleteVoxelAtPoint

删除指定点所在的八叉树所管理的体素或叶子节点

18defineBoundingBox

指定八叉树的包围盒,参数为三个维度的上下限,八叉树中一旦存储管理元素了,则包围盒大小就不能再改变

19getBoundingBox

获取八叉树的包围盒,即三维度的上下限

20getVoxelSquaredDiameter

获取八叉树中指定深度对应体素的内切圆的直径

21getVoxelSquaredSideLen

获取八叉树中指定深度对应体素的立方体的变长

22enableDynamicDepth

启用动态八叉树结构,叶节点尽可能靠近根节点,并且仅当叶节点中的DataT对象数量超过固定限制时才展开

9. class OctreePointCloudAdjacency

 类OctreePointCloudAdjacency继承于OctreePointCloud类八叉树,该八叉树用于维护其体素元的邻接信息。其边界框将自动调整或可以预定义。

序号函数名称解释说明
1computeVoxelAdjacencyGraph

计算体素元关系的邻接图,当边缘范围变大 ,点云数据变多,其速度是会下降的。

2setTransformFunction

设置转换函数,这对于更改计算邻接度的方式非常有用,例如,对于距离摄影机较远的点,放宽邻接标准

3testForOcclusion

测试输入点是否被其他体素从指定摄影机点遮挡,true,表示挡住;false表示未挡住

4computeNeighbors

填充新体素的“邻居”字段

5genOctreeKeyforPoint

为指定点生成八叉树键(如果提供,则使用转换)

10. class OctreePointCloudAdjacencyContainer

 类OctreePointCloudAdjacencyContainer继承于类OctreeContainerBase,是类OctreePointCloudAdjacency的容器。在叶节点增加了存储邻接叶的指针。

序号函数名称解释说明
1getNumNeighbors

获取当前叶节点有多少个邻节点的个数

2getPointCounter

获取对此叶有贡献的点数

3getData

返回对数据成员的引用,以便在不复制的情况下访问它

4setData

设置成员变量data_

5getSize

获取添加到叶节点容器的点数

11. class OctreePointCloudChangeDetector

 类OctreePointCloudChangeDetector继承于OctreePointCloud的八叉树,该八叉树由新增加的叶子节点组成,该八叉树分辨率需要初始化,包围盒可自适应调整。

序号函数名称解释说明
1getPointIndicesFromNewVoxels获取缓存区中新添加的叶子节点

12. class OctreePointCloudDensity

 类OctreePointCloudDensity继承于类OctreePointCloud的八叉树,该八叉树的其叶节点并非存储点云,只是对处于其叶节点中的点云个数进行存储,即整个八叉树的叶节点存储了输入点云的密度空间分布。

序号函数名称解释说明
1getVoxelDensityAtPoint返回point_arg点所在的叶节点的密度,即点的个数

13. class OctreePointCloudOccupancy

 类OctreePointCloudOccupancy继承于类OctreePointCloud的八叉树,该八叉树的叶节点不存储任何数据,只是对输入点云所占的空间通过叶子所处的体素来进行标志,这样就可以对点云所占据空间的情况进行评估和检测。

序号函数名称解释说明
1setOccupiedVoxelAtPoint在点所在的空间为八叉树添加叶节点,标识有点云占据该叶节点所在的提速空间
1setOccupiedVoxelsAtPointsFromCloud在点集所在的空间为八叉树添加叶节点,标识有点云占据该叶节点所在的提速空间

14. class OctreePointCloudPointVector

 类OctreePointCloudPointVector继承于类OctreePointCloud的八叉树,该八叉树的叶节点,存储处在该节点体素中的点对应的索引向量。

15. class OctreePointCloudSinglePoint

 类OctreePointCloudSinglePoint继承于类OctreePointCloud的八叉树,该八叉树叶节点,存储在该节点体素中的单个点的索引。

16. class OctreePointCloudVoxelCentroid

 类OctreePointCloudVoxelCentroid继承于类OctreePointCloud的八叉树,该八叉树提供被电晕占据节点对应体素的中心坐标。

序号函数名称解释说明
1getVoxelCentroidAtPoint

返回指定节点对应的中心点坐标

2getVoxelCentroids

获取所有占用体素的中心点坐标

3getVoxelCentroidsRecursive

递归地探索八叉树,并为所有占用的体素输出中心点的坐标

17. class OctreePointCloudSearch

 ;类OctreePointCloudSearch继承于OctreePointCloud的八叉树,该八叉树用于基于八叉树的点云近邻高效搜索。

序号函数名称解释说明
1voxelSearch

通过给定点,确定其所在的体素,返回体素中所有点的索引

2nearestKSearch

近邻搜索

3approxNearestSearch

近似近邻搜索

4radiusSearch

获取指定点radius半径内的近邻点集

5getIntersectedVoxelCenters

给定经过点origin指向direction的直线,返回与该直线相交的点云对应八叉树的体素中心点组成的向量,返回值为相交体素个数

6getIntersectedVoxelIndices

功能同上,返回值存储相交体素的索引

7boxSearch

搜索处于指定立方体内的点集

注意:
  1. 以上所有类成员函数,仅说明函数名称表示的功能,为阐述其函数参数;
  2. 关于函数重载,它们的功能其实是相同的,只是传递的参数不同。关于参数的说明,可参考源码。

  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值