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                    # カラーバーを表示
)

参考文献

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です