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

问题描述 投票:0回答:1

我从这里下载了一个示例 .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

python numpy slice 3d-model
1个回答
0
投票

您将无法仅将

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

但是,您尝试加载的模型包含一个多边形网格。这意味着您只有顶点的坐标值。您可以在文本编辑器中打开

.stl
文件以查看其内容。 (通过将加载的网格转换为 numpy 数组,您只需提取这些坐标值。您实际上可以比较 numpy 数组和文本文件中的值,它们是相同的。)生成的 numpy 数组具有形状
(550, 9)
。第一个维度由模型中的面数定义(在本例中,模型有 550 个面)。由于每个面都有三个顶点,每个顶点都有三个坐标值,因此每个面有 9 个数字。所以三维度并没有丢失。它只是以不同的方式存储。

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

© www.soinside.com 2019 - 2024. All rights reserved.