关注微信公众号:脑机接口研习社
了解脑机接口最近进展

系列文章目录

Python专栏 | 脑电图和脑磁图(EEG/MEG)的数据分析方法之载入数据

Python专栏 | MNE脑电数据(EEG/MEG)可视化

Python专栏 | MNE数据预处理方法——独立成分分析

Python专栏 | 独立成分分析(ICA)的实例应用:消除伪影信号

持续更新中……


文章目录

  • 系列文章目录
  • 识别伪影信号的方法
    • 1. Selecting ICA components manually (手动识别)
    • 2. Using an EOG channel to select ICA components
  • 总结

识别伪影信号的方法

1. Selecting ICA components manually (手动识别)

确定要排除的Components后,可以通过设置ica.exclude属性手动指定。

仅设置ica.exclude不会立即执行任何操作,只会将排除的Independent Components (IC)添加到列表中,以便之后在需要时使用。

一旦设置了排除项,即使未传递exclude参数,比如plot_overlay的ICA方法,也会排除指定的Components。

使用mne.preprocessing.ICA.save和mne.preprocessing.read_ica时可以保留被排除的Components列表。

代码示例:

ica.exclude = [0, 1]  #indices chosen based on various plots above

现在我们已经设置好了排除项(ica.exclude),接着我们可以使用ica.apply的方法重塑已经去除伪影的传感器信号。

即现在进入了下图中的ica.apply环节。

▲点击图片可查看大图

我们将把原始数据与重塑的数据一起绘制,来表明心跳和眨眼伪影已得到修复。

代码示例:

#ica.apply() changes the Raw object in-place, so let's make a copy first:
raw.load_data()
reconst_raw = raw.copy()
ica.apply(reconst_raw)#原始数据
raw.plot(order=artifact_picks, n_channels=len(artifact_picks),show_scrollbars=False)
#重塑数据,和原始数据进行对比,来表明心跳和眨眼伪影已得到修复。
reconst_raw.plot(order=artifact_picks, n_channels=len(artifact_picks),show_scrollbars=False)
del reconst_raw #删除变量reconst_raw

输出结果:

Applying ICA to Raw instanceTransforming to ICA space (15 components)Zeroing out 2 ICA componentsProjecting back using 364 PCA components

2. Using an EOG channel to select ICA components

通过上面手动选择要排除的IC的方法似乎比较简单,但是当需要处理成百上千个被试的数据时,手动排除的方式就略显繁琐。

在这种情况下,比较合理的做法是:首先使用专用的EOG或ECG传感器进行实验,把由此测得的信号作为一种“模型(pattern)”,然后将“模型”与每一种IC相对应,利用算法自动标记出和“EOG / ECG模型信号”匹配的所有ICs。

在mne-python包里,我们将使用find_bads_eog自动查找与EOG信号最匹配的ICs,然后再使用plot_scores以及其他一些绘图功能来查看选择了哪些IC。

由于在手动选择步骤里,我们使用了ica.exclude = [0, 1],手动选择了ICA001和ICA000,因此在使用自动选择功能函数前,我们首先需要将ica.exclude重置为空列表。

代码示例:

#自动选择与ECG和EOG信号对应的ICs
ica.exclude = []#首先将ica.exclude变成空列表#find which ICs match the EOG pattern
eog_indices, eog_scores = ica.find_bads_eog(raw)
ica.exclude = eog_indices# barplot of ICA component "EOG match" scores
ica.plot_scores(eog_scores)
#eog_scores是计算每个ICs(本例子里共有15个ICs)与EOG信号的match scores。绝对值越接近1代表匹配度越高,越接近0代表匹配度越低。
#由画出的条形图可以看出,ICA000的值是0.94763376,匹配度最高。# plot diagnostics
ica.plot_properties(raw, picks=eog_indices)# plot ICs applied to raw data, with EOG matches highlighted
ica.plot_sources(raw, show_scrollbars=False)# plot ICs applied to the averaged EOG epochs, with EOG matches highlighted
ica.plot_sources(eog_evoked)

输出结果:




