Pythonで脳を研究する 15
引き続きPython MNEで色々と試している.
今回はGlass Brain Plot(グラスブレインプロット)のプロットサンプルコードを出してみた.
import nibabel as nib
import numpy as np
from nilearn.plotting import plot_glass_brain
import mne
from mne.datasets import sample
from pathlib import Path
# --- ディレクトリとファイルの設定 ---
data_path = Path(mne.datasets.sample.data_path())
subjects_dir = data_path / "subjects"
subject = "sample" # サンプルデータでは "sample" です
# EEG位置付きMRI(FreeSurfer処理済み T1.mgz)のファイルパス
fname_T1_electrodes = subjects_dir / subject / "mri" / "T1.mgz"
# --- MRI画像の読み込み ---
img = nib.load(str(fname_T1_electrodes)) # 元のMRI(RAS座標系)
# --- RAS-to-MNI変換の取得 ---
# FreeSurferから、RAS座標系からMNI座標系への変換行列を読み込む
ras_mni_t = mne.transforms.read_ras_mni_t(subject, subjects_dir=str(subjects_dir))
# --- MNI座標系用のアフィン変換の計算 ---
# img.affine は voxel-to-RAS マッピング (単位: mm)
# これに ras_mni_t["trans"] を掛けることで voxel-to-MNI 変換になる
mni_affine = np.dot(ras_mni_t["trans"], img.affine)
# nibabel は mm 単位のアフィンを返すため、MNEでは m 単位を使う必要がある場合は調整する
# (ここでは、変換行列が既に適切なスケールになっている前提です)
# --- MNI座標系のMRI画像の作成 ---
# img.dataobj ではなく get_fdata() を使ってデータを取得
img_mni = nib.Nifti1Image(img.get_fdata(), mni_affine)
# --- ガラスブレインプロット ---
plot_glass_brain(
img_mni,
cmap="hot_black_bone", # カラーマップの指定
threshold=0.0, # 表示する閾値(ここでは0以上の値を表示)
black_bg=True, # 背景を黒に設定
resampling_interpolation="nearest", # 補間方法の指定
colorbar=True # カラーバーを表示
)

参考文献