# 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)
Exemple #3
0
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})