python - 如何使用 pydicom 读取所有 DICOM 属性/标签?

标签 python pydicom

我正在尝试使用 pydicom 获取给定 DICOM 实例的所有属性(标签)的列表。

该列表应包括属性键/id、它的vr、值以及相应的名称。

例如:

Tag: (2,0)
VR: UL
Name: File Meta Information Group Length
Value: 246

我想获得一些关于如何获取此信息的指导,因为我在 pydicom 文档中找不到任何有用的信息。

我的代码如下:

import pydicom
from io import BytesIO

dicom_data = await client.download_dicom_file(image_id)
data = pydicom.dcmread(BytesIO(dicom_data))

最佳答案

要获取所有标签,您只需遍历数据集中的所有元素。 Here是执行此操作的文档中的示例。归结为:

from pydicom import dcmread

ds = dcmread(file_name)
for element in ds:
    print(element)

该示例还展示了如何处理序列(通过递归迭代序列项)。这是一个仅使用元素的字符串表示来处理序列项的简单示例:

def show_dataset(ds, indent):
    for elem in ds:
        if elem.VR == "SQ":
            indent += 4 * " "
            for item in elem:
                show_dataset(item, indent)
            indent = indent[4:]
        print(indent + str(elem))

def print_dataset(file_name):
    ds = dcmread(file_name)
    show_dataset(ds, indent="")

如果您想打印您自己的数据元素表示,您可以访问元素属性。 每个元素都是一个 DataElement , 其中包含您需要的信息:

>>> from pydicom import dcmread
>>> ds = dcmread("ct_small.dcm")  # from the test data
>>> len(ds)
258
>>> element = ds[0x00080008]
>>> element
(0008, 0008) Image Type                          CS: ['ORIGINAL', 'PRIMARY', 'AXIAL']
>>> type(element)
<class 'pydicom.dataelem.DataElement'>
>>> element.VR
'CS'
>>> element.tag
(0008, 0008)
>>> element.name
'Image Type'
>>> element.value
['ORIGINAL', 'PRIMARY', 'AXIAL']
>>> element.VM
3

您将在 Dataset 的文档中找到类似的信息,可能还有其他示例。

请注意,还有一个 command line interface显示 DICOM 文件的内容。

编辑:
正如另一个答案中所问:如果您想访问文件元信息,例如对于第 2 组中的标签,您可以通过遍历 ds.meta_info(ds 是数据集)来实现。 meta_info 也是 Dataset 类型,可以用同样的方式访问。请注意,如果数据集中不存在元信息,则 meta_info 可能为 None:

from pydicom import dcmread

ds = dcmread(file_name)
meta_info = ds.meta_info
if meta_info is not None:
    for element in meta_info:
        print(element)

关于python - 如何使用 pydicom 读取所有 DICOM 属性/标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68319272/

相关文章:

python - 在 python 中调整 DICOM 图像的大小

python - 如何使用 pyDicom 替换同一 DICOM 文件中的像素数据以使用任何 DICOM 查看器再次读取它?

python - 属性错误: 'FileDataset' object has no attribute 'SliceLocation'

python - 无法获取 dicom 图像以在 python 中显示

macos - 读取 DICOM 并使用 matplotlib 绘图时,没有可用的图像处理程序可以解码此传输语法 JPEG Lossless

python - Django:测试中的一般帮助

python - 树莓派 "ImportError: libavg/avg.so: cannot open shared object file: no such file or directory"

python - Django:无法更改默认语言

python - 如果列全部为 nan,则使 numpy.nanargmin 返回 nan

python 列表比较和替换