def create_image_patch_selection_process_log_image(case_id):
    saliency_prediction_overview_visualization_directory_path = input_folder_path + "/visualizations/saliency_prediction_overview_visualization/" + case_id
    most_salient_high_res_image_patch_directory_path = input_folder_path + "/visualizations/most_salient_image_patch_high_res/" + case_id
    most_salient_high_res_image_patch_with_annotation_directory_path = input_folder_path + "/visualizations/highest_nuclei_count_annotations_on_most_salient_high_res_image_patch/" + case_id
    image_patch_with_highest_nuclei_count_directory_path = input_folder_path + "/visualizations/image_patches_with_highest_nuclei_count/images_original/" + case_id
    image_patch_with_highest_nuclei_count_directory_with_prediction_masks_path = input_folder_path + "/visualizations/image_patches_with_highest_nuclei_count/images_annotated/" + case_id

    saliency_prediction_overview_visualization_path = path_utils.create_full_paths_to_files_in_directory_path(saliency_prediction_overview_visualization_directory_path)[0]
    most_salient_high_res_image_patch_path = path_utils.create_full_paths_to_files_in_directory_path(most_salient_high_res_image_patch_directory_path)[0]
    most_salient_high_res_image_patch_with_annotation_path = path_utils.create_full_paths_to_files_in_directory_path(most_salient_high_res_image_patch_with_annotation_directory_path)[0]
    image_patch_with_highest_nuclei_count_path = path_utils.create_full_paths_to_files_in_directory_path(image_patch_with_highest_nuclei_count_directory_path)[0]
    image_patch_with_highest_nuclei_count_with_prediction_masks_path = path_utils.create_full_paths_to_files_in_directory_path(image_patch_with_highest_nuclei_count_directory_with_prediction_masks_path)[0]


    saliency_prediction_overview_visualization_image = Image.open(saliency_prediction_overview_visualization_path)
    # most_salient_high_res_image_patch_image = Image.open(most_salient_high_res_image_patch_path)
    # most_salient_high_res_image_patch_with_annotation_image = Image.open(
    #     most_salient_high_res_image_patch_with_annotation_path)
    # image_patch_with_highest_nuclei_count_image = Image.open(image_patch_with_highest_nuclei_count_path)
    # image_patch_with_highest_nuclei_count_with_prediction_masks_image = Image.open(
    #     image_patch_with_highest_nuclei_count_with_prediction_masks_path)

    high_res_image_patch_images_merged_horizontally = image_utils.merge_images_horizontally(
        [most_salient_high_res_image_patch_path, most_salient_high_res_image_patch_with_annotation_path])
    image_patch_with_highest_nuclei_count_image_images_merged_horizontally = image_utils.merge_images_horizontally(
        [image_patch_with_highest_nuclei_count_path,
         image_patch_with_highest_nuclei_count_with_prediction_masks_path])
    selection_processing_log_image = image_utils.merge_images_vertically(
        [saliency_prediction_overview_visualization_image,
         high_res_image_patch_images_merged_horizontally,
         image_patch_with_highest_nuclei_count_image_images_merged_horizontally])

    return selection_processing_log_image
コード例 #2
0
def output_image_patch_with_highest_predicted_nuclei_count(
        image_patches_path,
        output_diretory_path,
        all_image_patches_for_case_id_directory_path,
        image_mode,
        with_image_mask=False):
    image_patch_paths = path_utils.create_full_paths_to_files_in_directory_path(
        image_patches_path)
    image_patch_path_with_highest_nuclei_count = get_image_patch_path_with_highest_nuclei_count(
        image_patch_paths)

    image_patch_file = image_patch_path_with_highest_nuclei_count.split(
        '/')[-1]
    if (with_image_mask is True):
        new_image_patch_path = output_diretory_path + "/" + image_patch_file
        shutil.copy(image_patch_path_with_highest_nuclei_count,
                    new_image_patch_path)
        return

    all_image_patches_mode_paths = path_utils.create_full_paths_to_directories_in_directory_path(
        all_image_patches_for_case_id_directory_path)
    directory_path_for_all_image_patches_with_specific_image_mode = get_path_for_all_image_patches_with_specific_image_mode(
        all_image_patches_mode_paths, image_mode)

    all_image_patches_with_specific_image_mode_paths = path_utils.create_full_paths_to_files_in_directory_path(
        directory_path_for_all_image_patches_with_specific_image_mode)

    parse_target_image_patch_file_name_to_dict = image_patch_file_name_parser.parse_image_patch_file_name_to_dict(
        image_patch_file)
    target_image_patch_metadata_object = image_patch_metadata_object.image_patch_metadata_object_from_image_patch_dict(
        parse_target_image_patch_file_name_to_dict)

    target_image_patch_path = get_target_image_patch_path(
        all_image_patches_with_specific_image_mode_paths,
        target_image_patch_metadata_object)

    new_image_patch_path = output_diretory_path + "/" + image_patch_file

    shutil.copy(target_image_patch_path, new_image_patch_path)
