关于 radiology-preprocessing
radiology-preprocessing 提供结构性脑 MRI 及相关放射影像体数据的预处理命令序列,面向为分割、配准研究或深度学习训练准备 NIfTI 影像的研究人员,涵盖从重定向到强度归一化的步骤。
主要功能
- 01重定向 NIfTI 体数据
- 02使用 N4 校正偏置场
- 03使用 HD-BET 或 FSL BET 提取脑部
- 04使用 ANTs 或 FSL 配准图像
- 05归一化强度并重采样体数据
适用场景
- 01为分割准备 MRI 体数据
- 02对齐不同受试者或模态的扫描
- 03为机器学习模型归一化图像
- 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
白质归一化(不受扫描仪影响):
- 使用 FSL FAST 或 FreeSurfer 分割白质(WM)。
- 计算 WM 掩膜内的平均强度:
fslstats brain.nii.gz -k wm_mask.nii.gz -M。 - 用该平均值除体积图像。
直方图匹配 — 将强度直方图与参考受试者匹配:
- 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 mm | mri_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) 原因: 纳入背景零值会拉低均值并抬高标准差,导致归一化不正确
参考文献
- HD-BET:Isensee 等,Hum Brain Mapp 2019,https://doi.org/10.1002/hbm.24750
- ANTs:Avants 等,NeuroImage 2011,https://doi.org/10.1016/j.neuroimage.2010.09.025
- N4 偏置校正:Tustison 等,IEEE TMI 2010,https://doi.org/10.1109/TMI.2010.2046908
- FSL:Jenkinson 等,NeuroImage 2012,https://doi.org/10.1016/j.neuroimage.2011.09.015