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

4
我会尽力完成翻译任务。以下是您需要翻译的内容:

我正在尝试使用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))
2个回答

7
要获取所有标签,只需迭代数据集中的所有元素。文档中 这里有一个示例演示如何实现。它可以简化为:
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

您可以在数据集的文档以及其他示例中找到类似的信息。

请注意,还有一个命令行接口,它显示DICOM文件的内容。

编辑
由于这个问题已经在另一个答案中提出:如果您想要访问文件元信息,例如第二组中的标签,您可以通过迭代ds.meta_infods是数据集)来实现。 meta_info也是数据集类型,可以以相同的方式访问。请注意,如果数据集中没有元信息,则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)

2

1
我在我的回答中添加了有关访问元信息的信息。 - MrBean Bremen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接