MATLAB을 이용하여 뇌영상 데이터를 분석하다 보면, 뇌영역에 해당되는 부분의 마스크Mask를 만들어야 하는 경우가 있습니다. 이러한 경우에는 뇌영상 데이터 분석 - Matlab Index scheme 강의에서 처럼 MATLAB의 index 기능을 이용하면 회색질, 백색질, 뇌척수액 등에 해당되는 뇌 영역을 indices 값을 얻을 수 있고, 각각의 인덱스 값의 합집합을 이용하면 전체 뇌영역에 해당되는 마스크Mask를 얻을 수 있습니다.

위에 그림은 회색질(Grey Matter, GM), 백질(White Matter, WM), 뇌척수액(Cerebro-spinal Fluid, CSF)의 3차원 공간에서의 확률 분포를 보여주고 있습니다. 각각의 영상은 SPM (Statistical Parametric Mapping)을 설치하면 자동으로 설치되는 영상파일 입니다.

이제 다음의 MATLAB 명령어를 통해서 뇌마스크(Brain Mask)를 만들어 보겠습니다. 다음과 같이 한줄씩 MATLAB 명령창(Command Window)에 입력해 보시면서, 각각의 명령어가 의미하는바가 무엇인지 결과를 확인해 보시면 많은 공부가 될것 같습니다. 

>> % Specify file path >> fn_GM = fullfile(spm('dir'),'tpm', 'grey.nii'); >> fn_WM = fullfile(spm('dir'), 'tpm', 'white.nii'); >> fn_CSF = fullfile(spm('dir'), 'tpm', 'csf.nii'); >> >> % read volume header information >> vo_GM = spm_vol(fn_GM); >> vo_WM = spm_vol(fn_WM); >> vo_CSF = spm_vol(fn_CSF); >> >> % read 3D volume image data >> GM = spm_read_vols(vo_GM); >> WM = spm_read_vols(vo_WM); >> CSF = spm_read_vols(vo_CSF); >> >> % find indices of brain matter mask (idbrainmask) >> idx_gm = find(GM>0.5); % GM mask with Prob(GM>0.5); >> idx_wm = find(WM>0.5); % WM mask with Prob(WM>0.5); >> idx_csf = find(CSF>0.5); % CSF mask with Prob(CSF>0.5); >> >> % Set operation to compute union of two indices >> idbrainmask = union(idx_gm, idx_wm); >> idbrainmask = union(idbrainmask, idx_csf); >> >> % Fill ones for ROI >> IMG = zeros(size(GM)); % create zeros matrix >> IMG(idbrainmask) = 1; >> >> % Write 3D image >> vout = vo_GM; % copy header information >> vout.fname = 'brainmask.nii'; >> spm_write_vol(vout,IMG);

ex1.m

위의 프로그램을 실행하기 위해서는 확률맵(grey.nii, white.nii, csf.nii)이 필요한데, 이 파일들은 위에 설명되어 있듯이 SPM을 설치하고 MATLAB에서 Set Path로 SPM의 경로를 설정해 주어야 접근 가능한 파일들입니다.

신고

매틀랩으로 데이터 분석을 하다보면 find() 명령어를 통해서 특정 index를 찾고, 해당되는 index 값에 대해서만 여러 연산을 수행하는 과정이 필요합니다. 매틀랩에서 행렬을 생성하게 되면 아래의 그림과 같이 Subscript space에서는 A(1,1) 또는 A(1,2) 등의 과정을 통해서 행렬의 각 요소에 있는 값을 얻어올 수 있습니다. 하지만, Subscript space에서 Index space로 변환을 하게 되면 A(1,1)은 A(1)로 접근이 가능하고, A(1,2)는 A(11)을 통해서도 행렬의 값을 얻을 수 있습니다.

가령 아래와 같은 10x20의 행렬 A를 생각해 보겠습니다. 숫자는 행렬의 index를 의미하는 것이고 색깔은 행렬 요소의 값을 의미합니다. 파란색은 0이고 빨간색은 1을 나타냅니다. 이제 Matlab의 find() 명령어를 이용해서 행렬의 값이 1인 요소들의 index 값들을 찾아보도록 하겠습니다.

위의 그림에서 오른쪽에 나와 있듯이 Matlab에서 (>> idx = find(A>0)) 이란 명령어를 통해서 값이 0보다 큰 행렬 요소들이 어느 위치에 있는지 알 수 있습니다. 

신고

저희 아이는 태어난지 126일때 되는 날부터 이유식을 시작했습니다. 대략 5개월 차부터 시작했다고 할 수 있습니다. 물론 제가 이유식을 준비한 것은 아니고 아내가 정성껏 만들어 주고 있습니다. 

이유식을 시작하면서 중요한 것은, 아기가 어떤 음식에 알러지가 있는지 모르기 때문에 처음에는 쌀 미음 이유식으로 시작해서 4-5일마다 새로운 영양소가 들어있는 고기나 채소를 하나씩 섞어서 만들어줘야 합니다. 그렇게 하면 어떤 특별한 음식에 알러지 반응이 있는지 알 수 있으니까요.

저희 규빈이는 미음 이유식을 4일 먹이고 나서, 소고기 이유식을 시작했는데 고기의 힘인지 드디어 뒤집기를 성공했습니다. 아내의 조리원 동기분들의 아가들은 100일도 되지 전에 뒤집기를 성공한 경우도 있었습니다. 저희 규빈이는 너무 우량아라서 뒤집기 기술을 이미 가지고 있었을 수도 있으나 힘이 부족해서 계속해서 성공을 못하고 있던것은 아닐까? 생각해 봅니다.

아무튼 태어난지 131일만에 뒤집기를 성공했습니다. 그런데 뒤집기를 성공하고 나서부터는 시도때도 없이 뒤집습니다. 자다가도 깨어나서 뒤집고 눈을 말동 말동 뜨고 있을때도 있고요. 선배님들이 '누워 있을때가 좋은거야' 라는 말을 이제야 실감합니다.

아래 사진은 셀프 수유쿠션으로 분유를 먹이고 있었는데, 먹다말고 갑자기 뒤집어서 "엄마! 나 뒤집었어!" 라는 표정으로 있네요.

신고