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)
Example #4
0
            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),
Example #5
0
                                 [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)
Example #6
0
    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,