关于 pydicom
面向使用 DICOM 文件的 Python 开发者和医学影像团队的技能,介绍元数据与像素数据访问、DICOM 规范处理及隐私保护实践。
主要功能
- 01按名称或 ID 访问标签
- 02通过 pixel_array 读取像素数据
- 03处理带类型的 DICOM 值
- 04处理 DICOM 序列
- 05匿名化患者标识信息
适用场景
- 01提取患者与检查元数据
- 02准备 CT 或 MRI 像素数据以供分析
- 03转换 DICOM 数据用于分析
- 04检查医学影像数据质量
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ tondevrel/ scientific-agent-skills --skill pydicom安装后在 Claude Code 中输入/pydicom确认已加载。
详细介绍
Pydicom - 医学影像标准
DICOM 不仅仅是一张图像,它还是一种丰富的数据结构,包含患者信息、空间方向和像素数据。Pydicom 可访问所有这些标签。
适用场景
- 处理医学影像数据(CT、MRI、X 射线、超声)。
- 从 DICOM 文件中提取患者元数据和临床信息。
- 构建需要同时使用图像和元数据的放射学 AI 模型。
- 将 DICOM 转换为其他格式以供分析。
- 在医学影像工作流中进行质量保证和合规性检查。
核心原则
将数据集视为字典
按名称(例如 ds.PatientName)或 ID(ds[0x0010, 0x0010])访问标签。
像素数据
原始像素数据存储在 PixelData 中,但应通过 pixel_array 访问,以便与 NumPy 集成。
VR(值表示)
对日期、年龄和小数使用严格的类型,可确保数据完整性。
快速参考
标准导入
import pydicom
from pydicom.data import get_testdata_files
import matplotlib.pyplot as plt
import numpy as np
基本模式
# 1. Read file
ds = pydicom.dcmread("scan.dcm")
# 2. Access Metadata
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. Access Image
plt.imshow(ds.pixel_array, cmap="gray")
plt.title(f"{ds.Modality} - {ds.PatientName}")
重要规则
✅ 应该做
- 使用 pixel_array 属性 - 始终通过
ds.pixel_array而非ds.PixelData访问像素数据,以便与 NumPy 正确集成。 - 检查缺失的标签 - 访问可选标签之前,使用
hasattr(ds, 'TagName')进行检查。 - 保护患者隐私 - DICOM 文件包含 PHI(受保护的健康信息)。分享前务必进行匿名化处理。
- 处理不同的光度解释 - 某些图像可能会反转,或使用不同的色彩空间。
❌ 不应该做
- 不要就地修改 DICOM 文件 - 修改时务必创建副本,以保留原始数据。
- 不要忽略 VR 类型 - DICOM 有严格的数据类型。错误转换可能会损坏数据。
- 不要假设所有 DICOM 文件都包含图像 - 有些文件只包含元数据(结构化报告)。
高级模式
使用 DICOM 序列
import pydicom
from pathlib import Path
# Load a series of DICOM files
dicom_dir = Path("dicom_series")
files = sorted(dicom_dir.glob("*.dcm"))
# Load and stack slices
slices = [pydicom.dcmread(f) for f in files]
volume = np.stack([s.pixel_array for s in slices])
匿名化
# Remove patient identifiers
ds.PatientName = "ANONYMOUS"
ds.PatientID = "000000"
ds.PatientBirthDate = ""
ds.PatientSex = ""
Pydicom 是 Python 医学影像领域的基础,使研究人员和临床医生能够处理丰富、标准化的 DICOM 格式,为现代放射学提供支持。
评论
支持 Markdown