
科研图像处理

在医学影像处理中,DICOM 是最常见、最重要的文件格式之一。

DICOM 的全称是Digital Imaging and Communications in Medicine,它不仅仅是一种“图像格式”,更准确地说,它是一套医学图像存储与交换的标准。
与普通的 JPG、PNG 不同,DICOM 文件通常不仅保存图像像素数据,还包含大量与检查相关的元信息,例如:
因此,DICOM 文件可以理解为:
图像数据 + 医学元数据(Metadata)
这也是 DICOM 在临床和科研中被广泛使用的原因。
这篇文章会介绍怎样利用Python对DICOM文件进行读写,以及对元数据(Metadata)进行修改。
DICOM 规定了一套“全世界通用的医学影像字段字典”,每个字段都有固定编号、名字、数据类型和使用规则,并由DICOM 标准委员会定义和维护:
https://www.dicomlibrary.com/dicom/dicom-tags/
这些信息在 DICOM 中都以Data Element(数据元素)的形式存在。而每个数据元素都有一个唯一编号,这个编号就是我们常说的Tag(标签)。例如:
DICOM 的 tag 由两个 16 位十六进制数组成(group, element):
例如(0010,0010)可以拆成:
0010:group0010:elementTag的前半部分表示“属于哪一大类” ,后半部分表示“这类里的具体哪一项”比如:
(0010,xxxx)(0008,xxxx)(0028,xxxx)虽然核心标准是统一的,但不同厂商设备在实际写文件时,有些 tag 会省略,有些会增加私有tag。
可以新建一个conda环境,然后安装相关的包:
conda create -n dicom_env python=3.10conda activate dicom_envpip install pydicom matplotlib ipykernelpython -m ipykernel install --user --name dicom_env --display-name "Python (dicom_env)"
这里选择pydicom自带的数据集:
from pydicom import examplesimport pydicom# Load example CT datasetds = examples.ct# save dicom fileoutput_path = "ct_example.dcm"ds.save_as(output_path)# load saved dicom filepath = "ct_example.dcm"ds = pydicom.dcmread(path)
把DICOM读取成为data structure后,可以通过名称或者tag number,对元数据进行读取:
elem = ds["PatientName"]# Access the same element by its tag number# elem = ds[(0x0010, 0x0010)]print("Keyword:", elem.keyword)print("Tag:", elem.tag)print("Name:", elem.name)print("VR:", elem.VR)print("Value:", elem.value)
同样的,可以对Tag进行修改:
# Modify the tagds.PatientName = "Demo Patient"
如果某个Tag缺失,也可以增加一个Tag:
# Add a standard new tag: PatientAgeds.add_new((0x0010, 0x1010), "AS", "035Y")
另一种比较方便可以查看DICOM Metadata的方式,可以在ImageJ中打开DICOM文件。然后ImageJ -> Show info:

希望对大家有帮助~
往期推荐

点赞在看哦~