mcpField
P
pydicom

pydicom

github.com/tondevrel数据与数据库2456 次安装39 周前更新
代码仓库

关于 pydicom

面向使用 DICOM 文件的 Python 开发者和医学影像团队的技能,介绍元数据与像素数据访问、DICOM 规范处理及隐私保护实践。

主要功能

  1. 01按名称或 ID 访问标签
  2. 02通过 pixel_array 读取像素数据
  3. 03处理带类型的 DICOM 值
  4. 04处理 DICOM 序列
  5. 05匿名化患者标识信息

适用场景

  1. 01提取患者与检查元数据
  2. 02准备 CT 或 MRI 像素数据以供分析
  3. 03转换 DICOM 数据用于分析
  4. 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