非官方中文翻译 本页译自 MNE-Python 官方文档: 查看英文原文 ↗。 文档版权归 MNE Developers 所有(BSD-3-Clause)。

使用自动配准方法#

本示例展示如何使用配准函数,通过脚本自动完成 MEG-MRI 配准。通常,这种方法得到的结果与手动配准的结果一致 [1]。

警告

配准质量在很大程度上取决于被试准备阶段采集的头形点(HSP)质量以及 T1 加权 MRI 的质量。请谨慎使用,并检查配准误差。

# Author: Jon Houck <jon.houck@gmail.com>
#         Guillaume Favelier <guillaume.favelier@gmail.com>
#
# License: BSD-3-Clause
# Copyright the MNE-Python contributors.

import numpy as np

import mne
from mne.coreg import Coregistration
from mne.io import read_info

data_path = mne.datasets.sample.data_path()
# data_path and all paths built from it are pathlib.Path objects
subjects_dir = data_path / "subjects"
subject = "sample"

fname_raw = data_path / "MEG" / subject / f"{subject}_audvis_raw.fif"
info = read_info(fname_raw)
plot_kwargs = dict(
    subject=subject,
    subjects_dir=subjects_dir,
    surfaces="head-dense",
    dig=True,
    eeg=[],
    meg="sensors",
    show_axes=True,
    coord_frame="meg",
)
view_kwargs = dict(azimuth=45, elevation=90, distance=0.6, focalpoint=(0.0, 0.0, 0.0))
Read a total of 3 projection items:
    PCA-v1 (1 x 102)  idle
    PCA-v2 (1 x 102)  idle
    PCA-v3 (1 x 102)  idle

建立配准模型#

fiducials = "estimated"  # get fiducials from fsaverage
coreg = Coregistration(info, subject, subjects_dir, fiducials=fiducials)
fig = mne.viz.plot_alignment(info, trans=coreg.trans, **plot_kwargs)
25 automated coreg
    Triangle neighbors and vertex normals...
Using high resolution head model in /home/circleci/mne_data/MNE-sample-data/subjects/sample/surf/lh.seghead
    Triangle neighbors and vertex normals...
Estimating fiducials from fsaverage.
Using lh.seghead for head surface.
Channel types:: grad: 203, mag: 102

使用基准点进行初始拟合#

首先仅使用 3 个基准点进行一次配准拟合。这样可以在使用头形点进一步优化之前找到一个良好的初始解。这也有助于检测距离皮肤表面过远的离群头形点。例如可以看到,在该数据集上就存在这样一个点,我们将在后续拟合中将其剔除。

25 automated coreg
Aligning using fiducials
Start median distance:  17.29 mm
End   median distance:  11.11 mm
Using lh.seghead for head surface.
Channel types:: grad: 203, mag: 102

使用 ICP 精细优化#

接下来,我们使用迭代最近点(ICP)算法迭代若干次来精细优化该变换。由于初始基准点来自 fsaverage,而不是在 GUI 中精确手动选取的,因此我们在拟合时降低了鼻根点(nasion)的权重。

coreg.fit_icp(n_iterations=6, nasion_weight=2.0, verbose=True)
fig = mne.viz.plot_alignment(info, trans=coreg.trans, **plot_kwargs)
25 automated coreg
Aligning using ICP
Start     median distance:  11.11 mm
  ICP  1  median distance:   6.57 mm
  ICP  2  median distance:   4.39 mm
  ICP  3  median distance:   3.48 mm
  ICP  4  median distance:   2.86 mm
  ICP  5  median distance:   2.43 mm
  ICP  6  median distance:   2.14 mm
End       median distance:   2.14 mm
Using lh.seghead for head surface.
Channel types:: grad: 203, mag: 102

剔除异常点#

现在可以非常清楚地看到,有一个点是离群点,应当将其剔除。

coreg.omit_head_shape_points(distance=5.0 / 1000)  # distance is in meters
Coregistration: Excluding 3 head shape points with distance >= 0.005 m.

最终配准拟合#

coreg.fit_icp(n_iterations=20, nasion_weight=10.0, verbose=True)
fig = mne.viz.plot_alignment(info, trans=coreg.trans, **plot_kwargs)
mne.viz.set_3d_view(fig, **view_kwargs)

dists = coreg.compute_dig_mri_distances() * 1e3  # in mm
print(
    f"Distance between HSP and MRI (mean/min/max):\n{np.mean(dists):.2f} mm "
    f"/ {np.min(dists):.2f} mm / {np.max(dists):.2f} mm"
)
25 automated coreg
Aligning using ICP
Start     median distance:   2.00 mm
  ICP  1  median distance:   1.99 mm
  ICP  2  median distance:   2.02 mm
  ICP  3  median distance:   1.79 mm
  ICP  4  median distance:   1.78 mm
  ICP  5  median distance:   1.77 mm
End       median distance:   1.77 mm
Using lh.seghead for head surface.
Channel types:: grad: 203, mag: 102
Distance between HSP and MRI (mean/min/max):
2.00 mm / 0.19 mm / 6.37 mm

警告

别忘了保存得到的 trans 矩阵!

mne.write_trans('/path/to/filename-trans.fif', coreg.trans)

注意

mne.coreg.Coregistration 类可以通过 set_scale_mode() 计算 MRI 缩放因子,这对于创建替代 MRI 被试很有用,即使用与受试者头部数字化结果相匹配的模板 MRI(例如来自 mne.datasets.fetch_infant_template() 的模板)。如需进行缩放,应使用 mne.scale_mri() 创建经过缩放的替代 MRI。

参考文献#

脚本总运行时间:(0 分钟 18.812 秒)

图库由 Sphinx-Gallery 生成