from dcmrtstruct2nii import dcmrtstruct2nii, list_rt_structs from glob import glob import os import platform directory_split = "\\" if platform.system() == "Windows" else "/" def format_scan(dicom_path, rstruct_path, savepath): dcmrtstruct2nii(rstruct_path, dicom_path, savepath, mask_foreground_value=1, structures=['GTV-1']) def move_temporary_file(save_directory, file_name): try: os.rename(f"{save_directory}{directory_split}temp{directory_split}mask_GTV-1.nii.gz", f"{save_directory}{directory_split}Labels{directory_split}{file_name}") os.rename(f"{save_directory}{directory_split}temp{directory_split}image.nii.gz", f"{save_directory}{directory_split}Images{directory_split}{file_name}") except: print("Segmentation or raw image not found\nmoving on...") def format_radiomics(load_directory, save_directory): os.mkdir(f"{save_directory}{directory_split}temp") os.mkdir(f"{save_directory}{directory_split}Images") os.mkdir(f"{save_directory}{directory_split}Labels") temp_dir = f"{save_directory}{directory_split}temp" for scan in sorted(glob(f"{load_directory}{directory_split}*")): file_name = "radiomics_" + scan.split(directory_split)[-1].split("-")[-1] scan_folder = glob(f"{scan}{directory_split}*")[0] components = glob(f"{scan_folder}{directory_split}*") dcm = components[0] rstruct = components[0] for component in components: if(len(glob(f"{component}{directory_split}*")) > 1): dcm = component break for component in components: rs = glob(f"{component}{directory_split}*")[0] try: list_rt_structs(rs) rstruct = rs except: pass format_scan(dcm, rstruct, temp_dir) move_temporary_file(save_directory, f"{file_name}.nii.gz") if __name__ == "__main__": format_radiomics("D:\\Datasets\\NSCLC-Radiomics\\NSCLC-Radiomics\\", "D:\\Datasets\\Temp\\")