Organ-aware 3D lesion segmentation dataset and pipeline for abdominal CT analysis (ACM Multimedia 2025 candidate)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

nii2png.py 2.6KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import os
  2. import nibabel as nib
  3. import numpy as np
  4. import cv2
  5. import glob
  6. from natsort import natsorted
  7. from organList import *
  8. def _one_hot_encoder(input_data):
  9. label_list = [[] for i in range(n_classes)]
  10. for i in range(n_classes):
  11. temp_prob = input_data == i ##取出第幾類
  12. temp_prob = np.squeeze(temp_prob)
  13. label_list[i].append(temp_prob)
  14. # print(np.unique(label_list[i])) ##True/False的masks
  15. label_list[i] = np.squeeze(np.array(label_list[i]))*255 ##為了存成uint8來可視化,所以*255
  16. # print(np.unique(label_list[i]))
  17. output_tensor = np.array(label_list)
  18. return output_tensor
  19. NIFTI_data = 'NIFTI/'
  20. DCM_data = 'DICOM/'
  21. output_dir = 'MONAI/'
  22. n_classes = len(Organ)
  23. list_patient = os.listdir(NIFTI_data)
  24. list_patient = natsorted(list_patient)
  25. for patient_path in list_patient:
  26. print(patient_path, '='*50)
  27. patient_path = patient_path + '/'
  28. NIFTI_Folder = NIFTI_data + patient_path
  29. DCM_Folders = DCM_data + patient_path
  30. list_nii= glob.glob(NIFTI_Folder + '*_trans.nii')
  31. list_CT= glob.glob(DCM_Folders + 'CT*.dcm')
  32. list_nii= natsorted(list_nii, reverse=False)
  33. list_CT= natsorted(list_CT, reverse=False)
  34. label_Sequence = []
  35. for niiFileName in list_nii:
  36. print('Reading:', niiFileName)
  37. nii = nib.load(niiFileName)
  38. label_part = nii.get_fdata()
  39. # affine===================================
  40. if nii.affine[0, 0] > 0:
  41. label_part = np.flip(label_part, axis=0)
  42. if nii.affine[1, 1] > 0:
  43. label_part = np.flip(label_part, axis=1)
  44. if nii.affine[2, 2] > 0:
  45. label_part = np.flip(label_part, axis=2)
  46. # ==========================================
  47. label_part = np.transpose(label_part, (2,1,0))
  48. label_Sequence += list(label_part)
  49. label_Sequence = np.array(label_Sequence)
  50. label_Sequence = _one_hot_encoder(label_Sequence)
  51. print('Label\'s shape:\n', label_Sequence.shape)
  52. for i, organ_name in enumerate(Organ):
  53. dir_path = output_dir + patient_path + 'MONAI_' + organ_name + '/'
  54. # print('Output:', dir_path)
  55. if(label_Sequence[i].any()>0):
  56. if os.path.exists(dir_path)==False:
  57. os.makedirs(dir_path)
  58. for j in range(len(label_Sequence[i])):
  59. path = list_CT[j].replace(DCM_data, output_dir)
  60. path = path.replace('\\', '/')
  61. path = path.replace(patient_path, patient_path + 'MONAI_' + organ_name + '/')
  62. path = path.replace('.dcm', '_OUT.png')
  63. cv2.imwrite(path, label_Sequence[i][j])