加载3D模型但在Python中获取2D数组

时间:2018-07-05 11:42:27

标签: python numpy stl slice 3d-model

我已经从此处下载了一个示例.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

1 个答案:

答案 0 :(得分:0)

您将无法仅将.stl文件加载到numpy数组中并执行切片,如链接的视频所示。在视频中,他们加载了存储为3D numpy数组的模型。

但是,您要加载的模型由多边形网格组成。这意味着您只有顶点的坐标值。您可以在文本编辑器中打开.stl文件以查看其内容。 (通过将加载的网格转换为numpy数组,您只需提取这些坐标值。您实际上可以将numpy数组中的值与文本文件中的值进行比较,它们是相同的。)所得的numpy数组的形状为(550, 9)。第一维由模型中的面数定义(在这种情况下,模型有550个面)。由于每个面都有三个顶点,每个顶点都有三个坐标值,因此每个面有9个数字。因此,第三维没有丢失。只是以不同的方式存储。

简单地重塑数组将不会为您创建一个可以切片的模型,如视频所示。为此,必须将网格化模型转换为栅格化模型。为此,您可以初始化一个包含整个模型的空3D数组,然后确定每个像素是否与您加载的网格的几何形状相交。