偶极取向在分布式源定位中的作用
更多技术干货第一时间送达
Hello,大家好!
Rose小哥今天分享一下偶极取向在分布式源定位中的作用。
关于偶极子源定位问题,可以查看《脑电偶极子源定位问题》。
在脑电定位研究中,一般都用电流偶极子作为源的模型。电流偶极子是两个相距很近带有等量异性电量的点电荷,且其电量随时间而变化(相当于两点之间有电流)。
采用电流偶极子作为源模型的原因有:
简单性,一个电流偶极子由六个参数就可完全确定(三个位置坐标、三个极矩坐标);
物理合理性的考虑
从神经电生理的角度考虑:单一神经元的电活动可以用一个电流偶极子来描述,因此应根据激发源区域选取偶极子源模型。
单偶极子源
该模型的中心思想是:用一个电流偶极子模拟一个局域的脑神经活动。
缺点:当兴奋皮层区域足够大或者兴奋区域非单一时,单偶极子的模拟就不够准确了。
多偶极子源
该模型主要应用于兴奋皮层区域比较大或者兴奋区域非单一的情况下。
缺点:由于实际观测数据有限,且含有各种噪声干扰,所以不容易找到很好的多偶极子定位方法。
常见的多偶极子源模型有:双偶极子源、三偶极子源、线性偶极子源、圆盘式偶极子源
双偶极子源带有十二个参数,两个偶极子间的距离大于大脑皮层半径的六分之一;
三偶极子源带有十八个参数,限制条件是每两个偶极子间的距离大于大脑皮层半径的六分之一;
圆盘式偶极子源一般设定其有7 个偶极子
线性偶极子源一般设定其有9 个偶极子
当以分布式方式(MNE/dSPM/sLORETA/eLORETA)进行源定位时,源空间被定义为一个由偶极子构成的网格,它跨越了皮层的大部分。这些偶极子有位置和方向。
在本教程中,我们将研究可用于限制偶极子方向以及对最终源估计的影响的各种选项。
# 导入工具包
import mne
import numpy as np
from mne.datasets import sample
from mne.minimum_norm import make_inverse_operator, apply_inverse
from mayavi import mlab
导入数据
# 导入数据
data_path = sample.data_path()
# 读取默认路径中的文件
evokeds = mne.read_evokeds(data_path + '/MEG/sample/sample_audvis-ave.fif')
left_auditory = evokeds[0].apply_baseline()
fwd = mne.read_forward_solution(
data_path + '/MEG/sample/sample_audvis-meg-eeg-oct-6-fwd.fif')
mne.convert_forward_solution(fwd, surf_ori=True, copy=False)
noise_cov = mne.read_cov(data_path + '/MEG/sample/sample_audvis-cov.fif')
subject = 'sample'
subjects_dir = data_path + '/subjects'
trans_fname = data_path + '/MEG/sample/sample_audvis_raw-trans.fif'
源空间
让我们首先检查mne.setup_source_space()函数构造的源空间,偶极子按一定的间隔放置在皮层上,由间隔参数决定。源空间没有定义这些偶极子的方向。
lh = fwd['src'][0] # 可视化左半球
verts = lh['rr'] # 源空间的顶点
tris = lh['tris'] # 由三个顶点组成的三角形组
dip_pos = lh['rr'][lh['vertno']] # 偶极子的位置
dip_ori = lh['nn'][lh['vertno']]
dip_len = len(dip_pos)
dip_times = [0]
white = (1.0, 1.0, 1.0) # 白色的RGB值
actual_amp = np.ones(dip_len) # 创建偶极子实例
actual_gof = np.ones(dip_len) # 其他GOF创建偶极子实例
dipoles = mne.Dipole(dip_times, dip_pos, actual_amp, dip_ori, actual_gof)
trans = mne.read_trans(trans_fname)
fig = mne.viz.create_3d_figure(size=(600, 400), bgcolor=white)
coord_frame = 'mri'
# 绘制皮层
fig = mne.viz.plot_alignment(subject=subject, subjects_dir=subjects_dir,
trans=trans, surfaces='white',
coord_frame=coord_frame, fig=fig)
# 用小红点标记偶极子的位置
fig = mne.viz.plot_dipole_locations(dipoles=dipoles, trans=trans,
mode='sphere', subject=subject,
subjects_dir=subjects_dir,
coord_frame=coord_frame,
scale=7e-4, fig=fig)
mne.viz.set_3d_view(figure=fig, azimuth=180, distance=0.25)
mlab.show()
固定偶极子方向
源空间定义了偶极子的位置,而反算子定义了偶极子的可能方向。其中一个选项是指定一个固定的方向。由于产生MEG和EEG信号的神经流大多垂直于皮层1,因此限制偶极子的方向会对源估计产生有用的限制。
通过在调用mne.minimum_norm.make_inverse_operator()时指定fixed = True,可以将偶极子方向固定为与皮层表面正交,向外指向。让我们直观地看一下:
代码如下:
fig = mne.viz.create_3d_figure(size=(600, 400))
# 绘制皮层
fig = mne.viz.plot_alignment(subject=subject, subjects_dir=subjects_dir,
trans=trans,
surfaces='white', coord_frame='head', fig=fig)
# 将偶极子显示为沿表面法线方向的箭头
fig = mne.viz.plot_dipole_locations(dipoles=dipoles, trans=trans,
mode='arrow', subject=subject,
subjects_dir=subjects_dir,
coord_frame='head',
scale=7e-4, fig=fig)
mne.viz.set_3d_view(figure=fig, azimuth=180, distance=0.1)
mlab.show()
"""
以这种方式限制偶极子的方向会导致对样本数据进行以下源估计:
"""
# 计算样本数据集中“左听觉”条件的源估计。
inv = make_inverse_operator(left_auditory.info, fwd, noise_cov, fixed=True)
stc = apply_inverse(left_auditory, inv, pick_ori=None)
# 可视化其高峰活动时刻
_, time_max = stc.get_peak(hemi='lh')
brain_fixed = stc.plot(surface='white', subjects_dir=subjects_dir,
initial_time=time_max, time_unit='s', size=(600, 400))
mlab.show()
现在将估计电流的方向限制为两个方向:向内和向外。在该图中,蓝色区域表示电流向内流动,红色区域表示电流向外流动。给定皮质的曲率,偶极子群往往指向同一方向:传感器拾取的电磁场方向。
偶极子取向松散
强制源极偶极子严格与皮质正交,使源极估计值对沿皮质的偶极子间距敏感,因为皮质的曲率在每个〜10平方毫米的贴片内变化。此外,当严格限制源偶极子方向时,MEG / EEG和MRI坐标系的失准更为严重。
为了解除对偶极子方向的限制,逆算子可以放置一个而不是三个偶极子。在源空间定义的每个位置。这三个偶极子正交放置以形成笛卡尔坐标系。让我们直观地看一下:
fig = mne.viz.create_3d_figure(size=(600, 400))
# 绘制皮层
fig = mne.viz.plot_alignment(subject=subject, subjects_dir=subjects_dir,
trans=trans,
surfaces='white', coord_frame='head', fig=fig)
# 显示在源空间中每个位置定义的三个偶极子
fig = mne.viz.plot_alignment(subject=subject, subjects_dir=subjects_dir,
trans=trans, fwd=fwd,
surfaces='white', coord_frame='head', fig=fig)
mne.viz.set_3d_view(figure=fig, azimuth=180, distance=0.1)
mlab.show()
在计算源估计时,三个偶极子中的每一个的活动都被分解为单个矢量的XYZ分量,这将导致对样本数据进行以下源估计:
代码如下:
# 获取偶极子方向松散的逆算子
inv = make_inverse_operator(left_auditory.info, fwd, noise_cov, fixed=False,
loose=1.0)
# 计算源估计,表明我们需要一个向量解
stc = apply_inverse(left_auditory, inv, pick_ori='vector')
# 可视化其高峰活动时刻
_, time_max = stc.magnitude().get_peak(hemi='lh')
brain_mag = stc.plot(subjects_dir=subjects_dir, initial_time=time_max,
time_unit='s', size=(600, 400), overlay_alpha=0)
mlab.show()
限制方向,而不是修复它们
通常,最好的结果是允许偶极子有一定的自由取向,但不要偏离与皮质垂直的取向太远。minimum_norm.make_inverse_operator()的loose参数允许您指定0(固定)和1(无限制或"自由")之间的值,以指示允许方向偏离表面法线的量。
# 设置为0.2(默认值)
inv = make_inverse_operator(left_auditory.info, fwd, noise_cov, fixed=False,
loose=0.2)
stc = apply_inverse(left_auditory, inv, pick_ori='vector')
# 可视化其高峰活动时刻
_, time_max = stc.magnitude().get_peak(hemi='lh')
brain_loose = stc.plot(subjects_dir=subjects_dir, initial_time=time_max,
time_unit='s', size=(600, 400), overlay_alpha=0)
mlab.show()
丢弃偶极子方向信息
通常,对数据的进一步分析不需要关于偶极子方向的信息,而是需要它们的大小。函数的pick_ori参数允许您指定是返回完整的向量解("vector"),还是返回向量的大小(无,默认值),还是只返回垂直于皮层方向的活动("normal")。
# 只保留向量的大小
stc = apply_inverse(left_auditory, inv, pick_ori=None)
# 可视化其高峰活动时刻
_, time_max = stc.get_peak(hemi='lh')
brain = stc.plot(surface='white', subjects_dir=subjects_dir,
initial_time=time_max, time_unit='s', size=(600, 400))
mlab.show()
参考文献
1.Hämäläinen, M. S., Hari, R., Ilmoniemi, R. J., Knuutila, J., & Lounasmaa, O. V. “Magnetoencephalography - theory, instrumentation, and applications to noninvasive studies of the working human brain”, Reviews of Modern Physics, 1993. https://doi.org/10.1103/RevModPhys.65.413
2.Lin, F. H., Belliveau, J. W., Dale, A. M., & Hämäläinen, M. S. (2006). Distributed current estimates using cortical orientation constraints. Human Brain Mapping, 27(1), 1–13. http://doi.org/10.1002/hbm.20155
更多阅读
华中科技大学研究团队揭示了基于EEG的脑机接口中的安全性问题