open3d提供了一个专门用于体素的数据结构 VoxelGrid。
class VoxelGrid(Geometry3D):
origin # 起始位置,最小的体素位置
voxel_size # 体素尺寸
def __init__(self, *args, **kwargs):
"""
__init__(*args, **kwargs)
Overloaded function.
1. __init__(self: open3d.cpu.pybind.geometry.VoxelGrid) -> None
Default constructor
2. __init__(self: open3d.cpu.pybind.geometry.VoxelGrid, arg0: open3d.cpu.pybind.geometry.VoxelGrid) -> None
Copy constructor
"""
def carve_depth_map(self, depth_map, camera_params, keep_voxels_outside_image=False):
def carve_silhouette(self, silhouette_mask, camera_params, keep_voxels_outside_image=False):
# 点是否包含在体素中。 输入(n, 3)数组
def check_if_included(self, queries):
def create_dense(self, origin, color, voxel_size, width, height, depth):
def create_from_octree(self, octree):
# 从点云创建体素。 体素颜色为体素内所有点的均值。
def create_from_point_cloud(self, input, voxel_size):
def create_from_point_cloud_within_bounds(self, input, voxel_size, min_bound, max_bound):
# 从三角形网格创建体素。 所有与三角网格相交的体素均设置为1,其余设置为0。
def create_from_triangle_mesh(self, input, voxel_size):
def create_from_triangle_mesh_within_bounds(self, input, voxel_size, min_bound, max_bound):
def get_voxel(self, point):
def get_voxels(self):
def has_colors(self):
def has_voxels(self):
def to_octree(self, max_depth):
import numpy as np
import open3d as o3d
from open3d.web_visualizer import draw
from open3d.visualization import draw_geometries
pcd = o3d.io.read_point_cloud('datas/knot.ply')
draw(pcd)
voxel_grid = o3d.geometry.VoxelGrid()
voxel_grid=voxel_grid.create_from_point_cloud(pcd, voxel_size=2)
draw(voxel_grid)


mesh = o3d.io.read_triangle_mesh('datas/knot.ply')
draw(mesh)


voxel_grid = o3d.geometry.VoxelGrid()
voxel_grid = voxel_grid.create_from_triangle_mesh(mesh, voxel_size=3)
draw(voxel_grid)

