Pythonで脳を研究する 13
引き続きPython MNEで色々と試している.
今回はコアレジストレーションのプロットサンプルコードを出してみた.
import nibabel as nib
import mne
import numpy as np
from pathlib import Path
# 被験者の情報とディレクトリの指定
subjects_dir = Path(mne.datasets.sample.data_path()) / "subjects"
subject = "sample"
# MRIファイルの読み込み(FreeSurfer処理済み T1.mgz)
mri_fname = subjects_dir / subject / "mri" / "T1.mgz"
mri = nib.load(str(mri_fname))
# MRIヘッダーから vox2ras_tkr 変換行列を取得し、mri.affine の逆行列と掛け合わせる
# 注意: nibabel は単位が mm、MNE は m を用いるため変換する
trans = mri.header.get_vox2ras_tkr() @ np.linalg.inv(mri.affine)
trans[:3, 3] /= 1000.0 # mm → m へ変換
trans = mne.transforms.Transform("head", "mri", trans)
# evoked情報の読み込み(ここではサンプルデータの evoked を使用)
# ※ 本来は対象被験者 "sub-002" の evoked が必要ですが、サンプルデータとして "sample" を使用します
evoked_fname = (Path(mne.datasets.sample.data_path()) / "MEG" / "sample" / "sample_audvis-ave.fif")
evoked = mne.read_evokeds(str(evoked_fname), baseline=(None, 0), proj=True, verbose=False)[0]
# BEMソリューションとソース空間ファイルのパスを指定(被験者 "sub-002" のもの)
bem = subjects_dir / subject / "bem" / f"{subject}-5120-bem-sol.fif"
src = subjects_dir / subject / "bem" / f"{subject}-oct-6-src.fif"
# コアレジストレーションの可視化
mne.viz.plot_alignment(
evoked.info,
subjects_dir=str(subjects_dir),
subject=subject,
trans=trans,
surfaces={"head": 0.1, "inner_skull": 0.2, "white": 1.0},
meg=["helmet", "sensors"],
verbose="error",
bem=str(bem),
src=str(src),
)

参考文献
- https://mne.tools/stable/index.html
- Robert A. Seymour, Nicholas Alexander, Stephanie Mellor, George C. O’Neill, Tim M. Tierney, Gareth R. Barnes, and Eleanor A. Maguire. Interference suppression techniques for OPM-based MEG: Opportunities and challenges. NeuroImage, 247:118834, February 2022. doi:10.1016/j.neuroimage.2021.118834.