STL文件的Voxeization;写入np.array



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

component_path = r"C:UsersUserdocumentscomponentsTest_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)

然后我从列表中读取坐标点,将它们写入三维阵列并绘制它们。打印时,某些体素大小的边界不会显示,如图像中所示(尽管它存在于原始图像中(。有没有解决方案,无论体素大小如何,都不会发生这种情况?

具有缺失边界的体素化图片

此外,体素大小会更改最大尺寸。因此,组件最初的长度是这里显示的长度的三倍。如何调整?(如果我只是乘以一个因子,体素会保持较小,但会拉开距离(。

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

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

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

这里有一些代码:

import stl_reader
import stltovoxel
import numpy as np
import copy
import os
import sys
input=r"C:UsersuserExample.stl"
output=r"C:UsersuserTest.xyz"
resolution = 50 #Resolution, into how many layers the model should be divided
stltovoxel.doExport(input, output, resolution)

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

最新更新