You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于MNE-Python的源定位分析中顶点匹配问题求助

源定位分析中ROI顶点匹配错误的问题排查与解决

你的怀疑完全合理

HCPMMP1 atlas的顶点基于fsaverage全脑高分辨率网格(共163842个顶点),而你使用的标准源空间是低分辨率版本(左右半球各10242个顶点,总计20484个)。这两种网格的顶点编号不直接兼容:低分辨率顶点是高分辨率网格的采样子集,但绝对不是高分辨率的前20484个顶点。你直接用np.in1d匹配编号,只能筛选到极少数碰巧重叠的顶点,完全无法对应目标ROI的真实范围。

为什么所有ROI结果模式完全一致

正是因为顶点匹配错误,你筛选出的ROI_indices根本和目标ROI无关——甚至不同ROI筛选出的是同一批错误顶点(比如都恰好匹配到了枕区的少数顶点)。这些顶点正好来自你ERP聚类检验中存在差异的区域,所以不管选哪个ROI,计算出的平均活动都会带有相同的条件差异模式。

解决方法:用MNE原生函数匹配源空间与ROI顶点

核心是用MNE的label_src_vert_idx函数,直接获取低分辨率源空间中属于目标ROI的顶点索引,而非直接匹配高分辨率顶点编号。修正后的代码如下:

# 读取与生成Y时一致的标准源空间
src = mne.read_source_spaces('fsaverage', subjects_dir=subjects_dir)

# 提取HCPMMP1中的目标ROI标签
ROI_labels = mne.read_labels_from_annot('fsaverage', parc='HCPMMP1', 
                                        subjects_dir=subjects_dir, verbose=False)
selected_ROIs = ['V1']
selected_labels = [label for label in ROI_labels if any(roi in label.name for roi in selected_ROIs)]

# 获取ROI在源空间中的顶点索引
ROI_indices = []
for label in selected_labels:
    # 分别得到左右半球中属于该ROI的顶点位置索引
    idx_left, idx_right = mne.utils.label_src_vert_idx(label, src)
    ROI_indices.extend(idx_left)
    ROI_indices.extend(idx_right)
ROI_indices = np.unique(ROI_indices)  # 去重避免重复索引

# 提取ROI对应的源活动数据
X_ROI = Y[ROI_indices, :, :, :]

# 后续统计计算步骤
condition1_data = X_ROI[:, :, :, 0]
condition2_data = X_ROI[:, :, :, 1]

mean_condition1_data = np.mean(condition1_data, axis=(0, 1))
mean_condition2_data = np.mean(condition2_data, axis=(0, 1))

额外验证步骤

  • 检查len(ROI_indices)是否符合预期:比如V1在低分辨率源空间中大约有几百个顶点,而非之前的1100个错误值。
  • 用mne.viz.plot_labels([selected_labels[0]], src=src)可视化ROI位置,确认是否和预期脑区一致。

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 03:13:16