我从这里下载了一个示例 .stl 文件:[https://www.thingiverse.com/thing:156207]
然后我用这段代码来获取一个 numpy 数组,以便使用 matplotlib 进行进一步的图像处理:
import numpy as np
from stl import mesh
np.set_printoptions(threshold=np.nan)
# Using an existing stl file:
your_mesh = mesh.Mesh.from_file('300_polygon_sphere_100mm.stl')
data = np.array(your_mesh)
print(data.shape)
不幸的是,这是一个只有二维的数组。我已经用我的编辑器检查了 .stl 文件,有三个维度。
有人可以帮助我吗?我的目标是创建一个代码,我可以用它来切片 3D 模型以访问切片的 2D 图像。
谢谢。
编辑:我试图重塑它:
data_reshaped = np.reshape(data, (550, 3, 3))
但我想这完全错误。而且我不知道模式是否是(Z,X,Y(。
我想在 3D 数组上进行一些切片操作以获得 XY 图像,就像这家伙很容易做 https://www.youtube.com/watch?v=5jQVQE6yfio&list=PLT66ZlnovHPYzny9TYM1mx02k5Xnw_kjw&t=215s&index=3
您将无法仅将.stl
文件加载到numpy数组中并执行切片,如您链接的视频所示。在视频中,他们加载一个存储为 3D numpy 数组的模型。
但是,您尝试加载的模型由多边形网格组成。这意味着您只有顶点的坐标值。您可以在文本编辑器中打开.stl
文件以查看其内容。(通过将加载的网格转换为 numpy 数组,您只需提取这些坐标值。您实际上可以比较 numpy 数组和文本文件中的值,它们是相同的。生成的 numpy 数组具有形状(550, 9)
。第一个维度由模型中的面数定义(在本例中,模型有 550 个面(。由于每个面有三个顶点,每个顶点有三个坐标值,因此每个面有 9 个数字。所以第三个维度并没有丢失。它只是以不同的方式存储。
简单地重塑数组不会创建一个可以获取切片的模型,如视频所示。为此,您必须将网格模型转换为栅格化模型。为此,您可以初始化一个包含整个模型的空 3D 数组,然后确定每个像素是否与您加载的网格的几何体相交。