filtering target
Setting up band-pass filter from 1 - 10 HzFIR filter parameters
---------------------
Designing a two-pass forward and reverse, zero-phase, non-causal bandpass filter:
- Windowed frequency-domain design (firwin2) method
- Hann window
- Lower passband edge: 1.00
- Lower transition bandwidth: 0.50 Hz (-12 dB cutoff frequency: 0.75 Hz)
- Upper passband edge: 10.00 Hz
- Upper transition bandwidth: 0.50 Hz (-12 dB cutoff frequency: 10.25 Hz)
- Filter length: 6007 samples (10.001 sec)C:\ProgramData\Anaconda3\lib\site-packages\mkl_fft\_numpy_fft.py:331: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use `arr[tuple(seq)]` instead of `arr[seq]`. In the future this will be interpreted as an array index, `arr[np.array(seq)]`, which will result either in an error or a different result.output = mkl_fft.rfft_numpy(a, n=n, axis=axis)Using multitaper spectrum estimation with 7 DPSS windows
Not setting metadata
Not setting metadata
138 matching events found
No baseline correction applied
0 projection items activated
0 bad epochs dropped
C:\ProgramData\Anaconda3\lib\site-packages\mkl_fft\_numpy_fft.py:331: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use `arr[tuple(seq)]` instead of `arr[seq]`. In the future this will be interpreted as an array index, `arr[np.array(seq)]`, which will result either in an error or a different result.output = mkl_fft.rfft_numpy(a, n=n, axis=axis)Creating RawArray with float64 data, n_channels=16, n_times=166800Range : 25800 ... 192599 =     42.956 ...   320.670 secs
Ready.

以上我们在原始Raw实例以及提取了EOG伪影的Evoked实例上都使用了plot_sources。这可以是另一种确认find_bads_eog已标识正确component的方法。

总结

今天用到的代码总结:

#手动选择要排除的ICs
ica.exclude = [0, 1]  # indices chosen based on various plots above#现在我们已经设置好了排除项(ica.exclude)
#接着我们可以使用ica.apply的方法重塑已经去除伪影的传感器信号。
#ica.apply() changes the Raw object in-place, so let's make a copy first:
raw.load_data()
reconst_raw = raw.copy()
ica.apply(reconst_raw)#原始数据
raw.plot(order=artifact_picks, n_channels=len(artifact_picks),show_scrollbars=False)
#重塑数据,和原始数据进行对比,来表明心跳和眨眼伪影已得到修复。
reconst_raw.plot(order=artifact_picks, n_channels=len(artifact_picks),show_scrollbars=False)
del reconst_raw #删除变量reconst_raw#自动选择与ECG和EOG信号对应的ICs
ica.exclude = []#首先将ica.exclude变成空列表#find which ICs match the EOG pattern
eog_indices, eog_scores = ica.find_bads_eog(raw)
ica.exclude = eog_indices# barplot of ICA component "EOG match" scores
ica.plot_scores(eog_scores)
#eog_scores是计算每个ICs(本例子里共有15个ICs)与EOG信号的match scores。绝对值越接近1代表匹配度越高,越接近0代表匹配度越低。
#由画出的条形图可以看出,ICA000的值是0.94763376,匹配度最高。# plot diagnostics
ica.plot_properties(raw, picks=eog_indices)# plot ICs applied to raw data, with EOG matches highlighted
ica.plot_sources(raw, show_scrollbars=False)# plot ICs applied to the averaged EOG epochs, with EOG matches highlighted
ica.plot_sources(eog_evoked)

参考链接

https://mne.tools/stable/auto_tutorials/preprocessing/plot_40_artifact_correction_ica.html#fitting-and-plotting-the-ica-solution

未完待续……

欲知后事如何,请关注我们的公众号:脑机接口研习社




