open3d之Octree有关函数详情(笔记7)

八叉树是一种树数据结构,其中每个内部节点都有八个子节点。八叉树通常用于 3D 点云的空间划分。八叉树的非空叶节点包含一个或多个落入同一空间细分的点。八叉树是 3D 空间的有用描述,可用于快速找到附近的点。Open3D 具有几何类型八叉树,可用于创建、搜索和遍历具有用户指定的最大树深度 max_depth 的八叉树。

From point cloud

可以使用 convert_from_point_cloud 方法从点云构建八叉树。通过从根节点到深度为 max_depth 的适当叶节点的路径将每个点插入到树中。随着树深度的增加,内部(最终是叶)节点代表 3D 空间的较小分区。

如果点云有颜色,则对应的叶节点采用最后插入点的颜色。size_expand 参数增加了根八叉树节点的大小,使其略大于原始点云边界以容纳所有点。

open3d.geometry.Octree

convert_from_point_cloud(selfpoint_cloudsize_expand=0.01)

函数功能:

从点云转换为八叉树

参数:

point_cloud (open3d.geometry.PointCloud)输入的点云

size_expand (float, optional, default=0.01)一个小的扩展尺寸,使得八叉树略大于原始点云边界以容纳所有点

返回:

None


From voxel grid

也可以使用方法 create_from_voxel_grid(在笔记6中已经做过笔记) 从 Open3D VoxelGrid 几何构造八叉树。输入 VoxelGrid 的每个体素都被视为 3D 空间中的一个点,其坐标对应于体素的原点。每个叶节点采用其对应体素的颜色。

open3d.geometry.Octree

create_from_voxel_grid(self)

函数功能:

参数:

返回:

None

 此外,可以使用 to_voxel_grid 将八叉树转换为 VoxelGrid。

open3d.geometry.Octree

to_voxel_grid(self)

函数功能:

转换为体素网格

参数:

返回:

open3d.geometry.VoxelGrid


遍历(Traversal)0

可以遍历八叉树,这对于搜索或处理 3D 几何的子部分很有用。通过为 traverse 方法提供回调,每次访问节点(内部或叶子)时,都可以执行额外的处理。

提前停止标准用于仅处理具有超过一定数量的点的内部/叶节点。这种早期停止能力可用于有效处理满足某些条件的空间区域。

class open3d.geometry.OctreeInternalNode

介绍:

OctreeInternalNode 类,包含 OctreeNode 子级。

方法:

__init__(*args, **kwargs)重载功能

   1. __init__(self):默认构造函数

   2. __init__(self, arg0):复制构造函数

      arg0 (open3d.geometry.OctreeInternalNode)

get_init_function()→Callable[], open3d.geometry.OctreeInternalNode]获取用于初始化 OctreeInternalNode 的 lambda 函数。调用 init 函数时,会创建一个空的 OctreeInternalNode

get_update_function()→Callable[[open3d.geometry.OctreeInternalNode], None]获取用于更新 OctreeInternalNode 的 lambda 函数。这个更新函数什么都不做

属性:

children子节点列表

class open3d.geometry.OctreePointColorLeafNode

介绍:

OctreePointColorLeafNode 类是一个包含颜色的 OctreeLeafNode。

方法:

__init__(*args, **kwargs):重载功能

1.__init__(self:open3d.cpu.pybind.geometry.OctreePointColorLeafNode) -> None

:默认构造函数

   2. __init__(self: open3d.geometry.OctreePointColorLeafNode, arg0: open3dgeometry.OctreePointColorLeafNode) -> None复制构造函数

get_init_function()Callable[], open3d.geometry.OctreeLeafNode]获取用于初始化 OctreeLeafNode 的 lambda 函数。调用 init 函数时,会创建一个空的 OctreePointColorLeafNode。

get_update_function(idx: int, color: numpy.ndarray[numpy.float64[3, 1]]) → Callable[[open3d.geometry.OctreeLeafNode], None]获取用于更新 OctreeLeafNode 的 lambda 函数。调用时,更新函数使用新的点索引和输入颜色更新相应的节点。

属性:

color节点颜色

indices此叶节点中包含的点云点索引列表

open3d.geometry.Octree

traverse(self: open3d.geometry.Octree, f: Callable[[open3d.geometry.OctreeNode, 

open3d.geometry.OctreeNodeInfo], bool])→None

函数功能:

DFS从根开始遍历八叉树,每个节点调用一个回调函数f

参数:

返回:


查找包含点的叶节点

上述遍历机制,可以快速搜索八叉树中包含给定点的叶子节点。此功能是通过 locate_leaf_node 方法提供的。

open3d.geometry.Octree

locate_leaf_node(selfpoint)

函数功能:

返回查询点应驻留的叶子 OctreeNode 和 OctreeNodeInfo

参数:

point (numpy.ndarray[numpy.float64[3, 1]])点坐标

返回:

Tuple[open3d.geometry.OctreeLeafNode,open3d.geometry.OctreeNodeInfo]

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值