open3d 构建OC-Tree
一、算法原理
1.OC-Tree 介绍
八叉树是一种树数据结构,其中每个内部节点有八个子节点。八叉树通常用于对3D点云进行空间分区。八叉树的非空叶节点包含落入相同空间子区域内的一个或多个点。八叉树是对3D空间的一种有用描述,可以用于快速查找附近的点。Open3D具有几何类型的Octree,可以用于创建、搜索和遍历八叉树,并具有用户指定的最大树深度max_depth。
2.算法实现
主要函数
# 创建八叉树
octree = o3d.geometry.Octree(max_depth=9)
# 从点云中构建八叉树,适当扩展边界0.001m
octree.convert_from_point_cloud(pcd, size_expand=0.001)
可以使用convert_from_point_cloud方法从点云构建八叉树。每个点被插入到树中,方法是从根节点到深度为max_depth的适当叶节点的路径。随着树深度的增加,内部(最终是叶)节点表示3D空间的较小分区。
如果点云具有颜色,则相应的叶节点将采用最后插入点的颜色。size_expand参数增加根八叉树节点的大小,使其略大于原始点云边界,以容纳所有点。
二、代码
import numpy as np
import open3d as o3d
if __name__ == '__main__':
pcd = o3d.io.read_point_cloud("res/bunny.pcd")
points = np.asarray(pcd.points)
N = len(points) # 获得数组的大小 len(points)
# 点云随机着色
pcd.colors = o3d.utility.Vector3dVector(np.random.uniform(0, 1, size=(N, 3)))
# 可视化点云
o3d.visualization.draw_geometries([pcd], window_name="原始点云")
# 创建八叉树, 树深为9
octree = o3d.geometry.Octree(max_depth=9)
# 从点云中构建八叉树,适当扩展边界0.001m
octree.convert_from_point_cloud(pcd, size_expand=0.001)
# 可视化八叉树
o3d.visualization.draw_geometries([octree], window_name="可视化八叉树")
三、结果
1.原点云
2.构建OC-Tree
四、相关数据
OC-Tree:Open3d之八叉树(Octree)_三维空间八叉树-CSDN博客
open3d官方:Octree - Open3D 0.18.0 documentation
OC-Tree:Open3D 从点云中构建八叉树_根据空间点构造八叉树-CSDN博客
百度网盘数据集:
包括 obj
,pcd
,las
,png
,ply
等
百度网盘链接:https://pan.baidu.com/s/1JFxKUk_xMcEmpfBHtuC-Pg
提取码:cpev