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
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)
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)
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(
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)