1. 目的
2. 準備
2.1. DIPYのインストール
2.2. 使用データ
2.3. 前処理
3. 拡散尖度イメージング(DKI)
3.1. 必要なパッケージをインポート
3.2. 画像およびMPG軸情報の読み込み
3.3. マスク画像の生成
3.4. モデルフィッティング
3.5. 拡散定量値の計算
3.6. NIfTI形式で保存
3.7. 結果
4. おまけ
1. 目的
- DIPYを用いた拡散尖度イメージング: DKI
2. 準備
2.1. DIPYのインストール
pip3 install dipy
2.2. 使用データ
データを次のフォルダ構造で用意する。
Study/ └── Subject ├── DWI.nii.gz # 拡散MRI ├── DWI_mask.nii.gz # 拡散MRIマスク画像 ├── bvals # b-values └── bvecs # b-vectors
2.3. 前処理
DKI(Diffusion Kurtosis Imaging)前に、拡散MRIの前処理をする。
- 拡散MRIのノイズ除去(Software: MRtrix, DIPY)
- ギブズのリンギングアーチファクト(Gibbs ringing)の除去(Software: MRtrix, DIPY)
- 拡散MRIのバイアス(信号ムラ)補正(Software: MRtrix)
- 拡散MRIの前処理 ~歪み・頭の動き・渦電流の補正(Software: FSL, MRtrix)
3. 拡散尖度イメージング(DKI)
Pythonで以下のコマンドを実行。
3.1. 必要なパッケージをインポート
import numpy as np import matplotlib.pyplot as plt import dipy.reconst.dki as dki from dipy.core.gradients import gradient_table from dipy.io.gradients import read_bvals_bvecs from dipy.io.image import load_nifti, save_nifti from dipy.segment.mask import median_otsu
3.2. 画像およびMPG軸情報の読み込み
DWI_FILE = 'DWI.nii.gz' BVALS_FILE = 'bvals' BVECS_FILE = 'bvecs' data, affine = load_nifti(DWI_FILE) bvals, bvecs = read_bvals_bvecs(BVALS_FILE, BVECS_FILE) gtab = gradient_table(bvals, bvecs)
3.3. マスク画像の生成
median_otsu
関数を用いて、b=0画像からマスク画像を生成する。vol_idx
には、b0 volumeのvolume indexを渡す。
maskdata, mask = median_otsu( data, vol_idx=np.where(bvals == 0)[0]) # , dilate=3
3.4. モデルフィッティング
以下のコマンドで、DKIのモデルフィッティングを実行。
dkimodel = dki.DiffusionKurtosisModel(gtab) dkifit = dkimodel.fit(maskdata)
3.5. 拡散定量値の計算
モデルフィッティングができたら、拡散定量値を算出する。
MK = dkifit.mk(0, 3) AK = dkifit.ak(0, 3) RK = dkifit.rk(0, 3)
脳周囲の背景では、フィッティングミスをしてnan
となる場合があるため、そのようなnan
を0に置き換える。
MK[np.isnan(MK)] = 0 AK[np.isnan(AK)] = 0 RK[np.isnan(RK)] = 0
3.6. NIfTI形式で保存
save_nifti
関数で、画像をNIfTI形式で保存する。
save_nifti('DWI_masked.nii.gz', maskdata.astype(np.float32), affine) save_nifti('DWI_mask.nii.gz', mask.astype(np.float32), affine) save_nifti('MK.nii.gz', MK.astype(np.float32), affine) save_nifti('AK.nii.gz', AK.astype(np.float32), affine) save_nifti('RK.nii.gz', RK.astype(np.float32), affine)
3.7. 結果
DKIによって算出された定量値画像は、以下の通り。
4. おまけ
DKIでもFA, MD, AD, RDを算出することができる。
# 拡散定量値を算出 FA = dkifit.fa MD = dkifit.md AD = dkifit.ad RD = dkifit.rd # nanを0に置換 FA[np.isnan(FA)] = 0 MD[np.isnan(MD)] = 0 AD[np.isnan(AD)] = 0 RD[np.isnan(RD)] = 0 # NIfTI形式で保存 save_nifti('FA.nii.gz', FA.astype(np.float32), affine) save_nifti('MD.nii.gz', MD.astype(np.float32), affine) save_nifti('AD.nii.gz', AD.astype(np.float32), affine) save_nifti('RD.nii.gz', RD.astype(np.float32), affine)
以下は、FA, MD, AD, RDをDTI(下段)とDKI(上段)で比較した図である。