본문 바로가기
Brain Engineering/MNE

[MNE-Python] 센서 위치 작업 (2)

by goatlab 2022. 3. 23.
728x90
반응형
SMALL

Reading sensor digitization files

 

info 샘플 데이터에서 센서 위치는 객체의 속성 에서 이미 사용할 수 있다 (읽기 기능 설명서 및 set_montage 작동 방식에 대한 자세한 내용 참조). 따라서 와 유사한 기능을 제공하는 Raw를 사용하여 객체 에서 직접 센서 위치를 플롯할 수 있다 . 또한 유형별 채널 선택, 다양한 방식의 색상 코딩 채널 (기본적으로 나열된 채널 은 빨간색으로 표시됨) 및 기존 Matplotlib 개체에서 그리기 (채널 위치를 하위 플롯으로 쉽게 추가할 수 있도록 지원)가 있다.

 

fig = plt.figure()
ax2d = fig.add_subplot(121)
ax3d = fig.add_subplot(122, projection='3d')
raw.plot_sensors(ch_type='eeg', axes=ax2d)
raw.plot_sensors(ch_type='eeg', axes=ax3d, kind='3d')
ax3d.view_init(azim=70, elev=15)

 

이전 2D 지형도는 샘플 데이터 세트의 EEG 센서 위치에서 불규칙성을 나타낸다. 이는 해당 데이터 세트의 센서 위치가 구형 헤드 모델을 기반으로 하는 이상적인 센서 위치가 아니라 머리의 실제 센서 위치의 디지털화이기 때문이다. 디지털화 장치 (ex. Polhemus Fastrak 디지타이저)에 따라 다른 몽타주 판독 기능을 사용해야 한다 (디지털화된 3D 위치에 지원되는 형식 참조). 그런 다음 결과를 메서드에 인수로 전달 montage하여 객체에 추가할 수 있다 (이전에 미리 정의된 몽타주 이름으로 했던 것처럼).

 

Visualizing sensors in 3D surface renderings

 

matplotlib 대신 3D 표면 렌더링을 사용하여 MEG 센서 헬멧의 이미지를 렌더링하는 것도 가능하다. 이것은 다음을 호출하여 작동한다.

 

fig = mne.viz.plot_alignment(raw.info, dig=False, eeg=False,
                             surfaces=[], meg=['helmet', 'sensors'],
                             coord_frame='meg')
mne.viz.set_3d_view(fig, azimuth=50, elevation=90, distance=0.5)

---
Getting helmet for system 306m
Channel types:: grad: 203, mag: 102

 

개체가 (plot_alignment) 필요하며 Info 두피, 두개골 및 뇌의 MRI 표면을 렌더링할 수도 있다 (또는 와 같은 키가 있는 사전을 'head'매개 'outer_skull'변수 'brain'에 전달 surfaces). 이 기능은 좌표 프레임 변환을 평가하는 데 유용하다.

 

Working with layout files

 

몽타주와 유사하게 많은 레이아웃 파일이 MNE-Python에 포함되어 있다. mne/channels/data/layouts 다음 폴더에 저장된다.

 

layout_dir = os.path.join(os.path.dirname(mne.__file__),
                          'channels', 'data', 'layouts')
print('\nBUILT-IN LAYOUT FILES')
print('=====================')
print(sorted(os.listdir(layout_dir)))
---
BUILT-IN LAYOUT FILES
=====================
['CTF-275.lout', 'CTF151.lay', 'CTF275.lay', 'EEG1005.lay', 'EGI256.lout', 'KIT-125.lout', 'KIT-157.lout', 'KIT-160.lay', 'KIT-AD.lout', 'KIT-AS-2008.lout', 'KIT-UMD-3.lout', 'Neuromag_122.lout', 'Vectorview-all.lout', 'Vectorview-grad.lout', 'Vectorview-grad_norm.lout', 'Vectorview-mag.lout', 'biosemi.lay', 'magnesWH3600.lout']

 

내장 레이아웃 및 몽타주 파일의 파일 형식 (및 파일 확장자)은 상당히 다양하다 (제조업체는 다른 규칙을 사용하기를 원하기 때문에). 그러나 MNE-Python의 몽타주 및 레이아웃 로드 기능은 확장자가 없는 파일 이름을 사용 하므로 어떤 제조업체에서 어떤 파일 형식을 사용하는지 추적할 필요가 없다.

 

레이아웃 파일을 로드하려면 mne.channels.read_layout 함수를 사용하고 파일 확장자 없이 파일 이름을 제공한다. 그런 다음 해당 메서드를 사용하거나 레이아웃을 다음으로 동등하게 전달하여 레이아웃 을 시각화할 수 있다 (mne.viz.plot_layout).

 

biosemi_layout = mne.channels.read_layout('biosemi')
biosemi_layout.plot()  # same result as mne.viz.plot_layout(biosemi_layout)

 

picks 객체에서 채널을 선택 하는 인수와 유사하게 Raw 객체의 plot 메서드 Layout에도 picks 인수가 있다. 그러나 레이아웃에는 센서 이름 및 위치 (센서 유형 아님)에 대한 정보만 포함되기 때문에 이 plot방법은 인덱스 (이름 또는 유형이 아님)별 채널 선택만 지원한다. numpy.where를 사용하여 원하는 인덱스를 찾는다 . mne.pick_channels를 사용하여 이름 또는 유형별 선택이 가능하다.

 

midline = np.where([name.endswith('z') for name in biosemi_layout.names])[0]
biosemi_layout.plot(picks=midline)

 

센서 위치가 포함된 개체가 있는 경우 Raw를 사용하여 개체를 만들 수 있다.

 

layout_from_raw = mne.channels.make_eeg_layout(raw.info)
# same result as mne.channels.find_layout(raw.info, ch_type='eeg')
layout_from_raw.plot()

 

모든 Layout 개체에는 또는 형식 (인수에 포함된 파일 확장자에서 유추) save으로 디스크에 레이아웃을 기록하는 메서드가 있다. 형식 사이의 선택은 다른 응용 프로그램에서 레이아웃 파일을 로드해야 하는 경우에만 중요하다 (MNE-Python은 두 형식을 모두 읽을 수 있음).

 

https://mne.tools/stable/auto_tutorials/intro/40_sensor_locations.html

 

Working with sensor locations — MNE 1.0.0 documentation

In the sample data, the sensor positions are already available in the info attribute of the Raw object (see the documentation of the reading functions and set_montage for details on how that works). Therefore, we can plot sensor locations directly from the

mne.tools

 

728x90
반응형
LIST