본문 바로가기
  • Hello_
Python/의료영상처리

[Python] nifti 파일 읽고 시각화하기

by LDwDL 2023. 1. 26.
728x90
반응형

본 포스팅에서는 nii.gz 확장자인 nifti 파일을 읽고 시각화를 해보고자 한다.

NIFTI 파일

Nifti 파일은 Neuroimaging InFormation Technology Initiative의 줄임말로 보통 MRI 뇌 이미지 데이터를 저장하기 위해 사용되는 오픈 파일 포맷이다.

 

보통 MRI 혹은 CT와 같이 3D 영상의 의료영상 binary 라벨 형식으로 사용된다.

 

NIFTI 파일 읽기

nii.gz 파일은 크게 두 가지 방법으로 배열로 변환이 가능한데, 첫 번째로 SimpleITK.ReadImage 함수를 활용하거나 nibabel.load 함수를 활용해서 읽는 방법이 있다.

 

두 가지를 모두 예시를 통해 확인해 보겠다. 예시로 사용된 데이터는 흉부 CT 오픈데이터셋을 활용했다. Nifti 파일에는 흉부에 위치해 있는 폐결절의 마스크가 라벨링 되어있다.

 

[SimpleITK.ReadImage]

import SimpleITK as sitk
import numpy as np

# 경로 지정
dcm_path = './abnormal_images/0001/'
label_path = './abnormal_labels/0001/S1.nii.gz'

# nii 읽기
label_mask_sitk = sitk.ReadImage(label_path)
label_mask_sitk = sitk.GetArrayFromImage(label_mask_sitk)

# 결과 확인
print(type(label_mask_sitk)) # <class 'numpy.ndarray’> 
print(label_mask_sitk.shape) # (289, 512, 512) 
print(np.unique(label_mask_sitk)) # [0 1]

 

SimpleITK를 활용해서 획득한 nii 배열의 형식은 numpy이며, 3D 이미지 축은 z, y, x 순으로 획득되었다. 배열 요소의 형식은 int로 이뤄져 있다.

 

[nibabel.load]

import nibabel as nib

# nib.load -> .get_fdata()
label_mask_nib = nib.load(label_path)
label_mask_nib = label_mask_nib.get_fdata()

# 결과 확인
print(type(label_mask_nib)) # <class 'numpy.ndarray’> 
print(label_mask_nib.shape) # (512, 512, 289) 
print(np.unique(label_mask_nib)) # [0. 1.]

 

nibabel을 통해 획득한 nii 배열은 동일하게 numpy 형식이지만 축이 x, y, z 축으로 다르며, 배열의 데이터 형식은 float이다.

 

Dicom & NIFTI 시각화

오픈 데이터셋에서 dicom 파일은 전체 흉부 CT이며, nii 파일은 흉부 CT에 폐결절로 의심되는 병변의 마스크가 라벨링 되어 있다. 이를 각각 시각화해 보자.

 

 

Dicom 또한 배열의 형태로 변환하여 동시에 같은 z 축의 슬라이스를 시각화해 보니 아주 잘 라벨링이 되어 있는 것을 알 수 있다.

 

CT와 같은 3D dicom을 읽는 법은 아래 링크를 통해 진행할 수 있다.

 

[Python] SimpleITK - CT 영상 읽는법

의료영상 중 대표격인 3D 영상을 읽는법에 대해 포스팅을 하고자한다. 보통 내가 써본 의료영상 처리 라이브러리는 pydicom 혹은 SimpleITK인데 경험상 3D 영상인 CT 혹은 MRI를 다룸에 있어 SimpleITK가

baembaembaem.tistory.com

 

위 예시와 같이 dicom를 읽고 한 번에 nii 배열도 같은 축을 만들어 주기 위해서는 nibabel보다는 SimpleITK로 z, y, x 순으로 반환해주는 SimpleITK.ReadImage를 사용하는 것을 추천한다.

 

 

 

728x90
반응형

댓글