def visualize_prediction( algorithms, pred_results, M, labels, output_prefix=""): visualize_prediction.counter += 1 for m in M: metadata = m for algorithm in algorithms: alg_name = algorithm[2] mean_preds = np.sum(np.array(pred_results[alg_name])-np.array(labels), axis=0) sd_preds = np.std(np.array(pred_results[alg_name])-np.array(labels), axis=0) scalars = np.abs(mean_preds * 10. / np.max(mean_preds)) petacc_root = "/datagrid/Medical/microscopy/petacc3" image_name = os.path.basename(metadata[0])[:8] patch_size = int(os.path.basename(metadata[0]).split('_')[3][1:]) image_path = petacc_root + "/batch_2/" + image_name + ".ndpi" if not os.path.exists(image_path): image_path = petacc_root + "/batch_1/" + image_name + ".ndpi" si = NDPISlideImage(image_path, None) patchvis = si.get_patch_visualization(5, metadata[2], patch_size, scalars=scalars[m[3]:m[3]+len(m[2])], line_thickness=2, show=False ) cv2.imwrite("/tmp/{}_l0_vis_".format(output_prefix)+image_name+"_"+alg_name+"features_{:d}.png".format(visualize_prediction.counter), patchvis)
def visualize_prediction( feature_name, pred_results, M, labels, train_len=0, output_prefix=""): data_counter = 0 for m in M: metadata = m # mean_preds = np.sum(np.array(pred_results[alg_name])-np.array(labels), axis=0) scalars = np.abs(pred_results * 100. / np.max(pred_results)) petacc_root = "/datagrid/Medical/microscopy/petacc3" image_name = os.path.basename(metadata[0])[:8] patch_size = 1024 image_path = petacc_root + "/batch_2/" + image_name + ".ndpi" if not os.path.exists(image_path): image_path = petacc_root + "/batch_1/" + image_name + ".ndpi" si = NDPISlideImage(image_path, None) patchvis = si.get_patch_visualization(6, metadata[2], patch_size, scalars=scalars[m[3]:m[3]+len(m[2])], line_thickness=1, show=False, filled=True) # if data_counter < train_len: # cv2.putText(patchvis, 'test', (40, 40), cv2.FONT_HERSHEY_PLAIN, 1, (255, 0, 0), 2, cv2.LINE_AA) # else: # cv2.putText(patchvis, 'vali', (40, 40), cv2.FONT_HERSHEY_PLAIN, 1, (0, 0, 255), 2, cv2.LINE_AA) cv2.imwrite("{}_{}_{}".format(output_prefix, image_name, feature_name) + ".png", patchvis) data_counter += 1
def visualize_prediction( algorithms, pred_results, M, labels, train_len=0, output_prefix=""): visualize_prediction.counter += 1 data_counter = 0 validation_offset = 0 imtype = '' for m in M: metadata = m for algorithm in algorithms: alg_name = algorithm[2] # mean_preds = np.sum(np.array(pred_results[alg_name])-np.array(labels), axis=0) mean_preds = np.sum(np.array(pred_results[alg_name]), axis=0) max_preds = np.max(np.array(pred_results[alg_name]), axis=0) min_preds = np.min(np.array(pred_results[alg_name]), axis=0) sd_preds = np.sum(np.array(pred_results[alg_name]), axis=0) # sd_preds = np.std(np.array(pred_results[alg_name])-np.array(labels), axis=0) scalars = np.abs(mean_preds * 100. / np.max(mean_preds)) border_scalars = np.zeros_like(scalars) for li, label in enumerate(labels): if label > 0: border_scalars[li] = 100 * min_preds[li] else: border_scalars[li] = 100 * max_preds[li] petacc_root = "/datagrid/Medical/microscopy/petacc3" image_name = os.path.basename(metadata[0])[:8] patch_size = int(os.path.basename(metadata[0]).split('_')[3][1:]) image_path = petacc_root + "/batch_2/" + image_name + ".ndpi" if not os.path.exists(image_path): image_path = petacc_root + "/batch_1/" + image_name + ".ndpi" si = NDPISlideImage(image_path, None) patchvis = si.get_patch_visualization(6, metadata[2], patch_size, scalars=scalars[validation_offset+m[3]:validation_offset+m[3]+len(m[2])], border_scalars=border_scalars[validation_offset+m[3]:validation_offset+m[3]+len(m[2])], line_thickness=1, show=False, filled=True) if data_counter < train_len: cv2.putText(patchvis, 'test', (40, 40), cv2.FONT_HERSHEY_PLAIN, 1, (255, 0, 0), 2, cv2.LINE_AA) imtype='test' else: cv2.putText(patchvis, 'vali', (40, 40), cv2.FONT_HERSHEY_PLAIN, 1, (0, 0, 255), 2, cv2.LINE_AA) imtype='vali' data_counter += 1 if data_counter == train_len: validation_offset = m[3]+len(m[2]) cv2.imwrite("/local/temporary/clf_vis/{}".format(output_prefix)+image_name+"_{}_".format(imtype)+alg_name+"features_{:d}.png".format(visualize_prediction.counter), patchvis)
if line_count == 0: line_count += 1 elif line_count < 84: split_row = row[0].split(';') if split_row[1] == 'None' and cmdline_args.skip: line_count += 1 continue image_path = (cmdline_args.folder + "\\" + split_row[0] + ".ndpi").replace("/", "\\").replace("\\\\", "\\") annotation_path = (cmdline_args.folder + "\\" + split_row[1]).replace("/", "\\").replace("\\\\", "\\") mask_path = (cmdline_args.folder + "\\" + split_row[2]).replace("/", "\\").replace("\\\\", "\\") cat_muc = split_row[3] cat_ser = split_row[4] cat_cro = split_row[5] si = NDPISlideImage(image_path=image_path, tissue_mask_path=mask_path, tumor_annotation_file=annotation_path) p = si.get_annotated_patches(extract_level=cmdline_args.extract_level, min_coverage_extraction=cmdline_args.min_coverage, min_tumor_coverage=0.9, p_size=cmdline_args.patch_size, p_shift=p_shift) name = split_row[0].split("/")[1].split("-")[0] patch_count = 0 all_count = 1 tucount = 0 nocount = 0 bocount = 0 for patch in p: patch_array = si.load_patch(patch[0], (cmdline_args.patch_size, cmdline_args.patch_size)) image = Image.fromarray(patch_array) if augmentation: images = [image, image.transpose(Image.FLIP_LEFT_RIGHT), image.transpose(Image.FLIP_TOP_BOTTOM),
[0.4895436, 0.74380669, 0.50788103], [0.53518641, 0.76756465, 0.35352657]]) modulation_matrix = None if cmdline_args.convolution_matrix is not None: rgb_from_her = eval(cmdline_args.convolution_matrix) print('Retrieved color-mixing matrix: \n ' + str(rgb_from_her)) her_from_rgb = np.linalg.inv(rgb_from_her) if cmdline_args.modulation_matrix is not None: modulation_matrix = eval(cmdline_args.modulation_matrix) print('Retrieved modulation matrix: \n ' + str(modulation_matrix)) if '.ndpi' in cmdline_args.image: si = NDPISlideImage(image_path=cmdline_args.image, tissue_mask_path=cmdline_args.mask) is_camelyon = False rgb_from_her = np.array([[0.47680668, 0.54035088, 0.33853616], [0.33593786, 0.74302103, 0.58208704], [0.42269833, 0.80876244, 0.37791299]]) p_shift = cmdline_args.patch_size p = si.get_annotated_patches( extract_level=cmdline_args.extract_level, min_coverage_extraction=cmdline_args.min_coverage, min_tumor_coverage=0.6, p_size=cmdline_args.patch_size, p_shift=p_shift) np.random.shuffle(p)
flush_event_id = 0 flush_time = 600 image_features = [] n = len(patches) i = 1 avg_time = 0 cum_time = 0 dsigma = np.array([0.25, 0.125, 0.0625]) si = CamelyonSlideImage(patches[0][3], None) is_camelyon = True area_low = 100 if patches[0][3].find('.ndpi') > -1: si = NDPISlideImage(patches[0][3], None) is_camelyon = False area_low = 50 show_intermediate = False if 'show' in options: show_intermediate = True si._visualize = True st_elem = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3)) st_elem_r1 = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (1, 1)) for patch_descriptor in patches: p_location = patch_descriptor[0] p_base_size = patch_descriptor[1] label = patch_descriptor[2]
required=False) opt_group.add_argument( "--preview", type=str, help='File path for storing the preview image with annotated patches', default=None, required=False) cmdline_args = parser.parse_args() si = CamelyonSlideImage(image_path=cmdline_args.image, tissue_mask_path=cmdline_args.mask, tumor_annotation_file=cmdline_args.tumor_annot) if '.ndpi' in cmdline_args.image: si = NDPISlideImage(image_path=cmdline_args.image, tissue_mask_path=cmdline_args.mask, tumor_annotation_file=cmdline_args.tumor_annot) p_shift = cmdline_args.patch_stride if p_shift < 0: p_shift = cmdline_args.patch_size p = si.get_annotated_patches( extract_level=cmdline_args.extract_level, min_coverage_extraction=cmdline_args.min_coverage, min_tumor_coverage=0.6, p_size=cmdline_args.patch_size, p_shift=p_shift) if cmdline_args.preview is not None: p_img = si.get_patch_visualization(cmdline_args.extract_level,