コード例 #3
0
def output_image_patch_with_highest_predicted_nuclei_count(
        image_patches_path, output_diretory_path):
    image_patch_paths = path_utils.create_full_paths_to_files_in_directory_path(
        image_patches_path)
    image_patch_path_with_highest_nuclei_count = None
    highest_nuclei_count = 0
    for image_patch_path in image_patch_paths:
        image_patch_file_name = image_patch_path.split('/')[-1]
        predicted_nuclei_count = int(
            image_patch_file_name_parser.
            parse_image_patch_for_nuclei_count_prediction(
                image_patch_file_name))
        if predicted_nuclei_count >= highest_nuclei_count:
            image_patch_path_with_highest_nuclei_count = image_patch_path
            highest_nuclei_count = predicted_nuclei_count

    image_patch_file = image_patch_path_with_highest_nuclei_count.split(
        '/')[-1]
    new_image_patch_path = output_diretory_path + "/" + image_patch_file

    shutil.move(image_patch_path_with_highest_nuclei_count,
                new_image_patch_path)
svs_loader = svs_l.SVSLoader(svs_input_folder_path)

path_utils.halt_script_if_path_does_not_exist(input_folder_path)
path_utils.create_directory_if_directory_does_not_exist_at_path(
    output_folder_path)

most_salient_image_patch_case_directory_paths = path_utils.create_full_paths_to_directories_in_directory_path(
    input_folder_path + "/visualizations/most_salient_image_patch_high_res")
CID_indexed_high_saliency_image_patch_metadata_objects_dict = image_patch_metadata_object_utils.case_directory_paths_containing_image_patches_to_dict_indexed_by_CID(
    most_salient_image_patch_case_directory_paths)

high_nuclei_count_case_directory_paths = path_utils.create_full_paths_to_directories_in_directory_path(
    input_folder_path_for_high_res_image_patches)

for high_nuclei_count_case_directory_path in high_nuclei_count_case_directory_paths:
    high_nuclei_count_case_image_patches_paths = path_utils.create_full_paths_to_files_in_directory_path(
        high_nuclei_count_case_directory_path)
    first_image_patch_path = high_nuclei_count_case_image_patches_paths[0]
    image_name = first_image_patch_path.split('/')[-1]
    image_patch_metadata_object_with_high_nucleus = image_patch_file_name_parser.parse_image_patch_file_name_into_image_patch_metadata_object(
        image_name)

    corresponding_image_patch_metadata_object_with_highest_saliency = CID_indexed_high_saliency_image_patch_metadata_objects_dict[
        image_patch_metadata_object_with_high_nucleus.case_id]
    corresponding_image_patch_metadata_object_with_highest_saliency.image_patch_path = path_utils.create_full_paths_to_files_in_directory_path(
        input_folder_path +
        "/visualizations/most_salient_image_patch_high_res/" +
        corresponding_image_patch_metadata_object_with_highest_saliency.case_id
    )[0]
    annotate_the_region_on_image_patch_with_the_highest_nuclei_count(
        corresponding_image_patch_metadata_object_with_highest_saliency,
        image_patch_metadata_object_with_high_nucleus, svs_loader,
svs_input_folder_path = args.svs_input_folder_path
csv_input_folder_path = args.csv_input_folder_path
output_folder_path = args.output_folder_path
accuracy_percentage_threshold = args.accuracy_percentage_threshold

path_utils.halt_script_if_path_does_not_exist(svs_input_folder_path)
path_utils.halt_script_if_path_does_not_exist(csv_input_folder_path)

path_utils.create_directory_if_directory_does_not_exist_at_path(
    output_folder_path)

full_tcga_download_directory_paths = path_utils.create_full_paths_to_directories_in_directory_path(
    svs_input_folder_path)

full_image_patch_data_dict_paths = path_utils.create_full_paths_to_files_in_directory_path(
    csv_input_folder_path)

for full_tcga_download_directories_path_index, full_tcga_download_directory_path in enumerate(
        full_tcga_download_directory_paths):
    full_image_name_paths = path_utils.create_full_paths_to_files_in_directory_path(
        full_tcga_download_directory_path)
    image_name = full_image_name_paths[0].split('/')[-1][:-4]
    output_path = output_folder_path + '/' + image_name + '/'
    path_utils.create_directory_if_directory_does_not_exist_at_path(
        output_path)
    thumbnail = create_jpeg_thumbnail_of_wsi(full_image_name_paths[0])
    thumbnail = thumbnail.convert("RGB")
    thumbnail.save(output_path + image_name + "_original.jpeg", 'JPEG')
    thumbnail = thumbnail.convert("RGBA")
    svs_image = svs_utils.get_svs_image_of_wsi_from_path(
        full_image_name_paths[0])
                    "the script will create it.",
                    required=True)

