Open3D 从体素网格构建八叉树
一、主要函数
1、体素网格
关于体素网格,见:Open3D 点云和三角网的体素化
2、从体素网格构建八叉树
函数create_from_voxel_grid(voxel_grid)
从Open3D的VoxelGrid
几何结构中构造八叉树。 输入VoxelGrid的每个体素都被视为3D空间中的一个点,其坐标对应于该体素的原点。 每个叶节点都采用其相应体素的颜色。
3、从八叉树构建体素网格
函数to_voxel_grid()
将octree
转化为VoxelGrid
二、代码实现
python
import open3d as o3d
import numpy as np
pcd = o3d.io.read_point_cloud("tree.pcd")
# 点云归一化到单位立方体中
pcd.scale(1 / np.max(pcd.get_max_bound() - pcd.get_min_bound()),
center=pcd.get_center())
o3d.visualization.draw_geometries([pcd])
# 从点云中创建体素网格
print('voxelization')
voxel_grid = o3d.geometry.VoxelGrid.create_from_point_cloud(pcd,
voxel_size=0.01)
# 可视化体素网格
o3d.visualization.draw_geometries([voxel_grid])
# 初始化八叉树,最大树深设置为4
octree = o3d.geometry.Octree(max_depth=4)
# 从体素网格中构建八叉树
octree.create_from_voxel_grid(voxel_grid)
# 可视化八叉树
o3d.visualization.draw_geometries([octree])
# 从八叉树转换成网格
voxel_g = octree.to_voxel_grid().create_from_point_cloud(pcd,
voxel_size=0.01)
# 可视化体素网格
o3d.visualization.draw_geometries([voxel_g])