[Medical] - FSL로 fMRI 와 MRI 데이터를 분석해보자

FSL 

FSL은 옥스퍼드 대학교의 FMRIB에서 개발한 소프트웨어 라이브러리로 , 뇌 이미지를 분석하는 데 사용됩니다. FSL은 MRI 데이터를 처리하고 분석하는 데 널리 사용되고 있습니다. 

 

MRI 데이터를 처리하는 툴이나 소프트웨어는 선택할 수 있는 범위가 넓습니다. 예를 들어 fMRIprep , Freesurfer 와 같은 다양한 도구들이 있죠. 

 

FSL의 주요 구성 요소는 다음과 같습니다. 

자세한 예시는 아래에서 볼 수 있습니다.

 

- BET(Brain Extraction Tool) : 뇌를 포함하는 영역을 추출합니다. 그리고 MRI 이미지에서 두개골과 다른 비뇌 조직을 제거합니다. 

 

- FEAT(FMRI Expert Analysis Tool) : 기능적 MRI(fMRI) 데이터를 분석합니다. 시계열 분석과 통계적 매핑을 수행합니다. 

 

- FAST(FMRIB's Automated Segmentation Tool) : 뇌의 조직을 분할(회백질, 백질, 뇌척수액)하고 MRI 데이터에서 자동으로 조직 유형 식별 

 

- FLIRT(FMRIB's Linear Image Registration Tool) : 뇌 이미지를 서로 정렬하고 선형 이미지 등록을 수행하여 다른 뇌 이미지와 정렬 

 

- FNIRT(FMRIB's Non-Linear Image Registration Tool) : 비선형 이미지 등록(정합)을 수행합니다. 

 

FSL 설치 

https://fsl.fmrib.ox.ac.uk/fsl/docs/#/install/index

 

Document

 

fsl.fmrib.ox.ac.uk

 

FSL 공식 문서를 보면 각 운영체제에 맞는 설치 방법이 자세하게 나와있습니다. 

설치는 어렵지 않으니 유튜브 영상을 시청하시거나 user guide를 참고하시면 쉽게 다운로드 받을 수 있습니다. 

 

https://youtu.be/LgRZLev1LRw

 

 

fMRI 와 MRI ??

 

fMRI(기능적 자기공명영상) MRI(자기공명영상)는 모두 자기장과 전파를 이용하여 인체 내부를 촬영하는 의료 영상 기술입니다.

MRI는 주로 해부학적 구조를 관찰하는 데 사용되며, 연조직의 상세한 이미지를 제공합니다. 고해상도로 뇌, 척추, 관절 등의 구조를 볼 수 있어 다양한 질병 진단에 활용됩니다.

 

반면 fMRI는 MRI 기술을 기반으로 하지만, 뇌 활동을 실시간으로 관찰하는 데 특화되어 있습니다. fMRI는 뇌의 특정 부위가 활성화될 때 발생하는 혈류 변화를 감지하여 뇌 기능을 매핑합니다. 이를 통해 인지 과정, 감정 반응, 의사결정 등 다양한 뇌 기능을 연구할 수 있습니다.

 

MRI가 정적인 이미지를 제공한다면, fMRI는 시간에 따른 뇌 활동의 변화를 보여줍니다. fMRI는 신경과학 연구, 정신질환 진단, 뇌-컴퓨터 인터페이스 개발 등 다양한 분야에서 활용되고 있습니다.

 

두 기술 모두 비침습적이며 방사선 노출이 없어 안전하다는 장점이 있지만, fMRI는 MRI에 비해 시간 해상도가 낮고 노이즈에 더 취약할 수 있습니다. 또한 fMRI 데이터의 해석에는 복잡한 통계 분석이 필요하며, 결과 해석 시 주의가 필요합니다. 종합적으로, MRI와 fMRI는 상호 보완적인 기술로, 함께 사용될 때 뇌의 구조와 기능에 대한 포괄적인 이해를 제공할 수 있습니다.

 

아래의 그림을 보면 fMRI 데이터는 여러 장의 뇌 이미지로 구성이 되어있죠 ? 
이는 시간 포인트에 따라 찍혀서 그렇습니다. 

실제로 데이터의 구조를 print 해보면 4차원 데이터로 구성이 되어 있고, 마지막 정보가 Time point를 담고 있습니다. 

 

 

반면 MRI 의 경우 일반적으로 많이 봐왔던 그런 뇌의 모습이죠?

 

저는 OASIS-3 데이터의 접근 권한을 신청해서 해당 데이터로 실습을 진행했는데요.

데이터를 다운받을 때 설정할 수 있는 요소들이 굉장히 많습니다. 

그 중에서 Scan caategory를 T1w 와 BOLD를 선택했습니다.

 

 

일반적으로 MRI 데이터를 "structural" 또는 구조적 데이터라고 부르는 경우가 많습니다. 이는 MRI가 주로 뇌의 해부학적 구조를 보여주기 때문이라고 합니다. T1 강조 영상(T1-weighted imaging, T1w)은 indeed MRI의 한 종류입니다. T1w는 뇌의 회백질과 백질을 잘 구분할 수 있어 뇌의 구조적 특징을 관찰하는 데 주로 사용됩니다. 이는 항상 MRI 데이터의 일종이며, 'structural MRI'라고 불리는 것들 중 가장 흔한 유형입니다. 

 

BOLD(Blood Oxygen Level Dependent) 신호는 fMRI에서 사용되는 주요 측정 방식입니다. BOLD 신호는 뇌의 활성화된 영역에서 발생하는 혈류 변화를 감지하여 뇌 기능을 간접적으로 측정합니다. 따라서 BOLD 데이터는 항상 fMRI와 관련이 있습니다.

FSL 사용 방법 

FSL을 설치했다면, 어떻게 실행하고 사용하는지 알아봐야겠죠? 
FSL은 아래의 이미지처럼 주로 명령줄에서 실행되는 툴이지만, python과 같은 프로그래밍 언어를 사용하여 FSL의 기능을 스크립팅하고 자동화할 수 있습니다.

 

BET(Brain Extraction Tool)

 

예를 들어 BET(Brain Extraction Tool)을 사용한다면 아래의 명령어를 통해 실행할 수 있습니다. 

이 명령은 input_image.nii.gz라는 입력 이미지에서 뇌를 추출하고 결과를 output_image.nii.gz 파일에 저장합니다.

bet input_image.nii.gz output_image.nii.gz

 

혹은 파이썬을 사용하여 FSL 도구를 실행할 수 있는데요, 그러기 위해서는 subprocess 모듈을 사용해야 합니다. 

이를 통해 명령줄 명령을 파이썬 코드 내에서 실행할 수 있습니다. 

 

Nipype라는 모듈을 통해 Nipype에서 불러오는 FSL을 사용할 수 있지만, 기능이 제한적이라서 이 방법을 추천드립니다. 

bet_output = os.path.join(output_dir, "bet_output")
bet_command = f"bet {fmri_file} {bet_output} -F -f 0.3 -m"
subprocess.run(bet_command, shell=True, check=True)

 

'bet_command'에 할당된 명령어는 'fmri_file'이라는 입력 fMRI의 파일 경로입니다. 

뒤에 붙어있는 '-F' 명령어는 fMRI의 첫 번째 시간 볼륨의 데이터에 BET를 적용하겠다는 옵션입니다. 

그리고 '-f' 옵션은 프랙셔널 강도 임계값을 결정하는 옵션인데요, 0~1 사이로 설정이 가능하고 값이 높을수록 엄격하게 비뇌 영역을 제거 합니다. 

'-m' 옵션은 뇌 마스크를 이미지로 저장하도록 하는 옵션입니다. 

 

제가 직접 BET를 적용하고 mask를 가져왔는데요, 뇌의 대부분의 영역이 포함된 것으로 나타나고 있습니다. 

-m 옵션을 사용했을 경우에만 아래처럼 나타나는 것이죠.

 

그리고 -F 옵션을 사용했기 때문에 첫 번째 타임 포인트의 MRI 데이터만 BET된 것을 아래에서 확인할 수 있습니다. 

 

MNI Space ( FLIRT , FNIRT )

아래의 코드는 위에서 언급한 BET에 이어서 이뤄집니다. pipeline 형태로 구성했기 때문에 파일 혹은 변수명이 일부 중복될 수 있습니다.

func_to_mni_img = nib.load(func_to_mni)
if len(func_to_mni_img.shape) == 4:
    func_to_mni_data = func_to_mni_img.slicer[..., 0]
else:
    func_to_mni_data = func_to_mni_img
fig, ax = plt.subplots(1, 1, figsize=(10, 5))
plotting.plot_epi(func_to_mni_data, display_mode='z', cut_coords=5, title="fMRI in MNI Space", axes=ax)
plt.show()

# 4. 구조적 공간으로 변환된 fMRI 데이터 시각화
func_to_struct_img = nib.load(func_to_struct)
if len(func_to_struct_img.shape) == 4:
    func_to_struct_data = func_to_struct_img.slicer[..., 0]
else:
    func_to_struct_data = func_to_struct_img
fig, ax = plt.subplots(1, 1, figsize=(10, 5))
plotting.plot_epi(func_to_struct_data, display_mode='z', cut_coords=5, title="fMRI in Structural Space", axes=ax)
plt.show()

 

MNI Space는 뇌 이미징 연구에서 핵심적인 개념으로, 다양한 피험자의 뇌 데이터를 표준화된 좌표 시스템에 맞춰 비교 분석할 수 있게 해줍니다.  Montreal Neurological Institute에서 개발된 이 공간은 x, y, z 축으로 구성된 3D 좌표 시스템을 사용하며, MNI152와 같은 표준 템플릿을 기반으로 합니다.

 

fMRI 데이터를 MNI 공간으로 변환하기 위해서는 FSL의 FLIRT나 FNIRT 같은 도구를 사용한 공간 정규화 기술이 필요합니다.

이 과정에서 개별 피험자의 뇌 구조 차이를 보정하여 일관된 비교가 가능해집니다.

 

제시된 코드에서는 MNI 공간으로 변환된 fMRI 데이터를 다루고 있으며, 이를 시각화하기 위해 Nilearn의 plotting 모듈을 사용하고 있습니다. fMRI 데이터는 일반적으로 4D (x, y, z, time) 형식이므로, 단일 시간점의 3D 데이터를 추출하는 과정이 포함되어 있습니다.

 

또한, NIfTI (.nii) 파일 형식을 다루기 위해 nibabel 라이브러리를 사용하고 있습니다.

MNI 공간 외에도 구조적 공간으로 변환된 fMRI 데이터를 다루고 있는데, 이는 개인의 해부학적 구조에 맞춘 분석이 필요할 때 유용합니다. 

 

MNI 공간을 활용한 fMRI 데이터 분석은 개인 간 비교, 그룹 분석, 특정 뇌 영역의 기능 연구 등 다양한 신경과학 연구에 필수적인 도구로 사용되고 있습니다.

 

 

 

 

반응형