.dcm 확장자로 Segmentation 3D mask를 저장하기
# 3D mask 저장
volume_mask = np.stack(patient_mask, axis=0)
print("volume_mask.shape: ", volume_mask.shape)
mask_dicom.NumberOfFrames = 192
mask_dicom.Rows, mask_dicom.Columns = volume_mask.shape[1], volume_mask.shape[2]
mask_dicom.PixelData = volume_mask.astype(np.uint16).tobytes()
# DCIOM standard로 파일 메타 정보 설정
mask_dicom.file_meta.TransferSyntaxUID = ExplicitVRLittleEndian
mask_dicom.save_as(f"{dcm_mask_path_to_save}/{dir_name}.dcm")
PixelData에 값을 넣는 것도 중요하지만, NumberOfFrames에 값을 넣지 않으면 multi frame으로 저장되지 않는다. 그리고 3D로 .dcm 파일을 저장할 때 형식은 (채널, 가로, 세로)으로 3차원을 맞추어 주어야 한다. 그러나 .dcm 확장자로 multi frame 이미지를 저장할 때는 orientation과 position이 안맞는 경우가 많이 생기는 것 같다. 그래서 3D Mask를 저장하려면 nrrd 또는 nifti를 포맷을 사용하여 저장하는 것이 좋다고 생각한다.
.nifti 확장자로 Segmentation 3D mask를 저장하기
사용가능한 라이브러리는 nibabel, dicom2nifti가 있다. dcm2niix라는 것도 존재하지만, 사용하기 어려워 보인다. nibabel을 통한 3D 변환은 해당 예시 코드가 있는데, 참조하면 좋을 것 같다. 가장 간단한 dicom2nifti를 먼저 사용해서 mask를 3D로 변환해보자.
참고자료
https://github.com/pydicom/pydicom/issues/1084
https://github.com/pydicom/pydicom/issues/1230
https://github.com/icometrix/dicom2nifti
'의료 영상' 카테고리의 다른 글
[DICOM] MRI 볼륨 관련 Dicom tag 정리 (0) | 2024.04.30 |
---|---|
[의료 영상] DICOM 전처리 (0) | 2024.02.15 |