定义
pydicom是一个用Python编写的纯Python软件包,主要用途是处理符合DICOM标准的文件,包括医学影像、检查报告以及放射治疗对象。[3]它面向DICOM数据集的读写,把文件中的各个数据元素以Python对象的方式呈现,读取修改后的数据集可以再写回DICOM格式文件。
作为纯Python实现,pydicom本身不依赖其他第三方库即可运行,只有在处理像素数据时才建议安装NumPy。[2]它定位于通用性的DICOM读写框架,并不负责DICOM网络通信,也不以图像显示为主要目标;网络通信由同项目下的pynetdicom承担,匿名化等更具体的功能则由基于pydicom构建的其他库提供。[2][4]
原理
DICOM文件由一系列数据元素构成,每个元素以标签标识,标签由组号和元素号组成,并带有值表示(VR)以说明数据类型。pydicom读取文件后返回Dataset对象,既可以用标签查找元素,也可以按数据元素的名称以属性形式访问,例如读取患者姓名、患者编号等字段。[5]向数据集添加标准元素时,pydicom可以依据元素关键字自动完成VR查找;添加私有元素时,则会按DICOM标准要求同时写入私有创建者元素,用于标识并保留对应区段的私有标签。[5]
对于影像像素数据,pydicom始终可以按字节形式读取、修改和写入压缩与未压缩的像素数据;在安装了NumPy的情况下,还可以通过pixel_array属性把像素数据转换为多维数组,数组形状由数据集中的行列数等参数决定。[2]解码JPEG、JPEG-LS、JPEG 2000等压缩像素数据时需要额外安装相应的解码库,RLE编码的解码仅依赖NumPy即可完成。[2]
发展历程
pydicom的早期版本以dicom作为包名,其代码文件标注的版权年份为2008年至2012年,作者为Darcy Mason,采用经过修改的MIT许可证发布。当时的发行说明中给出的使用方式是先读取文件、修改数据元素的值,再另存为新的文件。
该软件包在0.9.x系列之后继续迭代,先后发布2.0.0、2.3.1、2.4.4、3.0.2等版本,并被收录进Debian、NetBSD pkgsrc等软件包集合。[3]项目由志愿者利用业余时间维护,源代码托管于GitHub,文档同时提供正式发布版和开发版的用户指南、教程、示例与API参考。[2]
应用
pydicom常用于读取和修改医学影像的元数据,例如更改患者编号后另存为新文件,或提取标签信息用于整理数据集。[2]在影像处理方面,它可以从CT、MRI、X射线和超声等影像中提取像素数据,配合NumPy与绘图库进行显示和分析,也支持把DICOM图像转换为PNG、JPEG等常见图像格式。
该库还用于处理多帧影像与影像序列,可以按层位置或实例编号排序后重建三维体数据;在医学数据共享和科研场景中,常借助它删除或替换患者姓名、患者编号、出生日期等可识别信息以实现匿名化。由于这些能力,pydicom被应用于医学影像分析、影像归档与通信系统(PACS)、放射科工作流程以及医疗影像相关的软件开发。
局限
pydicom不是DICOM服务器,主要定位也不是图像浏览,而是通过代码操作DICOM文件中的数据元素。[4]它只提供通用的数据集读写框架,不处理各个存储服务类(SOP类)的具体细节以及DICOM标准的其他方面,相关功能需要由基于它的其他库补充。[2]
压缩像素数据是另一个受限之处:压缩的像素数据无法在不先解压的情况下被有针对性地修改,必须先解码,修改后再按与未压缩数据相同的方式写回DICOM文件。[4]此外,JPEG、JPEG-LS、JPEG 2000等压缩像素数据的解码依赖额外安装的第三方库,RLE解码虽然只需NumPy,但速度可能较慢。[2]
参见
参考资料
- pydicom# [引用日期2026-10-14]
- pydicom [引用日期2026-10-14]
- biology/py-pydicom - The NetBSD Packages Collection [引用日期2026-10-14]
- Getting Started with pydicom [引用日期2026-10-14]
- pydicom quick start# [引用日期2026-10-14]