Python 利用MNE实现自定义矩阵大脑拓扑图的绘制

这篇具有很好参考价值的文章主要介绍了Python 利用MNE实现自定义矩阵大脑拓扑图的绘制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目的:利用MNE实现自定义矩阵大脑拓扑图的绘制

0、加载python库

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import mne

%matplotlib qt

1、获取可用的电极布局系统

在使用MNE进行EEG信号的可视化操作时,往往需要导入对应电极的位置信息,MNE中有内置的常见电极布局系统,通过调用下面指令进行导入:

mne.channels.get_builtin_montages()

# output:
['standard_1005',
 'standard_1020',
 'standard_alphabetic',
 'standard_postfixed',
 'standard_prefixed',
 'standard_primed',
 'biosemi16',
 'biosemi32',
 'biosemi64',
 'biosemi128',
 'biosemi160',
 'biosemi256',
 'easycap-M1',
 'easycap-M10',
 'EGI_256',
 'GSN-HydroCel-32',
 'GSN-HydroCel-64_1.0',
 'GSN-HydroCel-65_1.0',
 'GSN-HydroCel-128',
 'GSN-HydroCel-129',
 'GSN-HydroCel-256',
 'GSN-HydroCel-257',
 'mgh60',
 'mgh70',
 'artinis-octamon',
 'artinis-brite23',
 'brainproducts-RNP-BA-128']

从上面的输出可以看出,MNE中共有27个可用的电极布局系统,具体选择哪一个要看你采集数据时使用的脑电帽电极布局系统是哪个。

2、利用MNE自带的电极布局系统对矩阵进行通道定位

2.1 加载脑地形图位置坐标并可视化

int32_montage = mne.channels.make_standard_montage('biosemi32')
int32_montage.plot()
plt.show()

python画系统拓扑图,python,矩阵

2.2 构建自定义32导联的字典,导联名称与导联权重一一对应

weight = {'Fp1': 0.31, 'AF3': -0.26, 'F7': 1.22, 'F3': 0.99, 'Fz': 0.71, 'FC5': 0.55, 'FC1': -1.19, 'T7': 0.61, 'C3': -0.80, 'Cz': 2.36, 'CP5': -0.74, 'CP1': 0.72, 'P7': 0.93, 'P3': 0.38, 'Pz': 1.07, 'PO3': -1.46, 'O1': -0.12, 'Oz': 1.074, 'Fp2': 1.04, 'AF4': -0.065, 'F4': -0.52, 'F8': 0.37, 'FC2': 1.30, 'FC6': 0.94, 'C4': -1.11, 'T8': -0.16, 'CP2': 1.82, 'CP6': 0.41, 'P4': 0.46, 'P8': 0.99, 'PO4':0.15, 'O2':0.23}

2.3 根据脑地形图导联顺序重构自定义矩阵(*注意)

# 查看脑地形图矩阵导联位置
sensor_data_32 = int32_montage.get_positions()['ch_pos']
sensor_dataframe_32 = pd.DataFrame(sensor_data_32).T
chLa_index = sensor_dataframe_32.index.values
print(chLa_index)

# 重构自定义矩阵顺序
reWeight = []
for key in chLa_index:
    val = weight[key]
    reWeight.append(val)

2.4 TopoMap可视化

2.4.1 创建info
info = mne.create_info(
        ch_names = chLa_index,
        ch_types = ['eeg']*32,   # 通道个数
        sfreq = 1000)            # 采样频率
info.set_montage(int32_montage)
2.4.2 可视化
im, cn = mne.viz.plot_topomap(reWeight, 
                              info, 
                              names = chLa_index.tolist(),
                              # vlim=(-2, 2)
                             )
plt.colorbar(im)
plt.show()

python画系统拓扑图,python,矩阵

3、自定义电极布局文件对矩阵进行通道定位

假设我有一个64导联的帽子,根据实验需求,实验过程中我只选择中央区和顶叶区域的电极。
那么我们该如何根据自己选择的导联制定通道定位模版呢?
这里有两种方法:

第一种:自定义新的电极布局文件,文件只包含实验选择的导联。这个方法的目的是教会你如何制作自己的电极布局文件,实际绘制时建议选择第二种方法。

第二种:使用原来的电极布局文件,先对矩阵进行归一化,后将未被选择的导联值置为0

4、第一种方法

4.1 下载标准的64通道电极布局系统坐标

# 读取MNE中biosemi64电极位置信息
biosemi_montage = mne.channels.make_standard_montage('biosemi64')
sensor_data_64 = biosemi_montage.get_positions()['ch_pos']
sensor_dataframe_64 = pd.DataFrame(sensor_data_64).T
sensor_dataframe_64.to_excel('sensor_dataframe_64.xlsx')

4.2 根据下载文件,选择实验选取的电极坐标,保存为excel格式

