TorchIO:超级好用的3D医学图像处理package

TorchIO 是一个非常重要的医学影像深度学习工具包,尤其在 MRI、CT、PET 等三维医学影像数据的预处理、增强和建模 中应用广泛。它基于 PyTorch 构建,因此能无缝集成到你的神经网络训练流程中。

文章目录

    • [1. 基础信息介绍](#1. 基础信息介绍)
    • [2. TorchIO 的主要功能模块](#2. TorchIO 的主要功能模块)
      • [2.1 图像加载与组织](#2.1 图像加载与组织)
      • [2.2 数据预处理](#2.2 数据预处理)
      • [2.3 数据增强](#2.3 数据增强)
      • [2.4 数据加载与批处理](#2.4 数据加载与批处理)
      • [2.5 Patch-based训练✨](#2.5 Patch-based训练✨)
    • [3. 安装与基本使用](#3. 安装与基本使用)
    • [4. 数据增强使用场景](#4. 数据增强使用场景)
      • [4.1 CT](#4.1 CT)
      • [4.2 MRI](#4.2 MRI)
      • [4.3 PET](#4.3 PET)
      • [4.4 多模态策略(PET/CT或PET/MRI)](#4.4 多模态策略(PET/CT或PET/MRI))

1. 基础信息介绍

TorchIO 是一个开源的 Python 库,专为 三维医学影像(3D medical imaging) 的预处理、数据增强(augmentation)和深度学习工作流程而设计。TorchIO 的设计理念是:

复制代码
"让医学影像能像普通图像那样轻松被 PyTorch 使用。"

项目主页

👉 https://torchio.readthedocs.io

👉 GitHub: https://github.com/fepegar/torchio

2. TorchIO 的主要功能模块

2.1 图像加载与组织

  • 支持格式:NIFTI(.nii/.nii.gz格式),DICOM,Numpy等
  • 核心结构:
    torchio.Image表示单个影像通道(例如一张T1 MRI或PET)
    torchio.Subject表示一个完整的个体数据,可以包含多个模态影像数据和标签
python 复制代码
import torchio as tio
subject = tio.Subject(
    t1=tio.ScalarImage('subj1_T1.nii.gz'),
    pet=tio.ScalarImage('subj1_PET.nii.gz'),
    label=tio.LabelMap('subj1_label.nii.gz')
)

2.2 数据预处理

TorchIO 支持一系列常见的医学影像预处理操作:

  • 重采样(Resample):统一体素大小
  • 归一化(ZNormalization, RescaleIntensity)
  • 裁剪或填充(CropOrPad, Pad, Crop)
  • 仿射对齐(Affine)
python 复制代码
transform = tio.Compose([
    tio.Resample((1, 1, 1)),  # 重采样为1mm³体素
    tio.ZNormalization(),     # z-score标准化
    tio.CropOrPad((128, 128, 128))  # 统一尺寸
])
processed = transform(subject)

2.3 数据增强

TorchIO 支持各种空间变换与强度变换:

类型 示例 说明
空间变换 RandomAffine,RandomElasticDeformation,RandomFlip 随机旋转、弹性形变、翻转
强度变换 RandomNoise, RandomBlur, RandomGamma, RandomBiasField 模拟噪声、对比度变化
病灶模拟 RandomSwap, RandomMotion, RandomSpike, RandomBiasField 模拟病灶或扫描伪影
python 复制代码
augmentation = tio.Compose([
    tio.RandomFlip(axes=(0,)),           # 左右翻转
    tio.RandomAffine(scales=(0.9, 1.1)), # 随机缩放
    tio.RandomNoise(std=0.01),           # 加噪声
])
augmented = augmentation(subject)

2.4 数据加载与批处理

TorchIO 能与 PyTorch 的 DataLoader 无缝衔接:

python 复制代码
subjects = [subject1, subject2, subject3]
dataset = tio.SubjectsDataset(subjects, transform=augmentation)
loader = torch.utils.data.DataLoader(dataset, batch_size=2, shuffle=True)

2.5 Patch-based训练✨

医学影像通常非常大(512×512×512体素),直接输入模型显存会爆。TorchIO 提供 patch-based sampling 工具:

  • tio.data.GridSampler: 自动将3D图像分块
  • tio.data.GridAggregator: 把模型输出的patch拼回原图
python 复制代码
sampler = tio.data.GridSampler(subject, patch_size=64)
aggregator = tio.data.GridAggregator(sampler)

→ 用于 patch-based segmentation 或 classification 模型的训练。

3. 安装与基本使用

  • 安装
bash 复制代码
pip install torchio
  • 测试
python 复制代码
import torchio as tio
print(tio.__version__)

基本操作

python 复制代码
t1 = tio.ScalarImage('t1.nii.gz')
pet = tio.ScalarImage('pet.nii.gz')
subject = tio.Subject(t1=t1, pet=pet)

4. 数据增强使用场景

模态 成像机制 增强重点 不宜操作
CT 组织密度 → 灰度线性关系明显 空间变换 + 轻度噪声/伽马调整 不能大幅更改强度范围(HU值)
MRI T1/T2等加权,强度非线性 空间形变 + 偏置场 + 对比度变化 不能直接线性归一化到0--1
PET(如PSMA PET/CT) 放射性浓度定量(SUV) 保留SUV相对比例 + 噪声增强 禁止大幅伽马或bias变换

4.1 CT

增强类型 TorchIO 方法 说明
空间翻转 RandomFlip 模拟左右或前后位置差异
仿射变换 RandomAffine 轻度旋转与缩放
弹性形变 RandomElasticDeformation 模拟组织弹性差异
噪声增强 RandomNoise 模拟扫描噪声
对比度增强 RandomGamma 模拟CT窗宽窗位变化
python 复制代码
ct_transform = tio.Compose([
    tio.RandomFlip(axes=(0, 1)),
    tio.RandomAffine(scales=(0.9, 1.1), degrees=5),
    tio.RandomElasticDeformation(max_displacement=4),
    tio.RandomNoise(std=0.01),
    tio.RandomGamma(log_gamma=(-0.3, 0.3)),
])

4.2 MRI

增强类型 TorchIO 方法 说明
空间翻转 RandomFlip 模拟扫描体位差
仿射变换 RandomAffine 模拟姿势变化
弹性形变 RandomElasticDeformation 模拟软组织弹性差
偏置场 RandomBiasField 模拟MRI强度不均
对比度变化 RandomGamma 模拟T1/T2扫描差异
噪声 RandomNoise 模拟设备噪声
运动伪影 RandomMotion 模拟扫描中头动/体动
模糊伪影 RandomBlur 模拟低分辨率扫描
python 复制代码
mri_transform = tio.Compose([
    tio.RandomFlip(axes=(0, 1)),
    tio.RandomAffine(scales=(0.9, 1.1), degrees=10),
    tio.RandomElasticDeformation(max_displacement=5),
    tio.RandomBiasField(coefficients=0.3),
    tio.RandomGamma(log_gamma=(-0.4, 0.4)),
    tio.RandomNoise(std=0.02),
    tio.RandomMotion(degrees=5, translation=3),
    tio.RandomBlur(std=(0, 1)),
])

4.3 PET

增强类型 TorchIO 方法 说明
空间翻转 RandomFlip 模拟扫描方向变化
仿射变换 RandomAffine 模拟轻微配准误差
噪声 RandomNoise 模拟低统计计数噪声
模糊 RandomBlur 模拟分辨率差
强度缩放 RescaleIntensity 归一化SUV值
对比度轻度调整 RandomGamma 小幅增强对比
弹性形变 RandomElasticDeformation 模拟小尺度器官位移
python 复制代码
pet_transform = tio.Compose([
    tio.RescaleIntensity(out_min_max=(0, 1)),
    tio.RandomFlip(axes=(0, 1)),
    tio.RandomAffine(scales=(0.95, 1.05), degrees=5),
    tio.RandomElasticDeformation(max_displacement=2),
    tio.RandomNoise(std=0.03),
    tio.RandomBlur(std=(0, 1)),
    tio.RandomGamma(log_gamma=(-0.2, 0.2)),
])

💡 PET增强注意事项:

  • 不能使用 RandomBiasField(会破坏SUV定量)
  • 不建议使用强烈的 RandomGamma 或大范围 Affine
  • 若模型以SUV特征为输入,应保持线性关系(建议仅用噪声、模糊类)

4.4 多模态策略(PET/CT或PET/MRI)

可以使用联合空间增强,模态独立强度增强

python 复制代码
shared_spatial = tio.Compose([
    tio.RandomFlip(axes=(0, 1)),
    tio.RandomAffine(scales=(0.95, 1.05), degrees=5),
    tio.RandomElasticDeformation(max_displacement=3),
])
pet_only = tio.Compose([
    tio.RandomNoise(std=0.03),
    tio.RandomBlur(std=(0, 1)),
])
mri_only = tio.Compose([
    tio.RandomBiasField(coefficients=0.3),
    tio.RandomGamma(log_gamma=(-0.4, 0.4)),
])
ct_only = tio.Compose([
    tio.RandomGamma(log_gamma=(-0.3, 0.3)),
    tio.RandomNoise(std=0.01),
])

subject_transform = tio.Compose([
    shared_spatial,
    tio.OneOf({pet_only: 0.4, mri_only: 0.4, ct_only: 0.2}),
])
相关推荐
irizhao17 小时前
基于深度学习的智能停车场系统设计与实现
人工智能·深度学习
F_D_Z19 小时前
简明 | Yolo-v3结构理解摘要
深度学习·神经网络·yolo·计算机视觉·resnet
java1234_小锋21 小时前
Transformer 大语言模型(LLM)基石 - Transformer架构详解 - 自注意力机制(Self-Attention)原理介绍
深度学习·语言模型·transformer
ney1878190247421 小时前
分类网络LeNet + FashionMNIST 准确率92.9%
python·深度学习·分类
Coding茶水间21 小时前
基于深度学习的无人机视角检测系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)
图像处理·人工智能·深度学习·yolo·目标检测·计算机视觉
田里的水稻1 天前
DT_digital_twin_ROS+Grazebo仿真
深度学习·数据挖掘·数据分析
飞Link1 天前
GDN:深度学习时代的图偏差网络异常检测全解析
网络·人工智能·深度学习
吐个泡泡v1 天前
深度学习中的“压缩与解压“艺术:自编码器与VAE详解
深度学习·vae·生成模型·自编码器
l木本I1 天前
uv 技术详解
人工智能·python·深度学习·机器学习·uv