STL文件的体素化;写入 np.array

Voxelization of STL-file; writing into 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 数组并绘制它们。绘图时,某些体素尺寸不会显示边框,如图像中所示(尽管它存在于原始图像中)。是否有解决方案,无论体素大小如何,都不会发生这种情况?

voxelized picture with missing border

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

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

如果有人遇到同样的问题并且正在寻找解决方案: 这个项目对我有用: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)

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