首页 > 解决方案 > 在 python 3.x 上使用 pydicom 的 pixel_array 问题

问题描述

我正在使用pydicompip3在python 3.7上安装,使用Idle),我需要访问pixel_array值。

我只是将提供的示例复制粘贴到文档中,这会导致两个错误:

我已经解决了这个问题,而不是使用这个操作。

这是我的代码:

import matplotlib.pyplot as plt
import sys
import pydicom
import numpy
from pydicom.data import get_testdata_files

print(__doc__)
#filename = get_testdata_files("bmode.dcm")[0]
filename = "bmode.dcm"
dataset = pydicom.dcmread(filename)

# Normal mode:
print()
print("Filename.........:", filename)
print("Storage type.....:", dataset.SOPClassUID)
print()

pat_name = dataset.PatientName
display_name = pat_name.family_name + ", " + pat_name.given_name
print("Patient's name...:", display_name)
print("Patient id.......:", dataset.PatientID)
print("Modality.........:", dataset.Modality)
print("Study Date.......:", dataset.StudyDate)

if 'PixelData' in dataset:
    rows = int(dataset.Rows)
    cols = int(dataset.Columns)
    print("Image size.......: {rows:d} x {cols:d}, {size:d} bytes".format(
        rows=rows, cols=cols, size=len(dataset.PixelData)))
    if 'PixelSpacing' in dataset:
        print("Pixel spacing....:", dataset.PixelSpacing)


# use .get() if not sure the item exists, and want a default value if missing
print("Slice location...:", dataset.get('SliceLocation', "(missing)"))

# plot the image using matplotlib
plt.imshow(dataset.pixel_array, cmap=plt.cm.bone)
plt.show()

你能帮我解决这两个错误并访问 pixel_array 值吗?不要犹豫,给我一些建议/备注/...

谢谢!

标签: arrayspython-3.xpydicom

解决方案


嗨,马克欢迎来到 SO!

您的第一个错误意味着get_testdata_files返回一个空列表,因此找不到您的文件。查看pydicom 源代码,它显示在[DATA_ROOT]/test_files. 您的文件是否位于该路径中?

您的第二个错误与 PIL 有关,并且很难调试和修复。首先尝试从提供的测试文件pixel_array之一创建的数据集中读取。如果可行,您的问题可能是 PIL 无法处理图像数据的特定编码。您想安装和使用 GDCM而不是 PIL 以查看是否可以解决问题。另一个用户遇到了和你类似的问题,GDCM 解决了这个问题。不幸的是,开始工作可能有点让人头疼。或者看看这个页面,它显示了查看图像数据的其他一些选择。


推荐阅读