12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- import os
- import nibabel as nib
- import numpy as np
- import cv2
- import glob
- from natsort import natsorted
- from organList import *
-
- def _one_hot_encoder(input_data):
- label_list = [[] for i in range(n_classes)]
- for i in range(n_classes):
- temp_prob = input_data == i ##取出第幾類
- temp_prob = np.squeeze(temp_prob)
- label_list[i].append(temp_prob)
- # print(np.unique(label_list[i])) ##True/False的masks
- label_list[i] = np.squeeze(np.array(label_list[i]))*255 ##為了存成uint8來可視化,所以*255
- # print(np.unique(label_list[i]))
- output_tensor = np.array(label_list)
- return output_tensor
-
-
- NIFTI_data = 'NIFTI/'
- DCM_data = 'DICOM/'
- output_dir = 'MONAI/'
- n_classes = len(Organ)
-
- list_patient = os.listdir(NIFTI_data)
- list_patient = natsorted(list_patient)
-
- for patient_path in list_patient:
- print(patient_path, '='*50)
- patient_path = patient_path + '/'
- NIFTI_Folder = NIFTI_data + patient_path
- DCM_Folders = DCM_data + patient_path
- list_nii= glob.glob(NIFTI_Folder + '*_trans.nii')
- list_CT= glob.glob(DCM_Folders + 'CT*.dcm')
- list_nii= natsorted(list_nii, reverse=False)
- list_CT= natsorted(list_CT, reverse=False)
-
- label_Sequence = []
- for niiFileName in list_nii:
- print('Reading:', niiFileName)
- nii = nib.load(niiFileName)
- label_part = nii.get_fdata()
- # affine===================================
- if nii.affine[0, 0] > 0:
- label_part = np.flip(label_part, axis=0)
- if nii.affine[1, 1] > 0:
- label_part = np.flip(label_part, axis=1)
- if nii.affine[2, 2] > 0:
- label_part = np.flip(label_part, axis=2)
- # ==========================================
- label_part = np.transpose(label_part, (2,1,0))
- label_Sequence += list(label_part)
- label_Sequence = np.array(label_Sequence)
- label_Sequence = _one_hot_encoder(label_Sequence)
- print('Label\'s shape:\n', label_Sequence.shape)
-
- for i, organ_name in enumerate(Organ):
- dir_path = output_dir + patient_path + 'MONAI_' + organ_name + '/'
- # print('Output:', dir_path)
- if(label_Sequence[i].any()>0):
- if os.path.exists(dir_path)==False:
- os.makedirs(dir_path)
- for j in range(len(label_Sequence[i])):
- path = list_CT[j].replace(DCM_data, output_dir)
- path = path.replace('\\', '/')
- path = path.replace(patient_path, patient_path + 'MONAI_' + organ_name + '/')
- path = path.replace('.dcm', '_OUT.png')
- cv2.imwrite(path, label_Sequence[i][j])
|