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}),
])
相关推荐
算法打盹中5 小时前
深入解析 Transformer 模型:以 ChatGPT 为例从词嵌入到输出预测的大语言模型核心工作机制
人工智能·深度学习·语言模型·chatgpt·transformer·1024程序员节
电鱼智能的电小鱼7 小时前
基于电鱼 ARM 工控机的井下设备运行状态监测方案——实时采集电机、电泵、皮带机等关键设备运行数据
arm开发·人工智能·嵌入式硬件·深度学习·机器学习·制造
xiao5kou4chang6kai47 小时前
如何通过机器学习(如K-means、SVM、决策树)与深度学习(如CNN、LSTM)模型,进行全球气候变化驱动因素的数据分析与趋势预测
深度学习·机器学习·kmeans·生态环境监测·全球气候变化
沉迷单车的追风少年7 小时前
Diffusion Model与视频超分(2):解读字节开源视频增强模型SeedVR2
人工智能·深度学习·aigc·音视频·强化学习·视频生成·视频超分
Victory_orsh8 小时前
“自然搞懂”深度学习系列(基于Pytorch架构)——03渐入佳境
人工智能·pytorch·深度学习
程序猿编码8 小时前
Linux 文件变动监控工具:原理、设计与实用指南(C/C++代码实现)
linux·c语言·c++·深度学习·inotify
碧海银沙音频科技研究院9 小时前
i2s的LRCK时钟有毛刺以及BCLK数据在高采样率有变形数据解析错误问题原因以及解决方法
人工智能·深度学习·算法·分类·音视频
my1_1my10 小时前
深度学习中的两个不确定性
人工智能·深度学习
小范馆10 小时前
AI大模型-深度学习相关概念
人工智能·深度学习