如何使用pydicom访问DICOMDIR文件中的单个NumPy数组?

oma*_*mar 2 python numpy dicom pydicom

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

我的代码是下一个:

ds = dicom.read_file("dicomdir")
Run Code Online (Sandbox Code Playgroud)

我尝试访问以下pixel_array元素:

data = ds.pixel_array
Run Code Online (Sandbox Code Playgroud)

我得到下一个错误: 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)记录使用中标志US: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)记录使用中标志US:65535(0004,1420)引用的下级Di UL的偏移量:800(0004,1430)目录记录类型CS:'STUDY'(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)记录使用中标志US: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)系列号IS:“ 354”


(0004,1400)下一个目录记录的偏移量UL:1298(0004,1410)记录使用中标志US:65535(0004,1420)引用的下级Di UL的偏移量:0(0004,1430)目录记录类型CS:'IMAGE'(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'1053)重新调整坡度DS:'1'1053)重新调整坡度DS:'1'


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

您知道如何使用Numpy数组访问每个图像的字段吗?

oma*_*mar 5

我在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)
Run Code Online (Sandbox Code Playgroud)

有用 ;)