🔬 Medical Image/Processing

Pydicom library 이용해 dcm 파일 불러오기

복만 2021. 8. 4. 17:52

Pydicom package를 이용해 dcm 파일의 이미지와, 헤더 정보를 불러올 수 있다.

import pydicom

dcm_data = pydicom.read_file(file_path)

 


 

이미지 가져오기

- 이미지를 numpy array 형태로 가져온다.

img = dcm_data.pixel_array

 

- 추가로, CT image의 경우는 RescaleSlope, RescaleIntercept 정보를 가져와 pixel intensity 값을 조정해주어야 한다.

- RescaleSlope는 각 pixel intensity값에 곱해주는 값, RescaleIntercept는 더해주는 값이라고 생각하면 된다.

- pydicom의 get(attribute, default_value) method는 해당 attribute가 dicom 헤더에 있으면 해당 값을 return하고, 없으면 default_value 값을 return한다.

img = dcm_data.get('RescaleSlope', 1) * img + dcm_data.get('RescaleIntercept', 0)

 


 

헤더 정보 가져오기

- print(dcm_data)를 이용해 헤더 정보를 모두 확인할 수 있다.

 

- 헤더 정보의 예시는 아래의 official docs에서 가져왔다.

print(ds)

Dataset.file_meta -------------------------------
(0008, 0005) Specific Character Set              CS: 'ISO_IR 100'
(0008, 0008) Image Type                          CS: ['ORIGINAL', 'PRIMARY', 'AXIAL']
(0008, 0012) Instance Creation Date              DA: '20040119'
(0008, 0013) Instance Creation Time              TM: '072731'
(0008, 0014) Instance Creator UID                UI: 1.3.6.1.4.1.5962.3
(0008, 0016) SOP Class UID                       UI: CT Image Storage
...

 

- 다양한 방법을 통해 각 attribute에 접근할 수 있다.

 

1) key index로 접근 : 이때 각 index는 16진수이므로 index의 앞에 0x를 붙혀 주어야 한다.

dcm_data[0x0008, 0x0016]
>>(0008, 0016) SOP Class UID                       UI: CT Image Storage

dcm_data[0x0008, 0x0016].keyword
>>'SOPClassUID'

dcm_data[0x0008, 0x0016].value
>>'CT Image Storage'

2) keyword로 접근

dcm_data['SOPClassUID']
>>(0008, 0016) SOP Class UID                       UI: CT Image Storage

3) keyword를 이용해 value로 바로 접근

dcm_data.SOPClassUID
>>'CT Image Storage'

 


 

Resample을 할 때 필요한 헤더 정보들 (keyword)

  • PixelSpacing : pixel 간 간격(spacing)
  • SliceThickness : slice 간 간격(thickness)
  • ImagePositionPatient : origin 정보
  • ImageOrientationPatient : direction 정보

 


 

dcm 파일로 저장하기

- save_as() method를 이용하면 된다.

dcm_data.save_as(file_path)

 

 

 

참고: official docs (https://pydicom.github.io/pydicom/stable/tutorials/dataset_basics.html)

 

Dataset basics: read, access, modify, write — pydicom 2.2.2 documentation

Repeating group elements such as (60xx,3000) Overlay Data (not found in this dataset). Repeating group elements are also registered in the official DICOM Standard, however they have a group number defined over a range rather than a fixed value. For example

pydicom.github.io

 

반응형