args = parser.parse_args()

input_folder_path = args.input_folder_path
output_folder_path = args.output_folder_path

path_utils.halt_script_if_path_does_not_exist(input_folder_path)
path_utils.create_directory_if_directory_does_not_exist_at_path(
    output_folder_path)
case_directory_paths = path_utils.create_full_paths_to_directories_in_directory_path(
    input_folder_path)

for case_directory_path in case_directory_paths:
    full_image_patch_paths = path_utils.create_full_paths_to_files_in_directory_path(
        case_directory_path)
    for full_input_image_patch_path in full_image_patch_paths:
        case_id = full_input_image_patch_path.split('/')[-2]
        case_id_directory_path = output_folder_path + "/" + case_id
        path_utils.create_directory_if_directory_does_not_exist_at_path(
            case_id_directory_path)

        image_patch_file = full_input_image_patch_path.split('/')[-1][:-4]
        image_patch_root_path = case_id_directory_path + "/" + image_patch_file
        path_utils.create_directory_if_directory_does_not_exist_at_path(
            case_id_directory_path)

        case_images_path = image_patch_root_path + "/" + "images"
        path_utils.create_directory_if_directory_does_not_exist_at_path(
            case_images_path)
コード例 #7
0
parser.add_argument("-op", "--overlap_percentage", type=int, default=0,
                    help="Overlapping percentage between patches."
                         " Default value is 0.")

parser.add_argument("-ws ", "--window_size", type=int, default=10000,
                    help="Size for square window"
                         " Default value is 10000.")

args = parser.parse_args()

input_folder_path = args.input_folder_path
output_folder_path = args.output_folder_path
start_at_image_name = args.start_at_image_name
to_resolution_level = args.resolution_level
overlapping_percentage = float("{0:.2f}".format(args.overlap_percentage / 100))
window_size = args.window_size

path_utils.halt_script_if_path_does_not_exist(input_folder_path)
path_utils.create_directory_if_directory_does_not_exist_at_path(output_folder_path)

full_tcga_download_directories_paths = path_utils.create_full_paths_to_directories_in_directory_path(input_folder_path)
for full_tcga_download_directories_path in full_tcga_download_directories_paths:
    full_image_name_paths = path_utils.create_full_paths_to_files_in_directory_path(full_tcga_download_directories_path)
    for full_image_name_path in full_image_name_paths:
        file_type = full_image_name_path[-4:]
        if file_type == ".svs":
            output_path = output_folder_path + '/'
            svs_image_patch_extractor.split_to_jpeg_image_patches(full_image_name_path, output_path, to_resolution_level,
                                                                  overlapping_percentage, window_size)
output_folder_path = args.output_folder_path
to_resolution_level = int(args.resolution_level)
overlapping_percentage = float("{0:.2f}".format(args.overlap_percentage / 100))
window_size = args.window_size

path_utils.halt_script_if_path_does_not_exist(svs_input_folder_path)
path_utils.halt_script_if_path_does_not_exist(csv_input_folder_path)

path_utils.create_directory_if_directory_does_not_exist_at_path(
    output_folder_path)

