mcpField
R
radiology-preprocessing

radiology-preprocessing

github.com/awslabs数据与数据库6881 次安装4 周前更新
代码仓库

关于 radiology-preprocessing

radiology-preprocessing 提供结构性脑 MRI 及相关放射影像体数据的预处理命令序列,面向为分割、配准研究或深度学习训练准备 NIfTI 影像的研究人员,涵盖从重定向到强度归一化的步骤。

主要功能

  1. 01重定向 NIfTI 体数据
  2. 02使用 N4 校正偏置场
  3. 03使用 HD-BET 或 FSL BET 提取脑部
  4. 04使用 ANTs 或 FSL 配准图像
  5. 05归一化强度并重采样体数据

适用场景

  1. 01为分割准备 MRI 体数据
  2. 02对齐不同受试者或模态的扫描
  3. 03为机器学习模型归一化图像
  4. 04将体数据重采样至各向同性 1 mm

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/awslabs/hcls-agent-skills --skill radiology-preprocessing

安装后在 Claude Code 中输入/radiology-preprocessing确认已加载。

详细介绍

放射学预处理

概述

用于预处理结构性脑部 MRI(T1w、T2w、FLAIR)及相关体积放射学数据的确定性命令。涵盖大多数下游分析(分割、配准研究、深度学习训练)采用的标准流程:重新定向 → 偏置校正 → 去颅骨 → 配准 → 强度归一化。

使用的工具:

  • HD-BET — 基于 CNN 的脑提取(在病理脑部数据上表现出色)。
  • FSL — bet、flirt、fnirt、fslmaths、fslreorient2std。
  • ANTs — N4BiasFieldCorrection、antsRegistrationSyNQuick.sh、antsApplyTransforms。
  • FreeSurfer — 使用 mri_convert 进行重采样/格式转换。

所有命令都针对 NIfTI(.nii / .nii.gz)文件。请在相应工具已加入 PATH 的 POSIX shell 中运行。

用法

标准 T1w 预处理流程

按顺序对单个受试者的体积数据运行以下步骤:

# 1. Reorient to standard (MNI-style RAS orientation)
fslreorient2std input.nii.gz reoriented.nii.gz

# 2. N4 bias field correction (BEFORE skull stripping)
N4BiasFieldCorrection -d 3 \
  -i reoriented.nii.gz \
  -o [n4.nii.gz,bias_field.nii.gz] \
  -s 3 \
  -c [50x50x30x20,1e-6] \
  -b [300]

# 3. Skull strip with HD-BET
hd-bet -i n4.nii.gz -o brain.nii.gz -device 0 -mode fast -tta 0
# CPU fallback (slower, no CUDA required): -device cpu

# 4. Register to MNI152 template (SyN nonlinear)
antsRegistrationSyNQuick.sh -d 3 \
  -f $FSLDIR/data/standard/MNI152_T1_1mm_brain.nii.gz \
  -m brain.nii.gz \
  -o sub2mni_ \
  -t s

# 5. Z-score intensity normalization within brain mask
fslmaths brain.nii.gz -mas brain_mask.nii.gz brain_masked.nii.gz
MEAN=$(fslstats brain_masked.nii.gz -k brain_mask.nii.gz -M)
STD=$(fslstats brain_masked.nii.gz -k brain_mask.nii.gz -S)
fslmaths brain_masked.nii.gz -sub $MEAN -div $STD -mas brain_mask.nii.gz brain_zscore.nii.gz

HD-BET 会写入 brain.nii.gz 和 brain_mask.nii.gz(默认情况下,掩膜带有 _mask 后缀)。

GPU 加速

HD-BET 默认使用 GPU;使用 -device 0 指定第一个 CUDA 设备。使用 -mode fast -tta 0 可禁用测试时增强,以极小的质量损失实现约 5 倍的速度提升。

hd-bet -i n4.nii.gz -o brain.nii.gz -device 0

响应格式

  • 先给出用户需要的命令或代码,再进行解释
  • 结构为:确认输入 → 可运行代码 → 说明关键参数 → 注意事项
  • 每项任务提供一个完整可运行的示例;不要展示所有替代方案
  • 代码注释保持简洁实用(说明作用,而非存在原因)
  • 目标:50-100 行代码,并附简短说明

除非用户明确要求,否则不要讲述流程顺序的原因或预处理理论;按顺序给出正确命令,并简要说明参数理由。

核心概念

1. 去颅骨(脑提取)

HD-BET(首选——对病理情况稳健):

hd-bet -i input.nii.gz -o output_bet.nii.gz -device cpu -mode fast -tta 0

FSL BET(备用方案,传统方法):

