pydicom 简介
pydicom 是一个 纯 Python 实现的库,专门用于 读取、修改和写入 DICOM(Digital Imaging and Communications in Medicine)文件。它把 DICOM 数据集映射为 Python 的字典结构,使得对医学影像的元数据和像素数据的操作可以像操作普通 Python 对象一样自然、简洁。
1. 核心定位与功能
| 功能 | 说明 | 
|---|---|
| 读取 DICOM | pydicom.dcmread()能把.dcm文件直接加载为Dataset对象 | 
| 修改元数据 | 通过属性或键访问(如 ds.PatientName = "张三")即可修改任意标签 | 
| 写回文件 | ds.save_as("new.dcm")将修改后的数据写入新文件 | 
| 像素数据 | 在不依赖其他库的情况下读取原始字节;若安装 NumPy,可直接得到 pixel_array(二维/三维数组) | 
| 跨平台 | 纯 Python 包,无需额外系统依赖,支持 Windows、Linux、macOS 等 | 
| 生态扩展 | 与 pynetdicom(DICOM 网络通信)、deid(匿名化)以及 pylibjpeg(压缩像素解码)等项目配合使用,形成完整的医学影像处理生态 | 
2. 主要类与对象模型
| 类 | 作用 | 关键特性 | 
|---|---|---|
| Dataset | 核心容器,模拟 Python dict,键为 DICOM 标签,值为DataElement实例 | |
| DataElement | 保存单个标签的 VR(值表示)、VM(值数量) 与实际值 | |
| Sequence | 继承自 list,用于存放 SQ(序列) 类型的元素,提供与普通列表相同的索引、追加等操作 | |
| FileDataset | Dataset的子类,额外保存文件元信息(如预置、文件元数据),用于读写磁盘文件 | |
| Tag | 表示 DICOM 标签的整数编码,支持十六进制表示(如 0x0010,0x0010) | 
Dataset的使用方式类似 Python 字典:ds["PatientName"]或ds.PatientName均可获取对应的 DataElement 值;若需要完整的DataElement对象,可使用ds.data_element("PatientName")。
3. 安装与基本使用示例
pip install pydicom   # 推荐使用 pip,亦可通过 conda 安装
import pydicom
# 读取 DICOM 文件
ds = pydicom.dcmread('example.dcm')
# 查看常用元数据
print(ds.PatientName)          # 患者姓名
print(ds.Modality)             # 成像模式(CT、MR 等)
# 访问像素数据(需 NumPy)
if 'PixelData' in ds:
    import numpy as np
    img = ds.pixel_array       # 自动解码为 NumPy 数组
    print(img.shape)
# 修改并保存
ds.PatientID = '123456'
ds.save_as('example_modified.dcm')
上述代码展示了 读取 → 访问 → 修改 → 保存 的完整工作流,几乎不需要额外的配置。
4. 与其他库的关系
- pynetdicom:提供 DICOM 网络协议(C‑STORE、C‑GET 等),在需要服务器/客户端通信时配合 pydicom 使用。
- deid:基于 pydicom 实现 DICOM 文件的匿名化,帮助满足隐私合规要求。
- pylibjpeg / GDCM:当 DICOM 文件使用 JPEG、JPEG2000 等压缩像素数据时,这些库可为 pydicom 提供解码支持。
5. 适用场景
- 医学研究:快速读取大量影像的元数据进行统计分析。
- 临床数据管理:批量修改患者信息、检查日期等标签。
- 机器学习前处理:将 DICOM 像素数据转换为 NumPy 数组供模型训练使用。
- 数据迁移与转换:在不同系统之间搬迁 DICOM 文件时保持标签完整性。
6. 局限与注意事项
- 不提供 DICOM 网络功能(如 PACS 服务器),仅负责文件层面的读写。
- 压缩像素数据的解码 需要额外安装第三方库(如 pylibjpeg),否则只能获取原始字节。
- 不包含图像显示功能,通常配合 matplotlib、SimpleITK等库进行可视化。
7. 社区与维护
- 项目托管在 GitHub(<https://github.com/pydicom/pydicom >),采用 MIT 许可证,社区活跃,定期发布新版本并修复 bug。
- 官方文档提供完整的 API 参考、使用指南 与 示例代码,适合新手快速上手。
总结:pydicom 通过把 DICOM 文件抽象为 Python 原生对象,使得医学影像的元数据和像素数据可以在 Python 环境中以“Pythonic”方式进行读取、编辑和保存,是医学影像处理、科研和临床数据管理中最常用的基础库之一。
 
    	            
    	            声明:文章均为AI生成,请谨慎辨别信息的真伪和可靠性!
    	    	
					
    	     
						     
                         
						    