SuperAPI AI 工具集

pydicom

数据与分析

查看项目

更新于 10-16 01:58

技能介绍

用途

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 文件都包含图像,有些仅包含元数据(如结构化报告)。

关于安装命令、收费、价格、平台支持等具体信息,资料中暂未提供。