PCL中Octree模块中类的说明

文章目录

      • 1. class Octree2BufBase
      • 2. class OctreeBase
      • 3. class OctreeContainerBase
      • 4. class OctreeIteratorBase
      • 5. class OctreeKey
      • 6. class OctreeNodePool
      • 7. class OctreeNode
      • 8. class OctreePointCloud
      • 9. class OctreePointCloudAdjacency
      • 10. class OctreePointCloudAdjacencyContainer
      • 11. class OctreePointCloudChangeDetector
      • 12. class OctreePointCloudDensity
      • 13. class OctreePointCloudOccupancy
      • 14. class OctreePointCloudPointVector
      • 15. class OctreePointCloudSinglePoint
      • 16. class OctreePointCloudVoxelCentroid
      • 17. class OctreePointCloudSearch

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

1. class Octree2BufBase

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

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

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

2 setTreeDepth

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

3 createLeaf

创建一个新的叶节点

4 findLeaf

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

5 existLeaf

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

6 removeLeaf

删除xyz对应的叶节点

7 getLeafCount

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

8 getBranchCount

获取八叉树的分支数目

9 deleteTree

删除当前的八叉树

10 deletePreviousBuffer

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

11 deleteCurrentBuffer

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

12 switchBuffers

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

13 serializeTree

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

14 serializeTree

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

15 serializeLeafs

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

16 serializeNewLeafs

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

17 deserializeTree

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

18 switchBuffers

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

2. class OctreeBase

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

3. class OctreeContainerBase

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

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

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

2 getPointIndex

获取容器中点的index

3 getPointIndices

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

4. class OctreeIteratorBase

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

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

初始化迭代器

2 getCurrentOctreeKey

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

3 getCurrentOctreeDepth

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

4 getCurrentOctreeNode

获取当前八叉树节点

5 isBranchNode

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

6 isLeafNode

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

7 getNodeConfiguration

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

8 getLeafContainer

获取八叉树中单叶节点

9 getBranchContainer

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

10 getNodeID

获取当前节点的唯一标识

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

5. class OctreeKey

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

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

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

2 popBranch

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

3 getChildIdxWithDepthMask

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

6. class OctreeNodePool

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

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

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

2 popNode

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

3 deletePool

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

7. class OctreeNode

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

8. class OctreePointCloud

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

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

设置八叉树管理的点云

2 getIndices

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

3 getInputCloud

获取点云数据集合的指针

4 setEpsilon

设置近邻搜索时的误差限

5 getEpsilon

获取近邻搜索时的误差限

6 setResolution

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

7 getResolution

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

9 getTreeDepth

获取八叉树的最大深度

10 addPointsFromInputCloud

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

11 addPointFromCloud

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

12 addPointToCloud

添加点point_arg到点云cloud_arg中

13 isVoxelOccupiedAtPoint

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

14 deleteTree

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

15 getOccupiedVoxelCenters

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

16 getApproxIntersectedVoxelCentersBySegment

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

17 deleteVoxelAtPoint

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

18 defineBoundingBox

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

19 getBoundingBox

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

20 getVoxelSquaredDiameter

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

21 getVoxelSquaredSideLen

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

22 enableDynamicDepth

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

9. class OctreePointCloudAdjacency

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

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

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

2 setTransformFunction

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

3 testForOcclusion

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

4 computeNeighbors

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

5 genOctreeKeyforPoint

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

10. class OctreePointCloudAdjacencyContainer

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

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

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

2 getPointCounter

获取对此叶有贡献的点数

3 getData

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

4 setData

设置成员变量data_

5 getSize

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

11. class OctreePointCloudChangeDetector

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

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

12. class OctreePointCloudDensity

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

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

13. class OctreePointCloudOccupancy

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

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

14. class OctreePointCloudPointVector

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

15. class OctreePointCloudSinglePoint

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

16. class OctreePointCloudVoxelCentroid

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

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

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

2 getVoxelCentroids

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

3 getVoxelCentroidsRecursive

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

17. class OctreePointCloudSearch

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

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

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

2 nearestKSearch

近邻搜索

3 approxNearestSearch

近似近邻搜索

4 radiusSearch

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

5 getIntersectedVoxelCenters

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

6 getIntersectedVoxelIndices

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

7 boxSearch

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

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

你可能感兴趣的:(PCL库,pcl)