非官方中文翻译
本页译自 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)

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 个基准点进行一次配准拟合。这样可以在使用头形点进一步优化之前找到一个良好的初始解。这也有助于检测距离皮肤表面过远的离群头形点。例如可以看到,在该数据集上就存在这样一个点,我们将在后续拟合中将其剔除。
coreg.fit_fiducials(verbose=True)
fig = mne.viz.plot_alignment(info, trans=coreg.trans, **plot_kwargs)

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)

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"
)

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
注意
mne.coreg.Coregistration 类可以通过 set_scale_mode() 计算 MRI 缩放因子,这对于创建替代 MRI 被试很有用,即使用与受试者头部数字化结果相匹配的模板 MRI(例如来自 mne.datasets.fetch_infant_template() 的模板)。如需进行缩放,应使用 mne.scale_mri() 创建经过缩放的替代 MRI。
参考文献#
脚本总运行时间:(0 分钟 18.812 秒)