# 模仿下载的电极布局excel,自定义电极布局文件

python画系统拓扑图,python,矩阵

4.3 加载自定义的excel文件,制作自己的montage

myStardart = pd.read_excel('mySensor_dataframe.xlsx', index_col=0) # 读取自己的电极定位文件
ch_names = np.array(myStardart.index)                              # 电极名称
position = np.array(myStardart)                                    # 电极坐标位置
sensorPosition = dict(zip(ch_names, position))                     # 制定为字典的形式
myMontage = mne.channels.make_dig_montage(ch_pos=sensorPosition)
myMontage.plot()
plt.show()

python画系统拓扑图,python,矩阵

4.4 自定义导联权重字典

myWeight = {'C1': 0.31, 'C3': 1.22, 'P6': 0.71, 'P4': 0.55,'P2': -1.19, 'CP5': 0.61,
            'CP3': -0.80, 'CP1': 2.36, 'P1': -0.74, 'P3': 0.72,'P5': 0.93, 'Pz': -1.46, 
            'CPz': -0.12, 'Cz': 1.074,'C5':2.34,'C2': 1.04, 'C4': -0.065, 'C6': -0.52, 
            'CP2': 0.37, 'CP4': 1.30, 'CP6': 0.94}

4.5 根据脑地形图导联顺序重构自定义矩阵(*注意)

# 查看脑地形图矩阵导联位置
my_chLa_index = ch_names.tolist()
print('脑地形图矩阵导联顺序:',my_chLa_index)

# 重构自定义矩阵顺序
reMyWeight = []
for key in my_chLa_index:
    val = myWeight[key]
    reMyWeight.append(val)

4.6 TopoMap可视化

4.6.1 创建info
myinfo = mne.create_info(
        ch_names = my_chLa_index,
        ch_types = ['eeg']*21,   # 通道个数
        sfreq = 1000)            # 采样频率
myinfo.set_montage(myMontage)
4.6.2 可视化
im, cn = mne.viz.plot_topomap(reMyWeight, 
                              myinfo, 
                              names = my_chLa_index,
                              # vlim=(-2, 2)
                             )
plt.colorbar(im)
plt.title('My Montage')
plt.show()

python画系统拓扑图,python,矩阵

5、第二种方法

5.1 读取标准的64通道电极布局系统坐标

# 读取MNE中biosemi64电极位置信息
biosemi_montage = mne.channels.make_standard_montage('biosemi64')
sensor_data_64 = biosemi_montage.get_positions()['ch_pos']
sensor_dataframe_64 = pd.DataFrame(sensor_data_64).T
chLa_index_64 = sensor_dataframe_64.index.values
biosemi_montage.plot()
plt.show()

python画系统拓扑图,python,矩阵

5.2 构建自定义部分导联字典

myWeight = {'C1': 0.31, 'C3': 1.22, 'P6': 0.71, 'P4': 0.55,'P2': -1.19, 'CP5': 0.61,
            'CP3': -0.80, 'CP1': 2.36, 'P1': -0.74, 'P3': 0.72,'P5': 0.93, 'Pz': -1.46, 
            'CPz': -0.12, 'Cz': 1.074,'C5':2.34,'C2': 1.04, 'C4': -0.065, 'C6': -0.52, 
            'CP2': 0.37, 'CP4': 1.30, 'CP6': 0.94}

5.3 对字典的值进行归一化

norMyWeiht = myWeight.copy()
# Step 1: 获取需要归一化的值
values = [v for v in norMyWeiht.values()]

# Step 2: 找到最小值和最大值
min_value = min(values)
max_value = max(values)

# Step 3: 对值进行归一化计算
for key, value in norMyWeiht.items():
    normalized_value = (value - min_value) / (max_value - min_value)
    norMyWeiht[key] = normalized_value

5.4 根据脑地形图导联顺序重构标准化后的矩阵,将未被选择的导联值置为0

print('脑地形图矩阵导联顺序:',chLa_index_64)
# 重构自定义矩阵顺序
reNorMyWeight = []
for key in chLa_index_64:
    if key in norMyWeiht:
        val = norMyWeiht[key]
        reNorMyWeight.append(val)
    else:
        reNorMyWeight.append(0)

5.5 TopoMap可视化

5.5.1 创建info
info = mne.create_info(
        ch_names = chLa_index_64.tolist(),
        ch_types = ['eeg']*len(reNorMyWeight),   # 通道个数
        sfreq = 1000)            # 采样频率
info.set_montage(biosemi_montage)
5.5.2 可视化
im, cn = mne.viz.plot_topomap(reNorMyWeight, 
                              info, 
                              names = chLa_index_64,
                              cmap = 'jet'
                              # vlim=(-2, 2)
                             )
plt.colorbar(im)
plt.title('My Montage')
plt.show()

python画系统拓扑图,python,矩阵

