python - 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 中?
解决方案
如果有人遇到同样的问题并正在寻找解决方案:这个项目对我有用: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)
之后,您可以从列表中读取坐标,将它们写入数组并进一步处理它们(很正常)。
推荐阅读
- heroku - 创建后如何在 Heroku 平台托管 Botpress 聊天机器人?
- python - 将 API JSON 数据发送到 Exasol DB 表
- python - 带有 np.where、while 循环或嵌套 if 语句的条件变量
- angular - Angular中的混合位置策略
- angular - 如何在 Angular 7 中显示 5 分钟的剩余会话警报和显示会话过期的警报?
- r - 从 R 中的数据库模式中提取表列表
- linux - 将两个文件夹位置合二为一
- python - 在 Python 中展平或序列化数据以使其仅包含数据字节的适当方法是什么?
- reactjs - 当我在 Visual Studio/IIS 中运行时在客户端应用程序上使用文件保护程序时,为什么我的 .Net Core 3.1 API/SPA 突然停止?
- database - postgres - 转换 .dat.gz 文件 .sql 文件?