# save images results = results.astype(np.uint8) for i_case in range(results.shape[0]): if post_processing: #Remove very small lesions (3 voxels) labels_out = cc3d.connected_components(results[i_case,:,:,:]) for i_cc in np.unique(labels_out): if len(labels_out[labels_out == i_cc]) <= min_area: results[i_case,:,:,:][labels_out == i_cc] = 0 save_image(results[i_case,:,:,:], jp(path_results, experiment_name_folder,"test"+all_indexes[i_case][0] + "_" + all_indexes[i_case][1] + "_qwertz.nii")) # Save dictionary that identifies which folds were considered selection["experiment"] = experiment_name selection["Postprocessing"] = post_processing selection["Min-area"] = min_area create_log(jp(path_results, experiment_name_folder), selection) z = 0 elif experiment_type == 'l': path_exp = jp(path_experiments_l, experiment_name) folds = list_folders(path_exp) #Read log file to get parameters parameters_dict = parse_log_file(jp(path_exp, folds[0])) # take file of first fold as reference all_folds = [] for f in folds: if selection[f] == False:
print(cnt + 1, "/", len(test_images)) scan_path = jp(path_test, case) inf_slices = get_inference_slices(scan_path=scan_path, input_data=options['input_data'], normalize=True, norm_type='zero_one') probs = get_probs(inf_slices, lesion_model, device, options['num_classes'], options) labels = np.transpose(np.argmax(probs, axis=1).astype(np.uint8), (1, 2, 0)) labels_gt = nib.load(jp(path_test, case, options['gt'])).get_fdata().astype(np.uint8) #GT #DSC dsc = compute_dices(labels_gt.flatten(), labels.flatten()) hd = compute_hausdorf(labels_gt, labels.astype(np.uint8)) df.loc[i_row] = [case, dsc[0], hd[0]] i_row += 1 #Save result img_nib = nib.Nifti1Image(labels, np.eye(4)) create_folder(jp(path_segmentations, case)) nib.save(img_nib, jp(path_segmentations, case, case + "_segm.nii.gz")) cnt += 1 df.to_csv(jp(path_results, "results.csv"), float_format='%.5f', index=False) print(df.mean()) create_log(path_results, options)
name_folder_new_ensemble = "Ensemble_" + str(num_ens + 1).zfill(2) create_folder(jp(path_ensembles, name_folder_new_ensemble)) # Check that listed experiments exist all_experiments = list_folders(path_base) all_experiments = [x for x in all_experiments if x in experiments_to_ensemble] assert len(all_experiments) % 2 != 0 # number of experiments must be odd all_images = [] for i_exp, exp in enumerate(all_experiments): print("Current experiment: ", exp, i_exp + 1, "/", len(all_experiments)) all_images_names = list_files_with_extension(jp(path_base, exp), "nii") all_images_curr_exp = [] for img in all_images_names: all_images_curr_exp.append( nib.load(jp(path_base, exp, img)).get_fdata().astype(np.uint8)) all_images.append(np.stack(all_images_curr_exp)) # (61, volume size) all_images_np = np.stack(all_images) the_sum = np.sum(all_images_np, axis=0) voting = the_sum >= np.ceil(len(all_experiments) / 2) # save images for i_case in range(voting.shape[0]): save_image( voting[i_case, :, :, :].astype(np.uint8), jp(path_ensembles, name_folder_new_ensemble, all_images_names[i_case])) create_log(jp(path_ensembles, name_folder_new_ensemble), {'experiments': all_experiments})