bet input.nii.gz output_bet.nii.gz -R -f 0.3 -g 0
  • -R:稳健地估算重心。
  • -f 0.3:强度分数阈值(值越低,脑掩膜越大)。
  • -g 0:阈值的垂直梯度。
2. 偏置场校正 — N4(ANTs)

校正由 RF 线圈/B1 场引起的低频强度不均匀。务必在去颅骨前运行——保留颅骨时偏置场估计效果更好,而输入已去颅骨的图像会在脑边界附近产生伪影。

N4BiasFieldCorrection -d 3 \
  -i input.nii.gz \
  -o [corrected.nii.gz,bias_field.nii.gz] \
  -s 3 \
  -c [50x50x30x20,1e-6] \
  -b [300]
  • -d 3:3D 图像。
  • -s 3:缩小因子(用于加速)。
  • -c [50x50x30x20,1e-6]:每个层级的最大迭代次数及收敛阈值。
  • -b [300]:B 样条网格分辨率(mm)。
3. 配准 — ANTs

antsRegistrationSyNQuick.sh 是合适的默认封装脚本。

# Rigid (6 DOF) — same subject, different timepoint/modality
antsRegistrationSyNQuick.sh -d 3 -f fixed.nii.gz -m moving.nii.gz -o output_ -t r

# Affine (12 DOF) — cross-subject coarse alignment
antsRegistrationSyNQuick.sh -d 3 -f fixed.nii.gz -m moving.nii.gz -o output_ -t a

# SyN (nonlinear) — atlas / MNI registration
antsRegistrationSyNQuick.sh -d 3 -f fixed.nii.gz -m moving.nii.gz -o output_ -t s

输出(对于 -t s):

  • output_0GenericAffine.mat — 仿射变换。
  • output_1Warp.nii.gz / output_1InverseWarp.nii.gz — 位移场。
  • output_Warped.nii.gz — 重采样到固定图像空间的移动图像。

将已保存的变换应用到另一幅图像(例如,分割图):

# For intensity images — Linear interpolation
antsApplyTransforms -d 3 \
  -i input.nii.gz \
  -r reference.nii.gz \
  -o output.nii.gz \
  -t output_1Warp.nii.gz \
  -t output_0GenericAffine.mat

# For label maps — NearestNeighbor interpolation
antsApplyTransforms -d 3 \
  -i labels.nii.gz \
  -r reference.nii.gz \
  -o labels_in_ref.nii.gz \
  -n NearestNeighbor \
  -t output_1Warp.nii.gz \
  -t output_0GenericAffine.mat

ANTs 会按相反顺序应用变换:最后一个 -t 会最先应用。对于 moving→fixed,仿射变换在形变场之前应用,因此 CLI 参数顺序为 -t warp -t affine。

4. 配准 — FSL FLIRT + FNIRT

线性(仿射):

flirt -in moving.nii.gz -ref fixed.nii.gz \
  -out output.nii.gz -omat affine.mat -dof 12

非线性(需要仿射初始化):

fnirt --in=moving.nii.gz \
  --ref=$FSLDIR/data/standard/MNI152_T1_1mm.nii.gz \
  --aff=affine.mat \
  --cout=warp \
  --iout=output.nii.gz

将形变场应用到另一幅图像:

applywarp -i input.nii.gz -r MNI152_T1_1mm.nii.gz -w warp -o output.nii.gz
# For labels:
applywarp -i labels.nii.gz -r MNI152_T1_1mm.nii.gz -w warp -o labels_mni.nii.gz --interp=nn
5. 强度归一化

大多数 ML 模型都需要此步骤——原始 MRI 强度为任意单位,且会因扫描仪/扫描时段而异。

在脑掩膜内进行 Z-score 归一化(最常见):

MEAN=$(fslstats brain.nii.gz -k brain_mask.nii.gz -M)
STD=$(fslstats brain.nii.gz -k brain_mask.nii.gz -S)
fslmaths brain.nii.gz -sub $MEAN -div $STD -mas brain_mask.nii.gz zscore.nii.gz

白质归一化(不受扫描仪影响):

  1. 使用 FSL FAST 或 FreeSurfer 分割白质(WM)。
  2. 计算 WM 掩膜内的平均强度:fslstats brain.nii.gz -k wm_mask.nii.gz -M。
  3. 用该平均值除体积图像。

直方图匹配 — 将强度直方图与参考受试者匹配:

  • ANTs:ImageMath 3 out.nii.gz HistogramMatch moving.nii.gz reference.nii.gz。
  • SimpleITK:sitk.HistogramMatchingImageFilter()。
6. 重采样

FreeSurfer(各向同性重采样的首选方法):

mri_convert --voxel-size 1 1 1 input.nii.gz output_1mm.nii.gz

FSL:

