mcpField
R
radiology-preprocessing

radiology-preprocessing

github.com/awslabsデータ・データベース6881 回インストール4 週間前に更新
リポジトリ

radiology-preprocessing について

radiology-preprocessingは、構造脳MRIなどの放射線画像ボリュームを前処理するコマンド手順を提供するスキルです。セグメンテーション、位置合わせ研究、深層学習向けにNIfTI画像を準備する研究者を対象に、向きの調整から強度正規化までを扱います。

主な機能

  1. 01NIfTIボリュームの向き調整
  2. 02N4によるバイアスフィールド補正
  3. 03HD-BETまたはFSL BETによる脳抽出
  4. 04ANTsまたは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 シェルで実行してください。

使い方

標準的な 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 を使用します。最初の CUDA デバイスには -device 0 を指定してください。-mode fast -tta 0 を指定すると、品質の低下を最小限に抑えながら、テスト時拡張を無効にして約 5 倍高速化できます。

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

応答形式

  • まずユーザーが必要とするコマンドまたはコードを提示し、その後に説明します
  • 次の構成にします:入力の確認 → 動作するコード → 主要なパラメーターの説明 → 注意点
  • タスクごとに完全に動作する例を 1 つ示します。すべての代替手段は示しません
  • コードコメントは最小限かつ実用的にします(存在理由ではなく、内容を説明します)
  • 目安:コード 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 が最初に適用されます。移動画像から固定画像への変換では、アフィン変換がワープより先に適用されるため、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 スコア正規化(最も一般的):

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 で白質をセグメンテーションします。
  2. 白質マスク内の平均強度を計算します: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 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) 理由: 整数のセグメンテーションラベルに線形補間を適用すると、意味のない小数値が生じ、クラス境界が失われます

  • 誤り: ANTs 変換を CLI の順方向(アフィン変換の後にワープ)で指定する 正しい方法: -t output_1Warp.nii.gz -t output_0GenericAffine.mat を使う — CLI ではワープを先に、アフィン変換を後に指定する 理由: antsApplyTransforms は CLI の逆順(最後の -t が最初に適用される順序)で変換を合成します。順序を逆にすると、位置合わせのずれた出力が気づかないまま生成されます

  • 誤り: 経時的な各時点を個別に MNI に位置合わせする 正しい方法: 被験者固有の中間時点テンプレートを作成し、各時点をそこに位置合わせしてから、中間時点を一度だけ MNI に位置合わせする 理由: 個別に位置合わせすると、非対称な補間バイアスが生じ、経時的な測定値(萎縮など)が損なわれます

  • 誤り: パイプラインの開始時に再配向を省略する 正しい方法: 異なるスキャナー/ベンダーからの入力には、必ず最初に fslreorient2std を実行する 理由: 保存時の方向が一貫していないと、後続のツールが座標系を誤って解釈します

  • 誤り: 背景を含むボリューム全体を対象に Z スコア正規化を計算する 正しい方法: 脳マスク内のみで平均値/標準偏差を計算する(fslstats -k brain_mask.nii.gz) 理由: 背景のゼロ値を含めると平均値が低下し、標準偏差が過大になって、正しくない正規化結果になります

参考文献

コメント