【问题标题】:How access to a single NumPy array in a DICOMDIR file with pydicom?如何使用 pydicom 访问 DICOMDIR 文件中的单个 NumPy 数组?
【发布时间】:2012-04-25 03:52:45
【问题描述】:

我将 DICOM 与 Python 和 Pydicom 库一起使用,当我使用 .dcm 文件时,我没有遇到任何问题。但我现在使用的是 DICOMDIR 数据集。

我的代码是下一个:

ds = dicom.read_file("dicomdir")

我尝试访问pixel_array元素如下:

data = ds.pixel_array

我得到下一个错误:TypeError: No pixel data found in this dataset.

print ds 的输出或多或少是下一个:

(0004, 1130) 文件集 ID CS: 'GEMS_11_10_111' (0004, 1200) 第一个目录记录的偏移量 UL:412 (0004, 1202) 最后一个目录记录的偏移量 UL: 412 (0004, 1212) 文件集一致性标志 US: 0 (0004, 1220) 目录记录序列 7 项 ---- (0004, 1400) 下一个目录记录 UL 的偏移量:0 (0004, 1410) 记录使用中标志美国:65535 (0004, 1420) 参考低级 Di UL 的偏移量:558 (0004, 1430) 目录记录类型 CS:“患者” (0008, 0005) 特定字符集 CS: 'ISO_IR 100' (0010, 0010) 患者姓名 PN: '-----------------' (0010, 0020) 患者 ID LO:“246992” (0010, 0030) 患者出生日期 DA: '19630523' (0010, 0040) 患者性别 CS:'F'


(0004, 1400) 下一个目录记录 UL 的偏移量:0 (0004, 1410) 记录使用中标志美国:65535 (0004, 1420) 参考低级 Di UL 的偏移量:800 (0004, 1430) 目录记录类型 CS:“研究” (0008, 0005) 特定字符集 CS: 'ISO_IR 100' (0008, 0020) 学习日期 DA: '20111011' (0008, 0030) 学习时间 TM: '151535.000000' (0008, 0050) 登录号 SH: '1009819901' (0008, 1030) 研究说明 LO: 'MG CONVENCIONAL' (0020, 000d) 研究实例 UID UI:1.2.840.113564.9.1.2005121220021252.20110608105548.21009819901 (0020, 0010) 研究 ID SH: '1009819901'


(0004, 1400) 下一个目录记录 UL 的偏移量:0 (0004, 1410) 记录使用中标志美国:65535 (0004, 1420) 参考低级 Di UL 的偏移量:968 (0004, 1430) 目录记录类型 CS:'SERIES' (0008, 0005) 特定字符集 CS: 'ISO_IR 100' (0008, 0060) 模态 CS: 'MG' (0008, 103e) 系列说明 LO:“屏幕保存” (0020, 000e) 系列实例 UID UI:1.2.840.113619.2.144.2347322947.2192645372.5 (0020, 0011) 系列号是:'354'


(0004, 1400) 下一个目录记录的偏移量 UL: 1298 (0004, 1410) 记录使用中标志美国:65535 (0004, 1420) 参考低级 Di UL 的偏移量:0 (0004, 1430) 目录记录类型 CS:“图像” (0004, 1500) 参考文件 ID CS: ['DICOM', 'PA1', 'ST1', 'SE1', 'IM1'] (0004, 1510) 文件 UI 中引用的 SOP 类 UID:辅助捕获图像存储 (0004, 1511) 文件 UI 中引用的 SOP 实例 UID:1.2.840.113619.2.144.44653394.14990.1318380911.86 (0004, 1512) F UI 中引用的传输语法 UID:显式 VR Little Endian (0008, 0005) 特定字符集 CS: 'ISO_IR 100' (0008, 0008) 图像类型 CS: 'DERIVED' (0008, 0023) 内容日期 DA: '20111011' (0008, 0033) 内容时间 TM: '151909.000000' (0020, 0013) 实例编号 IS: '8844' (0028, 0010) 美国行数:2298 (0028, 0011) 列美国:1980 (0028, 1052) 重新调整截距 DS: '0' (0028, 1053) 重新调整斜率 DS:'1'


最后一部分重复了四次。我的 DICOMDIR 数据集中有 4 张图像。

你知道如何使用 Numpy Array 访问每个图像的字段吗?

【问题讨论】:

  • 注意到您在pydicom user forum 中提出了同样的问题。为了完整起见,如果您能在 SO 上提供此答案的副本,那就太好了。
  • @AndersGustafsson 没问题,你说的很对。

标签: python numpy dicom pydicom


【解决方案1】:

我在 Suever 的 Pydicom 用户论坛上收到了答复:

DICOMDIR 文件不包含任何像素信息,而是包含基本标题信息以及数据集中每个文件的路径。为了从每个图像中获取像素数据,您必须遍历 dicomdir 数据集以获取各个 dicom 文件(相对于当前目录)的文件路径,然后从每个单独的 dicom 加载像素数据文件。

一个简单的方法是(可能有更好的方法)

    ds = dicom.read_file("dicomdir")
    pixel_data = list()
    for record in ds.DirectoryRecordSequence:
        if record.DirectoryRecordType == "IMAGE":
        # Extract the relative path to the DICOM file
            path = os.path.join(*record.ReferencedFileID)
            dcm = dicom.read_file(path)

            # Now get your image data
            pixel_data.append(dcm.pixel_array)

它有效;)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多