用途
pydicom 是一个用于处理 DICOM 文件的 Python 包,允许以 Python 风格读取、修改和写入 DICOM 数据。DICOM 不只是图像,而是一种包含患者信息、空间方位和像素数据的丰富数据结构,pydicom 提供了对这些标签的访问能力。它是 Python 医学影像处理的基础工具,帮助研究人员和临床人员处理支撑现代放射学的标准化 DICOM 格式。
主要能力
- 读取 DICOM 文件并访问元数据,例如患者姓名、患者 ID、模态(CT、MR、DX)、检查日期、层厚等。
- 通过
pixel_array属性访问像素数据,并与 NumPy 集成。 - 支持按名称(如
ds.PatientName)或标签 ID(如ds[0x0010, 0x0010])访问数据集标签。 - 支持对日期、年龄和小数等值表示(VR)的严格类型处理,以保证数据完整性。
- 支持修改和写入 DICOM 数据,并可用于匿名化处理。
- 支持处理 DICOM 序列,将多个切片堆叠为体数据。
使用方式
标准导入:
import pydicom
from pydicom.data import get_testdata_files
import matplotlib.pyplot as plt
import numpy as np
基本模式:
# 1. 读取文件
ds = pydicom.dcmread("scan.dcm")
# 2. 访问元数据
print(f"Patient: {ds.PatientName}, ID: {ds.PatientID}")
print(f"Modality: {ds.Modality}") # CT, MR, DX
print(f"Study Date: {ds.StudyDate}")
print(f"Slice Thickness: {ds.SliceThickness}")
# 3. 访问图像
plt.imshow(ds.pixel_array, cmap="gray")
plt.title(f"{ds.Modality} - {ds.PatientName}")
处理 DICOM 序列:
import pydicom
from pathlib import Path
# 加载一系列 DICOM 文件
dicom_dir = Path("dicom_series")
files = sorted(dicom_dir.glob("*.dcm"))
# 加载并堆叠切片
slices = [pydicom.dcmread(f) for f in files]
volume = np.stack([s.pixel_array for s in slices])
匿名化:
ds.PatientName = "ANONYMOUS"
ds.PatientID = "000000"
ds.PatientBirthDate = ""
ds.PatientSex = ""
适用场景
- 处理医学影像数据(CT、MRI、X 射线、超声)。
- 从 DICOM 文件中提取患者元数据和临床信息。
- 构建需要同时使用图像和元数据的放射学 AI 模型。
- 将 DICOM 转换为其他格式以便分析。
- 医学影像工作流中的质量保证与合规检查。
限制与注意事项
应遵循以下规则:
- 始终通过
ds.pixel_array而非ds.PixelData访问像素数据,以获得正确的 NumPy 集成。 - 在访问可选标签前,使用
hasattr(ds, 'TagName')检查标签是否存在。 - DICOM 文件包含受保护健康信息(PHI),分享前务必匿名化。
- 注意不同的光度解释,部分图像可能反转或使用不同色彩空间。
不应:
- 不要原地修改 DICOM 文件,修改时应创建副本以保留原始数据。
- 不要忽略 VR 类型,DICOM 有严格的数据类型,错误转换可能损坏数据。
- 不要假设所有 DICOM 文件都包含图像,有些仅包含元数据(如结构化报告)。
关于安装命令、收费、价格、平台支持等具体信息,资料中暂未提供。