flirt -in input.nii.gz -ref input.nii.gz -applyisoxfm 1 -out output_1mm.nii.gz
# For labels use: -interp nearestneighbour
标准流程顺序
reorient (fslreorient2std)
  → N4 bias correction
  → skull strip (HD-BET)
  → registration (ANTs SyN or FSL FNIRT)
  → intensity normalization (z-score / WM)

各向同性重采样至 1 mm 通常在重新定向时完成(如果输入是各向异性的),或通过配准到 1 mm 模板隐式完成。

快速参考

任务命令
重新定向为标准方向fslreorient2std in.nii.gz out.nii.gz
N4 偏置场校正N4BiasFieldCorrection -d 3 -i in.nii.gz -o [out.nii.gz,bias.nii.gz] -s 3 -c [50x50x30x20,1e-6] -b [300]
去除颅骨(HD-BET)hd-bet -i in.nii.gz -o brain.nii.gz -device cpu -mode fast -tta 0
去除颅骨(BET)bet in.nii.gz brain.nii.gz -R -f 0.3 -g 0
刚性配准(ANTs)antsRegistrationSyNQuick.sh -d 3 -f fix.nii.gz -m mov.nii.gz -o out_ -t r
仿射配准(ANTs)antsRegistrationSyNQuick.sh -d 3 -f fix.nii.gz -m mov.nii.gz -o out_ -t a
SyN 配准(ANTs)antsRegistrationSyNQuick.sh -d 3 -f fix.nii.gz -m mov.nii.gz -o out_ -t s
应用 ANTs 变换(图像)antsApplyTransforms -d 3 -i in.nii.gz -r ref.nii.gz -o out.nii.gz -t out_1Warp.nii.gz -t out_0GenericAffine.mat
应用 ANTs 变换(标签)添加 -n NearestNeighbor
FLIRT 仿射flirt -in mov.nii.gz -ref fix.nii.gz -out out.nii.gz -omat aff.mat -dof 12
FNIRT 非线性fnirt --in=mov.nii.gz --ref=MNI152_T1_1mm.nii.gz --aff=aff.mat --cout=warp --iout=out.nii.gz
Z 分数归一化fslmaths in.nii.gz -sub $MEAN -div $STD -mas mask.nii.gz out.nii.gz
直方图匹配(ANTs)ImageMath 3 out.nii.gz HistogramMatch mov.nii.gz ref.nii.gz
重采样为各向同性 1 mmmri_convert --voxel-size 1 1 1 in.nii.gz out.nii.gz
标准模板(FSL)
  • $FSLDIR/data/standard/MNI152_T1_1mm.nii.gz — 全头。
  • $FSLDIR/data/standard/MNI152_T1_1mm_brain.nii.gz — 仅脑部。
  • $FSLDIR/data/standard/MNI152_T1_2mm_brain.nii.gz — 2 mm,配准速度更快。

常见错误

  • 错误: 在偏置场校正之前进行去颅骨处理 正确: 始终先进行 N4 偏置场校正,再去除颅骨 原因: 偏置场估计需要包含颅骨和颈部的完整视野,才能拟合平滑的 B 样条;对已经去颅骨的脑部执行 N4 会产生边缘伪影,并留下残余不均匀性

  • 错误: 重采样标签图时使用线性/三线性插值 正确: 对任何离散标签体积,使用 NearestNeighbor(ANTs:-n NearestNeighbor;FSL:--interp=nn) 原因: 对整数分割标签进行线性插值会产生无意义的小数值,并破坏类别边界

  • 错误: 按正向 CLI 顺序指定 ANTs 变换(先仿射,再形变场) 正确: 使用 -t output_1Warp.nii.gz -t output_0GenericAffine.mat——在 CLI 中先写形变场,再写仿射 原因: antsApplyTransforms 按 CLI 顺序的逆序进行组合(最后一个 -t 最先应用);颠倒顺序会在不报错的情况下产生配准错误的输出

  • 错误: 将每个纵向时间点分别配准到 MNI 正确: 构建受试者专属的中点模板,将每个时间点配准到该模板,然后只将中点模板配准到 MNI 一次 原因: 独立配准会引入不对称的插值偏差,导致纵向测量(例如萎缩)失真

  • 错误: 在流程开始时跳过重新定向 正确: 对来自不同扫描仪/厂商的输入,始终先运行 fslreorient2std 原因: 不一致的存储方向会导致下游工具误解坐标系

  • 错误: 在包含背景的整个体积上计算 Z 分数归一化 正确: 仅在脑掩膜内计算均值/标准差(fslstats -k brain_mask.nii.gz) 原因: 纳入背景零值会拉低均值并抬高标准差,导致归一化不正确

参考文献

评论

支持 Markdown