如何使用一组指定的EEG通道在Python MNE中绘制蒙太奇?

时间:2019-11-09 21:32:36

标签: python montage mne-python

我已经使用Python的MNE包加载了一些EEG数据。数据具有从10-20个蒙太奇获得的46个记录通道,但我们已经确定了许多无效通道,只想关注其余通道。

我可以删除频道,但是我不知道如何绘制更新的剪辑画面。

首先,我加载edf文件,进行复制并删除所需的频道:

import mne as mn
raw = mn.io.read_raw_edf("patient_001.edf",preload=True)
raw_temp=raw.copy()
raw_temp.drop_channels(['E', 'LIO', 'RIO', 'X1', 'X2', 
'X3','X4''X5', 'X6', 'X7', 'X8', 'X9', 'X10', 'X11', 'O2%', 'HR', 
'DC03','DC04', 'EEG Mark1', 'EEG Mark2', 'BP1', 'BP2','STI 014'])

我检查并删除了频道。我现在要做的是仅使用剩余的23个频道绘制更新的剪辑画面:

raw_temp.info["ch_names"]

['Fp1',  'Fp2',  'F3',  'F4',  'C3',  'C4',  'P3',  'P4',  'O1',  'O2',  'F7',  'F8',  'T7',  'T8',  'P7',  'P8',  'Fz',  'Cz',  'Pz',  'A1',  'A2',  'T1',  'T2']

根据我对渠道布局的极为有限的了解,我理解字母代表位置,数字代表半球,例如F4表示右侧额叶。

以下显示10-20 93通道布局的剪辑画面:

montage = mn.channels.read_montage("standard_1020")
raw_temp.set_montage(montage)
montage.plot()

其他蒙太奇选项列在

https://github.com/mne-tools/mne-python/blob/master/mne/channels/montage.py

但是我看不到46频道选项。

是否可以通过某种方式绘制我的23个频道的剪辑画面?

3 个答案:

答案 0 :(得分:0)

如果只想绘制电极布局,则可以使用Layout类而不是Montage类:

import mne

layout = mne.channels.read_layout("EEG1005")
selection = [
    "Fp1",
    "Fp2",
    "F3",
    "F4",
    "C3",
    "C4",
    "P3",
    "P4",
    "O1",
    "O2",
    "F7",
    "F8",
    "T7",
    "T8",
    "P7",
    "P8",
    "Fz",
    "Cz",
    "Pz",
    "A1",
    "A2",
    "T1",
    "T2",
]
picks = []
for channel in selection:
    picks.append(layout.names.index(channel))
display = layout.plot(picks=picks)

至少为mne==0.18.0提供enter image description here

答案 1 :(得分:0)

在读取原始 eeg 文件时,您应该为原始数据分配一个蒙太奇(您也可以在创建时代后进行)。这可以使用每个电极的坐标和一些基准点来完成(参见 https://mne.tools/stable/generated/mne.channels.make_dig_montage.html#mne.channels.make_dig_montage)。如果您的数据取自标准 10-20 系统,那么您可以使用内置函数 mne.channels.make_standard_montage('standard_1020') 获取 93 通道蒙太奇,然后使用以下代码仅保留您感兴趣的电极:

# Form the 10-20 montage
mont1020 = mne.channels.make_standard_montage('standard_1020')
# Choose what channels you want to keep 
# Make sure that these channels exist e.g. T1 does not exist in the standard 10-20 EEG system!
kept_channels = ['Fp1', 'Fp2', 'F3', 'F4', 'C3', 'C4', 'P3', 'P4', 'O1', 'O2', 'F7', 'F8', 'T7', 'T8', 'P7', 'P8', 'Fz', 'Cz', 'Pz', 'A1', 'A2', 'T1', 'T2']
ind = [i for (i, channel) in enumerate(mont1020.ch_names) if channel in kept_channels]
mont1020_new = mont1020.copy()
# Keep only the desired channels
mont1020_new.ch_names = [mont1020.ch_names[x] for x in ind]
kept_channel_info = [mont1020.dig[x+3] for x in ind]
# Keep the first three rows as they are the fiducial points information
mont1020_new.dig = mont1020.dig[0:3]+kept_channel_info
mont1020.plot()
mont1020_new.plot()

enter image description here

我建议您分配一个蒙太奇(在拒绝任何频道之前查看原始数据。这样,在删除坏频道后,您可以使用以下方法在预处理的任何点轻松获得更新的蒙太奇:

    raw = raw.set_montage(mont)
updated_mont = raw.get_montage() #also works with epo.get_montage()

然后您可以简单地绘制更新的蒙太奇:

updated_mont.plot()

答案 2 :(得分:0)

注意: ind = [i for (i, channel) in enumerate(mont1020.ch_names) 印刷: 这是 ind : [0, 2, 15, 17, 19, 21, 23, 39, 41, 43, 61, 63, 65, 80, 81, 82, 86, 87, 88, 89]

ind = [channel for (i, channel) in enumerate(mont1020.ch_names) 印刷: 这是 ind : ['Fp1', 'Fp2', 'F7', 'F3', 'Fz', 'F4', 'F8', 'C3', 'Cz', 'C4', 'P3', ' Pz', 'P4', 'O1', 'Oz', 'O2', 'T3', 'T5', 'T4', 'T6']