Python专栏 | ICA应用:如何识别伪影信号?(一)相关推荐

  1. Python专栏 | 独立成分分析(ICA)的实例应用:消除伪影信号

    关注微信公众号:脑机接口研习社 了解脑机接口最近进展 系列文章目录 Python专栏 | 脑电图和脑磁图(EEG/MEG)的数据分析方法之载入数据 Python专栏 | MNE脑电数据(EEG/MEG ...

  2. 脑电数据预处理-ICA去除伪影

    ‍‍‍‍‍‍‍‍‍‍ ICA/BSS的理论与模型 独立成分分析(ICA)是一种盲信号分离(Blind Signal Separation,BSS)方法.ICA可线性建模如下图所示. 假设X为" ...

  3. letswave7中文教程3:脑电数据预处理-ICA去除伪影

    目录 ICA/BSS的理论与模型 第5步:计算ICA矩阵 第6步:识别伪影成分 本分享为脑机学习者Rose整理发表于公众号:脑机接口社区 .QQ交流群:941473018 ICA/BSS的理论与模型 ...

  4. FieldTrip toolbox教程系列(2)-伪影处理简介

    简介:处理伪影 关于FieldTrip之前介绍过: <FieldTrip toolbox教程系列(0)-安装.配置与测试> <FieldTrip toolbox教程系列(1)-预处理 ...

  5. plot画图 python 双线_Python使用多种滤波器对脑电数据去除伪影

    点击上面"脑机接口社区"关注我们 更多技术干货第一时间送达 一些由电源线造成的伪影具有某些特定范围的频率(比如,由电网产生的电力线噪声,主要由50Hz(或60Hz取决于实验的地理位 ...

  6. ICA独立成分分析去除EEG伪影

    目录 介绍 ICA假设 方法 组件投影 实验数据样本 移除眨眼和肌肉伪影 一些严重污染的脑电数据 本分享为脑机学习者Rose整理发表于公众号:脑机接口社区 .QQ交流群1:903290195(已满,请 ...

  7. 如何使用ICA(独立成分分析)来去除伪影

    关于使用ICA,可以采用mne的库来进行实现.具体可以查看官网:ICA使用 ICA的大致原理是:找到一个分解的矩阵,将原始数据分解成时间独立和空间固定的分量之和.然后先根据自己的经验去除伪迹分量,再通 ...

  8. ICA独立成分分析去除脑电伪影

    今天分享的这篇利用独立成分分析ICA去除EEG伪影是翻译自jung大神的一篇文章. 目录 1 介绍 2 方法 3 实验数据样本 1 介绍 眼动,眨眼,肌肉,心脏和线的噪音会严重污染脑电图活动,这在脑电 ...

  9. 图像去除栅格,条纹伪影的办法(附python代码)

    医学图像中,有些时候由于使用栅格作为准束用的手段,这会导致栅格的信息叠加在图像中,形成所谓的栅格伪影,比如DR图像中的栅格伪影,如下所示: 比如像这张图像中的条纹,这就是栅格伪影.栅格伪影对于正常的图 ...

  10. (二十二:2020.11.09)论文学习之《CT中伪影的识别和规避》

    脚踏实地地解决CT的伪影问题(一)<Artifacts in CT: Recog-nition and Avoidance> 讲在前面 摘要 介绍 物理伪影 一.Beam Hardenin ...

最新文章

  1. 2021年大数据Spark(五十一):Structured Streaming 物联网设备数据分析
  2. python 计算两个日期相差多少个月
  3. 谷歌自锤Attention:纯注意力并没那么有用,Transformer组件很重要
  4. 数据库连接串MSSQL、Oracle、Access
  5. Oracle SQL精妙SQL语句讲解(二)
  6. 红帽和Mirantis宣告结束OpenStack合作
  7. 【java】java jps 命令
  8. 判断无序数组中是否存在两个数之和为m
  9. Nginx环境搭建Discuz论坛
  10. php tp3.2 去重方法,thinkPHP框架整合tcpdf插件操作示例
  11. javascript return
  12. 主席树 POJ2104
  13. NGUI组件参数总结
  14. 四大银行(工建农中)大数据进展如何?
  15. matlab四元数傅里叶变换,四元数傅里叶变换
  16. OneNote解决字体不同的问题【完美解决】
  17. 数据可视化—随机漫步
  18. python词性标注_自然语言处理基础技术之词性标注
  19. MYCNCART博客系统
  20. 弘辽科技:如何提高淘宝收藏加购率?有哪些方法?

热门文章

  1. 求刷百度相关词的方法
  2. 计算机 英语简历,计算机毕业生英语简历范文
  3. mysql反思范文_MySQL学习笔记(一)
  4. 最大团问题(迭代回溯法)
  5. 《单域名下整合动网、动易、OBlog程序》
  6. 命令启动oracle实例,【单选题】启动oracle数据库实例的命令是
  7. 面试HR常问的几个问题?
  8. 看《当幸福来敲门》观后感
  9. 友善之臂mini2440使用日志1
  10. 技术小咖之基于SDK的第一个windows图形界面程序