首页 > 解决方案 > STL文件的体素化;写入 np.array

问题描述

我想体素化一个 .stl 文件并将其写入 np.array。体素的分辨率应该是可调的。这是我的代码:

component_path = r"C:\Users\User\documents\components\Test_1.stl"
mesh = o3d.io.read_triangle_mesh(component_path)

voxel_grid = o3d.geometry.VoxelGrid.create_from_triangle_mesh(mesh, voxel_size = 3)
ply_path = "voxel.ply"
o3d.io.write_voxel_grid(ply_path, voxel_grid, True,True,True)

pcd = o3d.io.read_point_cloud(ply_path)
list_path = "list.xyz"

o3d.io.write_point_cloud(list_path, pcd)

然后我从列表中读取坐标点,将它们写入 3D 数组并绘制它们。绘图时,对于某些体素大小,不显示边界,如图像中所示(尽管它存在于原始图像中)。有没有解决方案,无论体素大小如何都不会发生?

缺少边框的体素化图片

此外,体素大小会改变最大维度。因此,组件最初的长度是此处显示的三倍。这个怎么调整?(如果我只是乘以一个因子,体素会保持很小,但会拉开距离)。

是否有更合理的方法来编写 .stl 文件的体素化并将体素的中心放入 np.array 中?

标签: python3dmeshvoxel3d-modelling

解决方案


如果有人遇到同样的问题并正在寻找解决方案:这个项目对我有用:GitHub:stl-to-voxel

然后模型也被填充。如果最大尺寸已知,您可以通过分辨率确定确切的体素大小。

这是一些代码:

import stl_reader
import stltovoxel
import numpy as np
import copy
import os
import sys

input=r"C:\Users\user\Example.stl"
output=r"C:\Users\user\Test.xyz"
resolution = 50 #Resolution, into how many layers the model should be divided
stltovoxel.doExport(input, output, resolution)

之后,您可以从列表中读取坐标,将它们写入数组并进一步处理它们(很正常)。


推荐阅读