!!!!注意

在加载python库的时候,我添加了:%matplotlib qt 嵌入Python Qt界面
所以出来的图可能是这样的:

python画系统拓扑图,python,矩阵
需要点击放大:
python画系统拓扑图,python,矩阵

6、代码下载

https://weisihong9.github.io/2023/07/03/EEG_TopoMap/文章来源地址https://www.toymoban.com/news/detail-751435.html

下一篇:python绘制局部EEG导联的脑地形图

到了这里,关于Python 利用MNE实现自定义矩阵大脑拓扑图的绘制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 最最简单的ensp拓扑图

    拓扑图如下 选择两个PC和一个路由器    PC1配置如下:   PC2配置如下: 配置完成后打开路由器对端口G0/0/0进行配置:     再对端口G0/0/1进行配置:   配置完成,打开PC1在命令行中pingPC2:   打开PC2在命令行中pingPC1:  

    2024年02月12日
    浏览(26)
  • 快速读懂网络拓扑图

    简介 总线型拓扑是采用单根传输作为共用的传输介质,将网络中所有的计算机通过相应的硬件接口和电缆直接连接到这根共享的总线上。使用总线型拓扑结构需解决的是确保端用户使用媒体发送数据时不能出现冲突。 优点 (1)网络结构简单,易于网络扩展; (2)设备少、造

    2024年02月07日
    浏览(44)
  • 浅谈Flink架构及拓扑图

    声明 : 本文是博主阅读 云邪(Jark)博客 整理后的笔记,如有侵权,可联系博主删除。 本文参考文章如下: https://wuchong.me/blog/2016/05/03/flink-internals-overview/ https://wuchong.me/blog/2016/05/04/flink-internal-how-to-build-streamgraph/ https://wuchong.me/blog/2016/05/10/flink-internals-how-to-build-jobgraph/ http

    2024年01月25日
    浏览(30)
  • 医院网络设计(完整文档+思科拓扑图)

    大家好,我是小华学长,一名计算机领域的博主。经过多年的学习和实践,我积累了丰富的计算机知识和经验,在这里我想与大家分享我的学习心得和技巧,帮助你成为更好的程序员。 作为一名计算机博主,我一直专注于编程、算法、软件开发等领域,在这些方面积累了大量

    2024年02月07日
    浏览(32)
  • ENSP安装以及简单配置一个拓扑图

    ENSP学习心得 eNSP软件安装    安装eNSP之前必须先安装以下三个插件: VirtualBox WinPcap Wireshack eNSP作为模拟器主体,需要对应版本的VirtualBox和WinPcap提供虚拟环境,Wireshack用于实验当中测试抓取数据包使用。 安装好这三个插件,只需要点下一步选择好对应的安装位置即可,然后

    2024年02月11日
    浏览(41)
  • 一个小时学会画网络拓扑图(附标准素材)

    一,常见的网络拓扑图图标 二,核心交换机,汇聚交换机,接入交换机的区别? 三,核心交换机,汇聚交换机,接入交换机如何使用? 一、核心层交换机和汇聚层交换机区别 1、功能区别 2、性能区别 核心层交换机是三层交换机,高速转发,有大容量接口带宽(比如万兆接口),较

    2023年04月21日
    浏览(20)
  • threejs 3d网络设备拓扑图绘制示例

    技能点:threejs,Vue,canvas,几何数学。 展示网站:http://jstopo.top 模型上方图标贴图 canvas文字贴图

    2024年02月15日
    浏览(28)
  • 基于ensp校园网络(完整文档+ensp拓扑图)

    大家好,我是小华学长,一名计算机领域的博主。经过多年的学习和实践,我积累了丰富的计算机知识和经验,在这里我想与大家分享我的学习心得和技巧,帮助你成为更好的程序员。 作为一名计算机博主,我一直专注于编程、算法、软件开发等领域,在这些方面积累了大量

    2024年02月04日
    浏览(32)
  • 中小型超市的网络规划与设计(完整文档+思科拓扑图)

    大家好,我是小华学长,一名计算机领域的博主。经过多年的学习和实践,我积累了丰富的计算机知识和经验,在这里我想与大家分享我的学习心得和技巧,帮助你成为更好的程序员。 作为一名计算机博主,我一直专注于编程、算法、软件开发等领域,在这些方面积累了大量

    2024年02月03日
    浏览(32)
  • 前端流程图框架11个:开发组态图、思维导图、拓扑图必备

    在前端开发中,实现流程图通常涉及以下几个方面: HTML 结构 :使用 HTML 标签来定义流程图的结构,如使用 div 元素表示节点,使用 svg 元素表示连接线等。 CSS 样式 :使用 CSS 样式来定义流程图的外观,包括节点的样式、连接线的样式、文本的样式等。可以使用 CSS 属性来设

    2024年04月15日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包