第 2 层 · 基础配置层 · 第 6 步 / 共 25 步

步骤 06:电极定位

设置电极位置(蒙太奇)以便后续空间操作

🕐 25 分钟🎯 难度:入门🔗 核心 API:raw.set_montage⬅️ 前置:步骤 5

1. 目标

为每个通道赋予空间坐标(x, y, z),使后续的坏导插值、源定位、ICA 空间滤波都有可靠的几何依据。越早设置越好——延迟设置会导致插值偏差、坏导漏检。

2. 何时使用 / 何时跳过

  • 强烈建议使用:任何包含 EEG 通道的数据
  • 可跳过:纯诱发实验 ERP 研究 + 仅做时域平均(如不做源定位)——但插值精度会下降

3. 前置条件

  • 已执行步骤 04:通道列表已稳定
  • 通道名必须匹配 MNE 标准 montage 命名(如 'Fp1', 'Cz')

4. 核心代码

Python
import mne

# ====== 方式 A:使用 MNE 内置标准 montage(推荐新手) ======
# 常用标准 montage
montage = mne.channels.make_standard_montage('standard_1020')  # 10-20 系统
# 其他常见选项:'standard_1005', 'standard_alphabetic', 'standard_postfixed',
#              'standard_prefixed', 'biosemi16', 'biosemi32',
#              'biosemi64', 'biosemi128', 'biosemi160',
#              'easycap-M1', 'easycap-M10', 'easycap-M11',
#              'GSN-HydroCel-32', 'GSN-HydroCel-64_1.0',
#              'GSN-HydroCel-128', 'GSN-HydroCel-256'

# 查询当前支持的所有 montage:
print(mne.channels.get_builtin_montages())

raw.set_montage(montage, match_case=False, on_missing='warn')

# ====== 方式 B:从被试专属电极位置文件加载 ======
# Polhemus Isotrak 文件 → 用 mne.channels.read_dig_polhemus_isotrak
montage = mne.channels.read_dig_polhemus_isotrak('subject-01.isotrak')
raw.set_montage(montage)

# 其他格式:
# - .elp / .hsp / .locs / .sfp → 用 mne.channels.read_custom_montage()
montage = mne.channels.read_custom_montage('subject-01.elp')
raw.set_montage(montage)

# ====== 方式 C:从电极位置 CSV 自定义 montage ======
montage = mne.channels.make_dig_montage(
    ch_pos={
        'Fp1': (-0.027, 0.084, 0.054),
        'Fp2': (0.027, 0.084, 0.054),
        'Cz': (0.0, 0.0, 0.066),
        # ... 其余通道
    },
    coord_frame='head',
)
raw.set_montage(montage)

# ====== 方式 D:缺失通道的处理策略 ======
raw.set_montage(montage, on_missing='warn')    # 仅警告,不报错
raw.set_montage(montage, on_missing='ignore')  # 静默忽略

5. 参数详解

参数 含义 推荐值
match_case 是否忽略大小写匹配通道名 True(默认)/ False(处理 'FP1' vs 'Fp1')
match_alias 是否接受别名(如 'EEG 001' ≈ 'EEG001') False(默认)
on_missing 通道名找不到位置时如何处理 'raise'(默认)/ 'warn' / 'ignore'

⚠️ 真实签名中无 set_dig 参数——set_montage() 默认替换已有 digitization;如需保留 digitization 用 raw.set_montage(None) 后重新设置。
⚠️ coord_frame 也不是参数——montage 对象自身决定坐标系。

⚠️ 常见 montage 命名差异:标准 10-20 是 Fp1(大写 F、小写 p)、BioSemi 是 Fp1、BrainVision 可能输出 FP1。设 match_case=False 自动适配。

6. 验证方法

Python
# 验证 1:查看 montage
print(raw.get_montage())
# 输出应包含每个 EEG 通道的坐标

# 验证 2:定位点数与通道数一致
montage = raw.get_montage()
n_eeg = len([ch for ch in raw.info['chs'] if ch['kind'] == 2])  # FIFFV_EEG_CH = 2
n_dig = len([d for d in raw.info['dig'] if d['kind'] == 3])  # FIFFV_POINT_EEG = 3
print(f"EEG 通道数: {n_eeg}, 已定位数: {n_dig}")
# 期望:n_dig == n_eeg 或非常接近

# 验证 3:2D 头皮图
raw.plot_sensors(show_names=True)
# 期望:64 个电极均匀分布在 2D 圆周图上

7. 常见错误

错误 原因 解决方案
ValueError: DigMontage is empty 自定义 dict 给了空坐标或未提供 检查 ch_pos 字典
部分通道缺失 通道名与 montage 不匹配 用 match_case=False 或检查命名规范
通道位置全部错位(如左右颠倒) montage 坐标系方向与厂商文件不一致 检查 coord_frame,必要时手动镜像
RuntimeError: ... EEG average reference ... 后续平均参考失败 确认 EEG 通道都有坐标(无需 EOG/ECG)

8. 官方来源

资源类型 链接
set_montage https://mne.tools/stable/generated/mne.io.Raw.html#mne.io.Raw.set_montage
make_standard_montage https://mne.tools/stable/generated/mne.channels.make_standard_montage.html
make_dig_montage https://mne.tools/stable/generated/mne.channels.make_dig_montage.html
支持的 montage 列表 https://mne.tools/stable/generated/mne.channels.get_builtin_montages.html
教程 https://mne.tools/stable/auto_tutorials/forward/35_eeg_no_mri.html

9. 学术引用

无需单独引用。坐标系遵循 SEEG/EEG 行业标准(Stevens, 1937; American Clinical Neurophysiology Society, 1994)。