如何将二进制VoxelGrid(Numpy三维数组)转换为Open3D体素格式?
NumPy二进制体素数组转Open3D格式解决方案
转Open3D体素网格(实现类似体素兔子效果)
直接提取数组中值为1的体素坐标,创建Open3D的VoxelGrid对象并添加体素:
import numpy as np import open3d as o3d # 替换为你的二进制体素数组 voxel_array = np.zeros((24, 24, 100)) # 示例填充部分1 voxel_array[5:15, 5:15, 10:30] = 1 # 获取所有非零体素的坐标(numpy索引顺序对应x,y,z) x_idx, y_idx, z_idx = np.where(voxel_array == 1) # 定义体素大小与原点(原点偏移让体素中心对齐坐标) voxel_size = 1.0 origin = np.array([0.0, 0.0, 0.0]) - voxel_size / 2 voxel_grid = o3d.geometry.VoxelGrid.create_empty(voxel_size, origin) # 添加所有体素,可自定义颜色 for x, y, z in zip(x_idx, y_idx, z_idx): voxel_grid.add_voxel(o3d.geometry.Voxel(np.array([x, y, z]), color=[1.0, 0.0, 0.0])) # 实时可视化支持:修改数组后重复上述坐标提取和体素添加步骤即可更新 o3d.visualization.draw_geometries([voxel_grid])
转Open3D点云
将每个非零体素的中心坐标提取为点云的点:
# 计算体素中心坐标(加上体素大小的一半) points = np.vstack((x_idx, y_idx, z_idx)).T.astype(np.float64) + voxel_size / 2 # 创建点云对象并设置属性 pcd = o3d.geometry.PointCloud() pcd.points = o3d.utility.Vector3dVector(points) pcd.paint_uniform_color([0.0, 1.0, 0.0]) # 实时更新:修改数组后重新计算points并替换pcd.points即可 o3d.visualization.draw_geometries([pcd])
内容的提问来源于stack exchange,提问作者user_cr
相关产品推荐
相关产品推荐

