import os import nibabel as nib import numpy as np import cv2 import glob from natsort import natsorted from organList import * # لیست اندام‌ها مانند Organ = ['liver', 'spleen', ...] # اندام‌های مورد نظر برای استخراج ماسک target_organs = ["liver", "spleen", "kidney_right", "kidney_left", "gallbladder", "stomach", "pancreas"] # مسیرها NIFTI_data_dir = '/media/external_10T/mehran_advand/segment/myenv/monai_wholeBody_ct_segmentation/Segmentation_Output' DCM_data_dir = '/media/external_10T/mehran_advand/DeepLesion/Images_dicom_test' output_dir = 'MONAI/' # دریافت لیست بیماران (فولدرهایی مثل 000001_01_01) patient_folders = natsorted(os.listdir(NIFTI_data_dir)) for patient_id in patient_folders: # if patient_id != '000053_06_01': # continue print(f"\n🧾 Processing patient: {patient_id}") # ساخت مسیر فایل NIfTI و فولدر DICOM nii_path = os.path.join(NIFTI_data_dir, patient_id, f"{patient_id}_trans.nii.gz") dcm_folder = os.path.join(DCM_data_dir, patient_id) if not os.path.isfile(nii_path): print(f"❌ NIfTI file not found for {patient_id}") continue dcm_files = glob.glob(os.path.join(dcm_folder, "*.dcm")) if not dcm_files: print(f"❌ No DICOM files found for {patient_id}") continue dcm_files = natsorted(dcm_files) # بارگذاری داده‌ی NIfTI print(f"📥 Reading NIfTI: {nii_path}") nii = nib.load(nii_path) label_data = nii.get_fdata() # بررسی و تصحیح محورها بر اساس affine if nii.affine[0, 0] > 0: label_data = np.flip(label_data, axis=0) if nii.affine[1, 1] > 0: label_data = np.flip(label_data, axis=1) if nii.affine[2, 2] > 0: label_data = np.flip(label_data, axis=2) label_data = np.transpose(label_data, (2, 1, 0)) # Z, Y, X num_slices = min(len(label_data), len(dcm_files)) # پردازش هر اندام for target_organ in target_organs: if target_organ not in Organ: print(f"⚠️ Organ '{target_organ}' not in Organ list. Skipping...") continue organ_index = Organ.index(target_organ) print(f"🧠 Processing organ: {target_organ} (index {organ_index})") for idx in range(num_slices): binary_mask = (label_data[idx] == organ_index).astype(np.uint8) * 255 #if np.any(binary_mask): dcm_path = dcm_files[idx] out_path = dcm_path.replace(DCM_data_dir, output_dir) out_path = out_path.replace(patient_id, f"{patient_id}/MONAI_{target_organ}") out_path = out_path.replace('.dcm', '_OUT.png') out_path = out_path.replace('\\', '/') os.makedirs(os.path.dirname(out_path), exist_ok=True) cv2.imwrite(out_path, binary_mask)