首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将STL文件转换为numpy数组,并将其格式化为覆盖Dicom数据?

如何将STL文件转换为numpy数组,并将其格式化为覆盖Dicom数据?
EN

Stack Overflow用户
提问于 2021-06-03 03:07:21
回答 2查看 462关注 0票数 1

我有3D对象的STL文件,我已经使用numpy-stl包将它们转换为网格对象和numpy数组。我还使用pydicom包将DCM数据转换为numpy数组,但是STL文件的numpy数组版本的大小(numpyarray.shape)为4280,这与DCM数据的256*256维度不匹配。此外,每个STl文件的numpy数组的数据类型都包括向量和法线值,我不知道如何解析它们。任何关于维度不匹配的见解或STL numpy数组的数据类型的解释都将不胜感激,我已经附上了numpy数组形式的DCM和STL数据的图片。

DCM to numpy array STL to numpy array

EN

回答 2

Stack Overflow用户

发布于 2021-06-03 03:24:08

我将在这里建议您采取一种稍微不同的方法-而不是尝试在numpy中处理原始dicom和STL数据,将dicom转换为PNG,然后在其上覆盖STL。

所以首先创建DICOM PNG-

代码语言:javascript
复制
import numpy as np
import png
import pydicom

ds = pydicom.dcmread(path)

shape = ds.pixel_array.shape

# Convert to float to avoid overflow or underflow losses.
image_2d = ds.pixel_array.astype(float)

# Rescaling grey scale between 0-255
image_2d_scaled = (np.maximum(image_2d,0) / image_2d.max()) * 255.0

# Convert to uint
image_2d_scaled = np.uint8(image_2d_scaled)

# Write the PNG file
with open(destination, 'wb') as png_file:
    w = png.Writer(shape[1], shape[0], greyscale=True)
    w.write(png_file, image_2d_scaled)

我从一个previous comment I made借来了这段代码。我想明确指出的一件事是转换成浮点数--看你的示例图像,它看起来像是整数,这意味着你从DICOM中丢失了大量数据,这会使你的输出变得更糟。

下一步是获取STL文件的平面版本,您可以将其放在图像的顶部。我不打算深入讨论这一点,而是建议您使用具有“扁平化”功能的numpy-stl库来实现此目的。该包中的示例应该对完成这项工作非常有帮助。

票数 0
EN

Stack Overflow用户

发布于 2021-06-05 03:15:27

如果你曾经做过3D打印,你就会知道你想把你的STL对象切成切片,就像Robert Hafner建议的那样。

首先,您需要确保您的STL对象与您的Dicom卷对齐,这可能很困难,也可能不困难,但却是必要的。然后将STL切成256个切片,就像你要3D打印它一样,输出256 x 256图像,现在你得到256个256 x 256像素的图像。因为它是在切片之前对齐的,所以你可以使用这些图像作为你的掩码,如果需要的话,对它们进行阈值处理。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67811092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档