안녕하세요.

이번 장에서는 Python으로 dicom 데이터를 읽는 방법에 대해서 말씀드리겠습니다.

 

Python에서는 pydicom 모듈 SimpleITK 모듈을 제공하고 있는데, 이러한 모듈들을 사용하여 dicom 파일을 읽어 필요한 데이터들을 추출(extraction)할 수 있습니다.

 

그럼 지금부터 데이터들을 추출하는 방법을 간단하게 설명하도록 하겠습니다.

 

 

1. Dicom 파일 다운받기

먼저 아래 사이트에 접속하여 dicom 파일 하나를 다운 받습니다.

http://www.rubomedical.com/dicom_files/

 

Sample DICOM files

DEMO 0015 (522 Kb) 1024x1024x8bits Single image Uncompressed Xray Radiofluoroscopic Monochrom2

www.rubomedical.com

 

 

 

 

2. DICOM Viewer로 dicom 파일 확인하기

다운받은 dicom 파일열어보기 위해서는 "DICOM Viewer" 응용프로그램이 설치되어 있어야 합니다. 

 

 

 

제 컴퓨터에서는 MicroDicom viewer가 설치되어 있기 때문에 해당 응용프로그램으로 DICOM 파일을 볼 수 있습니다.

 

 

 

 

 

3. pydicom 모듈로 dicom 파일 데이터 읽기

https://github.com/pydicom/pydicom

 

GitHub - pydicom/pydicom: Read, modify and write DICOM files with python code

Read, modify and write DICOM files with python code - GitHub - pydicom/pydicom: Read, modify and write DICOM files with python code

github.com

 

 

3-1. pydicom 설치

필자는 anaconda 가상환경에서 돌리고 있기 때문에 conda 명령어로 pydicom을 설치해주었습니다.

conda install -c conda-forge pydicom

(↓↓↓conda 명령어로 pydicom 설치 방법↓↓↓)

https://anaconda.org/conda-forge/pydicom

 

Pydicom :: Anaconda.org

Description pydicom is a pure python package for parsing DICOM files. DICOM is a standard (https://dicomstandard.org) for communicating medical images and related information such as reports and radiotherapy objects. pydicom makes it easy to read these com

anaconda.org

 

 

3-2. pydicom으로 데이터 읽기

pydicom으로 dicom 파일을 읽어드리는 명령어는 한 줄이면 됩니다

dcm = pydicom.dcmread(filename)

 

파일을 읽어들인 후, 특정 attribute에 접근하면 관련 데이터 값을 얻을 수 있습니다.

예를 들어. "dcm.PatientSex"에 접근하면 성별(M or F) 데이터 값을 얻을 수 있고,

 

 

"dcm.pixel_array"에 접근하면 이미지 데이터 값을 얻을 수 있습니다.

 

위의 DICOM 이미지 shape(96,512,512)=(channel, width, height)인데, channel이 의미하는 바는 시간 축이라고 보시면 됩니다. 예를 들어, "pixel_array[0] -> pixel_array[1] -> ... -> pixel_array[95]" 시간 순서대로 (512,512) gray scale 이미지가 변한다고 생각하시면 됩니다 (영상 관점에서 설명하면 pixel_array[0], pixel_array[1], ..., pixel_array[95]가 모두 frame이라고 볼 수 있습니다)

 

DICOM viewer에마우스 휠사용하면 dicom 이미지가 연속적으로 변하는걸 보실 수 있으실 겁니다! (image가 하나로만 구성될 수 도 있으니 알아두세요! ex: "Images: 1/1")

 

 

 

특정 시간대의 dicom 파일의 (gray scale) 2d 이미지 값을 얻으려면 아래와 같이 (=dcm.pixel_array[0]) 접근하면 됩니다. ipynb 파일에서 interactive mode를 사용하면 matpotlib를 이용해 실제 이미지를 visualization하여 확인할 수 있습니다. 

 

 

 

4. SimpleITK 모듈로 dicom 파일 데이터 읽기

파이썬에서는 pydicom 외에도 SimpleITK 모듈을 이용해 dicom 파일에 접근할 수 있습니다.

 

 

 

 

 

 

 

 

5. 그 외 dicom 파일 다루는 방법

아래 사이트에 접속하여 crtl+F 한다음 DICOM 이라고 검색하면 "Chapter10. Combining data sources into a unified dataset)" section이 나옵니다. (책(76p) or pdf페이지(106))  해당 section의 내용을 참고하시면 dicom 파일을 다루는 또 다른 방법도 소개하고 있으니 참고하시면 좋을 듯 합니다!

https://pytorch.org/assets/deep-learning/Deep-Learning-with-PyTorch.pdf

+ Recent posts