python - 即使字段存在,PyDICOM也会返回KeyError

标签 python dicom keyerror pydicom

我正在使用 pydicom.read_file() 在 DICOM 中读取内容,如下所示:

x = pydicom.read_file(/path/to/dicom/)

这会返回 FileDataset 的实例,但在尝试访问如下值时出现错误:

x[0x20,0x32]
OUTPUT: *** KeyError: (0020, 0032)

我也尝试过像这样访问该值:

x.ImagePositionPatient
OUTPUT: *** AttributeError: 'FileDataset' object has no attribute 'ImagePositionPatient'

这让我感到困惑的原因是,当我使用 x.values 查看所有值时,我发现该字段实际上存在:

(0020, 0032) Image Position (Patient)

如果我能清楚地看到 key 存在,它怎么可能会丢失?

我不是 PyDICOM 专家,但它应该像常规 Python 字典一样工作。

最佳答案

对于增强型 SOP 类别(增强型 CT、增强型 MR 等),许多标签位于序列中:在 Shared Functional Groups Sequence 中对于所有切片通用的标签,以及 Per frame Functional Groups Sequence 中对于特定于每个切片的标签,每个切片都有一个项目。
(请注意,这些链接特定于增强型 MR,以匹配您的数据集)

图像位置(患者) 是特定于切片的标签,因此您可以访问相应项目中每个切片的值。功能组序列不直接包含标签,但它们嵌套在另一个序列中 - 在图像位置(患者) 的情况下,这是 Plane Position Sequence 。要在 pydicom 中访问这些值,您可以执行以下操作:

ds = dcmread(filename)
positions = []
for item in ds.PerFrameFunctionalGroupsSequence:
    positions.append(item.PlanePositionSequence[0].ImagePositionPatient)
print(positions)

这将为您提供每个切片的图像位置。 当然,您应该检查是否具有正确的 SOP 类,并添加对标签是否存在的检查。根据您的用例,您可能只需要这些位置中的第一个,在这种情况下,您不必迭代这些项目。

关于python - 即使字段存在,PyDICOM也会返回KeyError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74776837/

相关文章:

python - 在数据框中使用数据透视/聚合

python - 我可以将图中的代码更改为自定义文本代码吗?

c# - 如何从原始心电图数据写入 DICOM 文件

iphone - 如何从 iOS 上的 DICOM 文件中提取像素数据?

python从列表中的条目中删除所有空格

python - 无法连接不同计算机上的 Python 套接字

java - 100%Java库,用于JPEG无损解码

python - 在 for/if-else 循环中填充 np.nan 条件

python3.6 : KeyError: 'formatters'

python - 解压时 defaultdict 引发 KeyError