【FSL】FSLを用いた拡散MRIの前処理(歪み補正&頭の動き補正)


1. 目的
2. 脳画像解析における拡散MRIの問題点
2.1. 磁化率効果に起因する画像の幾何学的歪み(位相エンコードをAP方向として撮像した場合)
2.2. 撮像中の頭の動き
3. 使用するソフトウェア
3.1. TOPUP
3.1.1. TOPUP
3.2. –indexについて
3.2.1. TOPUP
3.3. EDDY
3.4. 頭の動き補正の効果
4. サンプルコード



1. 目的

  • 拡散MRIの前処理(歪み補正&頭の動き補正)

2. 脳画像解析における拡散MRIの問題点

拡散MRI (Diffusion MRI) はEcho Planer Imaging (EPI)というシーケンスで撮像されているが、EPIは磁化率効果による影響に敏感であり、画像が幾何学的に歪むという問題がある。

拡散MRIでは、水分子拡散状態を可視化する技術である。水分子の動きをとらえるためには、Motion Probing Gradient (MPG)という水分子の動きを検出するための傾斜磁場を何種類(何軸)も用いる。その結果、脳の拡散MRIでは脳画像というVolumeデータが、MPGの数に応じて複数Volume撮像されることになるが、撮像中に頭が動くことによってVolume間の位置が合わないという問題がある。特に脳画像解析では、Voxel単位という小さなマスの中で解析をするので、撮像中の頭の動きで生じる、Volume間の位置ずれは解析結果に影響する。

そこで、拡散MRIで得られた脳画像に対して、「画像の歪み補正」と「頭の動き補正」をする。

2.1. 磁化率効果に起因する画像の幾何学的歪み(位相エンコードをAP方向として撮像した場合)

2.2. 撮像中の頭の動き

3. 使用するソフトウェア

拡散MRIの前処理にはFSLの、TOPUPおよびEDDY

3.1. TOPUP

TOPUPは、静磁場の不均一(non-zero off-resonance fields)による画像の幾何学的歪みを補正する。

TOPUPの基本的な使い方は次の通り。

topup --imain=<Input image> --datain=<Acquisition_parameters file> --config=b02b0.cnf --out=<Output prefix>

各引数で必要なファイルは、次の通り。

  • –imain: 位相エンコード (PE)が双方向で対になったペア画像 (PEがAP方向の画像 (ex. b=0) とPA方向の画像 (ex. b=0) )。通常b値=0の画像を用いる。
  • –datain: 拡散MRI撮像パラメータ (PE方向およびTotal readout time)が記載されたテキストファイル
  • –config: TOPUPの設定ファイル
  • –out: 出力ファイルの接頭辞

TOPUPによる補正を拡散MRI画像に含まれるすべてのVolumeデータに適応したい場合、applytopupを用いる。

applytopup --imain=<Input image> --datain=<Acquisition_parameters file> --inindex=<Index file> --topup=<TOPUP output prefix> --method=<Resampling method> --out=<Output prefix>
  • –imain: 位相エンコード (PE)が双方向で対になったペア画像 (PEがAP方向の画像 (ex. b=0) とPA方向の画像 (ex. b=0) )。通常b値=0の画像を用いる。
  • –datain: 拡散MRI撮像パラメータ (PE方向およびTotal readout time)が記載されたテキストファイル
  • –inindex: –imainで入力した拡散MRI画像の撮像パラメータが–acqpで指定されたAcquisition_parametersの内どちらのものか、というインデックス
  • –method: 画像のリサンプリン方法
  • –topup: TOPUPの出力ファイルの接頭辞
  • –out: applytopupの出力ファイルの接頭辞
3.1.1. –datain(Acquisition_parameters)について

Acquisition_parametersは、拡散MRI撮像で用いるEPIシーケンスのパラメータである。

必要な情報は次の2つである。

  • 位相エンコード方向 (x, y, z)
  • Total readout time (s)

位相エンコード方向は、x, y, zで表現する。APで撮像した場合は「0 -1 0」、PAで撮像した場合は「0 1 0」となる。

Total readout timeは、次の式で算出できる。

例えば、–imainの入力画像がPEがAPの画像, PAの画像の順番で1 volumeずつマージされている4D画像であり、Echo spacingが0.040であるとすると、Acquisition_parametersは次のように表現する。これをテキストファイル (.txt) として保存して–datainに入力する。

0 -1 0 0.046
0  1 0 0.046

3.2. –indexについて

EDDYでは、拡散MRI画像 (4D画像)のすべてのVolumeに対して補正を実行する。そのため、各Volumeがどのような撮像パラメータ(PE方向およびTotal readout time)で撮像されたものかを入力する必要がある。そこで、–acqpで指定されたAcquisition_parametersをインデックスで用いて参照する。これがインデックスをファイルを入力する理由である。

例えば、64 Volumesの拡散MRI画像があり、1~32 VolumesはPEがAP方向で撮像した画像データ、33~64 VolumesはPEがPA方向で撮像した画像データである場合を考える。

Acquisition_parametersは次のようであるとする。1行目はAP方向の情報、2行目はPA方向の情報である。

0 -1 0 0.046
0  1 0 0.046

この場合のindexファイルは次のようになる。これをテキストファイル (.txt) として保存して–indexに入力する。

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 
3.2.1. 画像の歪み補正の効果

3.3. EDDY

EDDYは、渦電流 (Eddy current) に起因する動的な磁場の不均一や頭の動きを補正する。

EDDYの、基本的な使い方は次の通り。

