You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将二进制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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 02:10:27