여정의 기록

DICOM 파일에 대한 이해, Nii 파일 불러오기 본문

공부/프로젝트 진행

DICOM 파일에 대한 이해, Nii 파일 불러오기

Chelsey 2022. 10. 6. 23:48
728x90

7개의 경추에서 각각 골절될 확률을 예측하는 캐글 경진대회에 참여하고있다.

https://www.kaggle.com/competitions/rsna-2022-cervical-spine-fracture-detection

 

RSNA 2022 Cervical Spine Fracture Detection | Kaggle

 

www.kaggle.com

병원에서 근무하며 매일 보던 X-ray 사진을 자동분류 해낼 수없을까 생각을 했던 기억이 새록새록 떠오른다.
병원에서 근무하다보면 온갖 데이터를 보게되는데, 그걸보면 좀처럼 그냥 둘 수 없다는 생각이 든다. 

많은 양의 X-ray사진도 필요하지만 그에 따른 진단결과도 필요하기에 만약 이 작업을 하게된다면 방대한 양의 데이터가 필요할 것이라 막연히 생각했던적이 있다.

아무튼 어찌저찌 해당 대회를 찾게되었는데, DICOM이라는 파일형식이 의료데이터로 많이 사용하는 것으로 파악됐다.

DICOM에 대한 정보를 찾게되어 블로그에 되새김질하듯 정리해본다.


DICOM이란 무엇인가?

Digital Imaging and Communications in Medicine 의 약자로, 이름에서 보다시피 기구를 이용해 파일을 저장하면 DICOM형식으로 저장된다고 한다. 모든 송수신 트래픽에 암호화를 제공하여 안전한 파일 형태이다. 정보를 가진 다른 이미지파일(jpg, gif, png, tif)과 다르게 DICOM은 이미지뿐만 아니라 헤더, 정보가 압축되어 담겨있다. 다른 확장자 이름의 파일로 변환해주는 시스템도 있다. 

DICOM 파일을 Numpy array 으로 변환하는 방법

import numpy as np
import pydicom
from pydicom.pixel_data_handlers.util import apply_voi_lut

import matplotlib.pyplot as plt
%matplotlib inline


# Let read one Image
dicom_image = '../input/vinbigdata-chest-xray-abnormalities-detection/train/1.dicom'

# Read the file
dicom = pydicom.read_file(dicom_image)

# to Numpy array
# way1
data_voi = apply_voi_lut(dicom.pixel_array, dicom)
# way2
data = dicom.pixel_array

Standardization표준화 of an Numpy array 

# Standardization
dicom.PhotometricInterpretation
data_voi = data_voi - np.min(data_voi)
data_voi = data_voi / np.max(data_voi)
data_voi = (data_voi * 255).astype(np.uint8)

여기서(표준화 공식)
   (정규화 공식)

DICOM 파일 이미지 SHOW 

plt.figure(figsize = (12,12))
plt.imshow(data_voi)

 

+ DICOM 뿐만아니라 Nii 파일 또한 의료용 데이터로 많이 사용된다고 한다.
  간단히 Nii 파일을 불러오는 코드도 기록해본다.
print를 해야 정보가 나온다!!!

import nibabel as nib

proxy = nib.load('../input/10633.nii')
print(proxy.header)

# 해당 nii 파일의 numpy array값
print(proxy.get_fdata()

 

 


출처 : https://www.kaggle.com/code/dskagglemt/basic-understanding-on-dicom-convert-to-numpy

728x90