tcga_download_directory_paths = path_utils.create_full_paths_to_directories_in_directory_path(
    svs_input_folder_path)

case_image_patch_metadata_objects_csv_paths = path_utils.create_full_paths_to_files_in_directory_path(
    csv_input_folder_path)
CID_indexed_image_patch_metadata_objects_dict = image_patch_metadata_object_utils.case_image_patch_metadata_csv_paths_to_dict_indexed_by_CID(
    case_image_patch_metadata_objects_csv_paths)

for tcga_download_directories_path_index, tcga_download_directory_path in enumerate(
        tcga_download_directory_paths):
    full_image_name_paths = path_utils.create_full_paths_to_files_in_directory_path(
        tcga_download_directory_path)
    # there might be more than one image in a tcga download directory path (TO-DO: improve current solution)
    first_image_name_path = full_image_name_paths[0]

    case_id = first_image_name_path.split('/')[-1][:-4]
    image_patch_metadata_objects_corresponding_to_CID = CID_indexed_image_patch_metadata_objects_dict[
        case_id]

    image_patch_metadata_object_with_highest_saliency_prediction = image_patch_metadata_object_utils.get_image_patch_metadata_object_with_the_highest_saliency(
コード例 #9
0
input_folder_path = args.input_folder_path
output_folder_path = args.output_folder_path

labeled_dataset_output_folder_path = args.output_folder_path + "/labeled_SPOP_mutation_state_dataset"
mutation_file_directory_path = args.mutation_file_path
gene_of_interest = args.gene_of_interest
disc_operation = args.disc_operation

image_patch_input_folder_path = input_folder_path + "/image_patches_with_highest_nuclei_count/images_original"
path_utils.halt_script_if_path_does_not_exist(image_patch_input_folder_path)
path_utils.create_directory_if_directory_does_not_exist_at_path(
    output_folder_path)
case_directory_paths = path_utils.create_full_paths_to_directories_in_directory_path(
    image_patch_input_folder_path)
mutation_file_path = path_utils.create_full_paths_to_files_in_directory_path(
    mutation_file_directory_path)[0]

all_image_patches_with_meta_info_paths = []
for case_directory_path in case_directory_paths:
    print(case_directory_path)
    image_patch_with_meta_info_path = path_utils.create_full_paths_to_files_in_directory_path(
        case_directory_path)[0]
    all_image_patches_with_meta_info_paths.append(
        image_patch_with_meta_info_path)

gene_mutation_image_patch_labeler.label_image_patches(
    all_image_patches_with_meta_info_paths, mutation_file_path,
    gene_of_interest, labeled_dataset_output_folder_path, disc_operation)
copy_tree(input_folder_path + "/visualizations",
          output_folder_path + "/visualizations")
images_input_folder_path = args.input_folder_path + '/' + "preprocessed_high_res_image_patches" + "/"
output_folder_path = args.output_folder_path
reorganized_image_patches = args.output_folder_path + '/' + "preprocessed_image_patches_organized_for_classifier" + "/"

image_mode = args.image_mode

path_utils.halt_script_if_path_does_not_exist(images_input_folder_path)
path_utils.create_directory_if_directory_does_not_exist_at_path(
    output_folder_path)
case_directory_paths = path_utils.create_full_paths_to_directories_in_directory_path(
    images_input_folder_path)

for case_directory_path in case_directory_paths:
    full_image_patch_paths = None
    if (image_mode == "rgb"):
        full_image_patch_paths = path_utils.create_full_paths_to_files_in_directory_path(
            case_directory_path + "/rgb")
    elif (image_mode == "grayscale"):
        full_image_patch_paths = path_utils.create_full_paths_to_files_in_directory_path(
            case_directory_path + "/grayscale")

    for full_input_image_patch_path in full_image_patch_paths:
        case_id = full_input_image_patch_path.split('/')[-3]
        case_id_directory_path = reorganized_image_patches + "/" + case_id
        path_utils.create_directory_if_directory_does_not_exist_at_path(
            case_id_directory_path)

        image_patch_file = full_input_image_patch_path.split('/')[-1][:-4]
        image_patch_root_path = case_id_directory_path + "/" + image_patch_file
        path_utils.create_directory_if_directory_does_not_exist_at_path(
            case_id_directory_path)