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)
반응형
'🔬 Medical Image > Processing' 카테고리의 다른 글
[BART] BART 설치방법, Python을 이용한 coil sensitivity estimation (0) | 2022.10.25 |
---|---|
TorchIO를 이용한 3D 이미지 transform (preprocessing/augmentation) (0) | 2022.06.07 |
dicom 파일들을 nifti 파일로 바꿔주는 Python library 'dicom2nifti' (+일부 dicom 파일이 인식이 안되는 문제) (1) | 2021.12.21 |
nibabel affine matrix의 의미와 affine transform 적용하는 방법 (0) | 2020.02.25 |