eddy --imain=<Input image> --mask=<Input brain mask> --acqp=<Acquisition_parameters file> --index=<Index file> --bvecs=<b-vector file> --bvals=<b-values file> --topup=<TOPUP output prefix> --out=<Output prefix>
  • –imain: 拡散MRI画像(すべてのVolume)
  • –mask: 脳実質のマスク画像(Binaryファイル)
  • –acqp: 拡散MRI撮像パラメータ (PE方向およびTotal readout time)が記載されたテキストファイル
  • –index: –imainで入力した拡散MRI画像の撮像パラメータが–acqpで指定されたAcquisition_parametersの内どちらのものか、というインデックス
  • –bvecs: b-vectorが記載されたテキストファイル
  • –bvalues: b-valuesが記載されたテキストファイル
  • –topup: TOPUPの出力ファイルの接頭辞
  • –out: EDDYの出力ファイルの接頭辞

3.4. 頭の動き補正の効果


4. サンプルコード

以下のコードは、前処理前の拡散MRI画像データからTOPUP/EDDYによる補正を実行するものである。

#!/bin/sh

Usage() {
	cat <<EOF

Usage: scr [work patient directory]

EOF
	exit 1
}
# ディレクトリ構造
# Subj001
# ├── DWI_AP.nii.gz: Diffusion MRI (Phase encoding direction: AP)
# ├── b0_PA.nii.gz: b=0 (Phase encoding direction:PA)
# ├── bvals.bval: b-values
# └── bvecs.bvec: b-vectors

# Make pair b0 image using two types of phase encoding directoins (AP/PA)
## b0_APの作成
fslroi DWI_AP b0_AP 0 1
## b0_PAの作成
fslroi b0_PA b0_PA 0 1
fslmerge -t both_b0 b0_AP b0_PA

# TOPUP
## Acquisition_parameters
## EPI factor = 130
## Echo Spacing =0.59
printf "0 -1 0 0.07378\n0 1 0 0.07378" >acquisition_parameters.txt

echo "TOPUP processing..."
topup --imain=both_b0 --datain=acquisition_parameters.txt --config=b02b0.cnf --out=topup_results --fout=field --iout=unwarped_images
echo "TOPUP done"

# Apply TOPUP
echo "Applying TOPUP..."
applytopup --imain=DWI_AP --datain=acquisition_parameters.txt --inindex=1 --topup=topup_results --method=jac --out=applytopup_results
echo "Applying TOPUP done"

# EDDY
fslmaths unwarped_images -Tmean unwarped_images
bet unwarped_images unwarped_images_brain -f 0.2 -m

vol_n=$(fslhd DWI_AP |grep ^dim4|tr -s "\t" " "|cut -d " " -f2)
array=()
for i in $(seq 0 $(( vol_n-1 ))); do
	array+=(1)
done
echo "${array[@]}" >index.txt

echo "EDDY processing..."
eddy --imain=DWI_AP --mask=unwarped_images_brain_mask --acqp=acquisition_parameters.txt --index=index.txt --bvecs=bvecs.bvec --bvals=bvals.bval --topup=topup_results --out=eddy_result_data
echo "EDDY done"

Print Friendly, PDF & Email

3 thoughts on “【FSL】FSLを用いた拡散MRIの前処理(歪み補正&頭の動き補正)

  1. ピングバック: 【FSL】XTRACTを用いたトラクトグラフィー

  2. 先日のABiSではお世話になりありがとうございました。Lin4neuro20.04でのDWI前処理について質問です。dwidenoise, mrdegibbsの後のdwifslpreproc補正ですが、手元にある位相エンコードAP1方向のみのdata(dwi_den_unr.mif)で下記コマンド,dwifslpreproc dwi_den_unr.mif dwi_den_unr_preproc.mif -pe_dir AP -rpe_none -eddy_options “–slm=linear” -readout_time 0.047を実行すると、-eddy_optionsのエラーが出ます。dwifslpreproc -help を見ると、(中略) The script will attempt to run the CUDA version of eddy; if this does not succeed for any reason, or is not present on the system, the CPU version will be attempted instead. By default, the CUDA eddy binary found that indicates compilation against the most recent version of CUDA will be attempted; this can be over-ridden by providing a soft-link “eddy_cuda” within your path that links to the binary you wish to be executed.と出ます。
     根本先生の「Ubuntu 20.04/18.04環境でeddy_cuda10.2( in FSL 6.0.5.x),PyTorch, Tensorflow2を使えるようにCUDA10.2,11.0,11.5をセットアップする方法」を実行してみましたが、invida-smi確認時に、CUDA driberが無いことを指摘されます。使用PCがMacOSCatalina10.15.7のため、CUDAdriver for Macをインストールしても起動しません。
     以上のような環境で、位相エンコードがAP1方向のdataでdwifslpreproc,eddy_optionsを実行する方法をご教示いただけましたら幸いです。宜しくお願いいたします。

    • eddy_options のエラーではなく、Warningではないでしょうか?

      – 残念なことに、現在、VirtualBoxで、GPUは使えません。したがって、eddy_cudaは使えません。
      – さらに残念なことに、AppleとNVIDIAは仲違いをしているので、nVIDIAはApple用のGPUドライバを提供していません。
       つまり、現行のmacOSでは、eddy_cudaを使用することができません。

      なので、eddy_cudaは使えず、helpにあるとおり、eddy_cudaが使えない場合は、eddy_openmpを使用します。
      eddy_openmpは環境にもよりますが、1例4−7時間かかります。

      上田先生のチュートリアルのコマンドはしっかり動くことを確認しています。

      もし、Warningではなく、エラーでプログラムが止まっているようでしたら、そのエラーメッセージをそのまま貼り付けていただけませんか?
      よろしくお願いします。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください