医学影像分析入门:brats2018数据集下载与预处理实战指南

1次阅读
没有评论

共计 2893 个字符,预计需要花费 8 分钟才能阅读完成。

image.webp

背景介绍

Brats2018 数据集是脑肿瘤分割领域最权威的基准数据集之一,由多模态 MRI 扫描(T1、T1c、T2、FLAIR)组成,包含 210 例高级别胶质瘤和 75 例低级别胶质瘤的专家标注数据。其核心价值在于:

医学影像分析入门:brats2018 数据集下载与预处理实战指南

  • 提供标准化评估基准,支持 5mm 各向同性分辨率
  • 包含四种临床常用序列(FLAIR 对水肿区域敏感)
  • 体素级标注区分坏死 / 水肿、增强肿瘤等亚结构

数据集采用 NIfTI 格式存储,该格式特点包括:

  1. 同时存储图像数据和元信息(如体素间距)
  2. 支持 3D/4D 医学影像
  3. 文件扩展名通常为.nii 或.nii.gz(压缩格式)

下载指南

  1. 访问 MICCAI2018 官网(需科学上网):https://www.med.upenn.edu/sbia/brats2018.html
  2. 点击 ”Registration” 填写机构邮箱(教育邮箱通过率更高)
  3. 收到授权邮件后,从数据仓库选择下载:
  4. Training data (HGG/LGG)
  5. Validation data(无标注)
  6. Survival data(可选)

注意事项:

  • 完整数据集约 15GB,建议使用 wget 断点续传
  • 确认下载文件的 MD5 校验值
  • 存储路径避免中文和空格

数据解析

安装依赖库:

pip install nibabel matplotlib numpy

加载单个病例的示例代码:

import nibabel as nib
import matplotlib.pyplot as plt

# 加载 FLAIR 序列
flair_path = 'Brats2018/HGG/Brats18_2013_2_1/Brats18_2013_2_1_flair.nii.gz'
flair_img = nib.load(flair_path)

# 获取数据矩阵和头信息
data = flair_img.get_fdata()
header = flair_img.header
print(f"体素间距: {header.get_zooms()}mm")
print(f"数据维度: {data.shape}")

# 可视化中间层面
plt.imshow(data[:, :, data.shape[2]//2], cmap='gray')
plt.colorbar()
plt.show()

关键解析点:

  • get_fdata()返回 numpy 数组(高度×宽度×层数)
  • 头信息包含关键的 spacing 参数(影响后续重采样)
  • 不同序列需要对齐处理(可用 SimpleITK 进行配准)

预处理流程

1. 标准化

import numpy as np

def normalize_volume(volume):
    """Z-score 标准化"""
    mask = volume > 0  # 只处理脑组织区域
    mean = volume[mask].mean()
    std = volume[mask].std()
    normalized = (volume - mean) / std
    return np.nan_to_num(normalized)

2. 重采样

import SimpleITK as sitk

def resample_image(itk_image, new_spacing=[1,1,1]):
    """统一各向同性分辨率"""
    original_spacing = itk_image.GetSpacing()
    original_size = itk_image.GetSize()

    resize_factor = [o/n for o,n in zip(original_spacing, new_spacing)]
    new_size = [int(round(os*rs)) for os,rs in zip(original_size, resize_factor)]

    resampler = sitk.ResampleImageFilter()
    resampler.SetInterpolator(sitk.sitkLinear)
    resampler.SetOutputSpacing(new_spacing)
    resampler.SetSize(new_size)
    return resampler.Execute(itk_image)

3. 数据增强

import albumentations as A

def get_augmentations():
    """适用于 2D 切片的增强"""
    return A.Compose([A.RandomRotate90(p=0.5),
        A.ElasticTransform(alpha=1, sigma=50, alpha_affine=10, p=0.3),
        A.GridDistortion(p=0.2)
    ], additional_targets={'mask': 'mask'})

医学影像处理要点:

  • 标准化前需去除背景(阈值 >0)
  • 重采样会改变标注 mask,需同步处理
  • 3D 增强计算成本高,建议在 2D 切片实施

常见问题

Q1:下载链接失效怎么办?
– 尝试通过 CBICA 的 Image Processing Portal 申请
– 检查防火墙是否拦截数据包

Q2:nibabel 加载时报维度错误
– 使用 nib.Nifti1Image 重新封装数据
– 检查文件是否完整(部分解压工具会损坏.nii.gz)

Q3:不同模态数据不对齐
– 使用 SimpleITK 执行配准:

fixed = sitk.ReadImage(flair_path)
moving = sitk.ReadImage(t1ce_path)
transform = sitk.CenteredTransformInitializer(fixed, moving, sitk.Euler3DTransform())
registered = sitk.Resample(moving, fixed, transform)

实践建议

  1. 数据组织采用 BIDS 格式规范

    /Brats2018
      /sub-HGG001
        /anat
          sub-HGG001_flair.nii.gz
          sub-HGG001_t1.nii.gz
          ...

  2. 使用 PyTorch 的 Dataset 类构建管道

    class BratsDataset(Dataset):
        def __init__(self, root):
            self.scans = glob(f"{root}/**/*_flair.nii.gz")
    
        def __getitem__(self, idx):
            flair = load_scan(self.scans[idx])
            t1ce = load_scan(self.scans[idx].replace('flair','t1ce'))
            mask = load_mask(...)
            return torch.stack([flair, t1ce]), mask

  3. 验证阶段使用官方评估工具

  4. 下载 CBICA 的评估包
  5. 注意提交格式要求(NIfTI 压缩方式)

  6. 计算资源有限时的策略:

  7. 预提取 2D 切片保存为 HDF5
  8. 使用混合精度训练
  9. 从少量 HGG 病例开始实验

结语

处理 Brats2018 数据集是进入医学影像分析的绝佳实践。经过本文介绍的完整流程后,读者应该能够:
– 理解多模态 MRI 数据的特点
– 搭建标准的预处理管道
– 避免常见的 ” 坑 ”(如体素间距不一致问题)

建议下一步尝试在 nnUNet 等标准框架上微调模型,逐步深入这个充满挑战的领域。

正文完
 0
评论(没有评论)