如何解决如何将 STL 文件转换为 numpy 数组并将其格式化以覆盖 Dicom 数据?
我有 3D 对象的 STL 文件,我使用 numpy-stl 包将它们转换为网格对象和 numpy 数组。我还使用 pydicom 包将 DCM 数据转换为 numpy 数组,但 STL 文件的 numpy 数组版本的大小 (numpyarray.shape) 为 4280,与 256*256 维度的 DCM 数据不匹配.此外,每个STl文件的numpy数组的数据类型包括向量和正常值,我不知道如何解决。对维度不匹配的任何见解或对 STL numpy 数组数据类型的解释将不胜感激,并且我附上了一张 DCM 和 numpy 数组形式的 STL 数据的图片。
DCM to numpy array STL to numpy array
解决方法
我将建议您在这里采用稍微不同的方法 - 而不是尝试在处理原始 dicom 和 STL 数据的 numpy 中完成这一切,将 dicom 转换为 PNG,然后将 STL 覆盖在它上面.
所以首先创建 DICOM PNG-
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 库,它具有用于此目的的“展平”功能。那个包上的例子应该对完成这个很有帮助。
,如果您曾经做过 3D 打印,您就会知道您想将 STL 对象切成薄片,正如 Robert Hafner 所建议的那样。
首先,您需要确保您的 STL 对象与您的 Dicom 音量对齐,这可能困难也可能不困难,但很有必要。然后将 STL 切成 256 个切片,就像您要 3D 打印它一样,将切片输出为 256 x 256 图像,现在您得到 256 个 256x256 像素的图像。由于它在切片之前已对齐,因此您可以将这些图像用作蒙版,并在必要时设置阈值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。