Exemplo n.º 1
0
    def test_grabcut_on_aid(aid):
        chip_fpath = ibs.get_annot_chip_fpath(aid)
        probchip_fpath = ibs.get_annot_probchip_fpath(aid)

        chip_img = cv2.imread(chip_fpath)
        probchip_img = cv2.imread(probchip_fpath, flags=cv2.IMREAD_GRAYSCALE)

        label_values = [cv2.GC_BGD, cv2.GC_PR_BGD, cv2.GC_PR_FGD, cv2.GC_FGD]

        def probchip_to_grabcut_labels(probchip_img, w, h):
            scaled_probchip = cv2.resize(probchip_img, dsize=(w, h))
            mask = ((len(label_values) - 1) * (scaled_probchip / 255)).astype(np.uint8)
            # Except for one center pixel
            #mask[mask.shape[0] // 2, mask.shape[1] // 2] = 3
            label_mask = mask.copy()
            for index, value in enumerate(label_values):
                label_mask[mask == index] = value
            # No certainty
            label_mask[label_mask == cv2.GC_FGD] = cv2.GC_PR_FGD
            label_mask[label_mask == cv2.GC_BGD] = cv2.GC_PR_BGD
            return label_mask

        def grabcut_labels_to_probchip(label_mask):
            image_mask = label_mask.copy()
            label_colors = np.linspace(0, 255, len(label_values)).astype(np.uint8)
            for value, color in zip(label_values, label_colors):
                image_mask[label_mask == value] = (color)
            return image_mask

        def grabcut_from_probchip(chip_img, label_mask):
            rect = (0, 0, w, h)
            bgd_model = np.zeros((1, 13 * 5), np.float64)
            fgd_model = np.zeros((1, 13 * 5), np.float64)
            num_iters = 5
            mode = cv2.GC_INIT_WITH_MASK
            # label_mask is an outvar
            label_mask_ = label_mask.copy()
            print(label_values)
            print(np.unique(label_mask_))
            with ut.Timer('grabcut'):
                cv2.grabCut(chip_img, label_mask_, rect, bgd_model, fgd_model, num_iters, mode=mode)
            #is_foreground = (label_mask == cv2.GC_FGD) + (label_mask == cv2.GC_PR_FGD)
            #is_foreground = (label_mask_ == cv2.GC_FGD)  # + (label_mask == cv2.GC_PR_FGD)
            return label_mask_

        (h, w) = chip_img.shape[0:2]
        label_mask = probchip_to_grabcut_labels(probchip_img, w, h)
        label_mask_ = grabcut_from_probchip(chip_img, label_mask)
        float_mask = grabcut_labels_to_probchip(label_mask_) / 255.0
        segmented_chip = chip_img * float_mask[:, :, None]

        next_pnum = df2.make_pnum_nextgen(2, 3)
        df2.imshow(chip_img,                               fnum=1, pnum=next_pnum())
        df2.imshow(probchip_img,                           fnum=1, pnum=next_pnum())
        df2.imshow(grabcut_labels_to_probchip(label_mask), fnum=1, pnum=next_pnum())
        df2.imshow(segmented_chip,                         fnum=1, pnum=next_pnum())
        df2.imshow(255 * (float_mask),                  fnum=1, pnum=next_pnum())
        df2.imshow(chip_img * (float_mask > .6)[:, :, None],   fnum=1, pnum=next_pnum())
        df2.present()
Exemplo n.º 2
0
def present():
    # In its own function for reloadableness
    from plottool import draw_func2 as df2
    return df2.present(max_rows=4, row_first=False)
Exemplo n.º 3
0
def present():
    # In its own function for reloadableness
    from plottool import draw_func2 as df2
    return df2.present(max_rows=4, row_first=False)
Exemplo n.º 4
0
        for bbox in bboxes:
            gid_list2.append(gid)
            bbox_list2.append(bbox)
            # not using confidence nor img_conf here

    if SPECIAL:
        from plottool import viz_image2, fig_presenter
        #from plottool import draw_func2 as df2
        for gid in gid_list:
            isthisgid = [gid == gid2 for gid2 in gid_list2]
            bbox_list = utool.filter_items(bbox_list2, isthisgid)
            img = ibs.get_images(gid)
            fig = viz_image2.show_image(img, bbox_list=bbox_list)
        fig_presenter.present()
    #fig_presenter.all_figures_bring_to_front()
    #ibs.detect_random_forest(gid_list, 'zebra_grevys')
    return locals()


if __name__ == '__main__':
    multiprocessing.freeze_support()  # For windows
    main_locals = ibeis.main(defaultdb='testdb1', gui=False)
    ibs = main_locals['ibs']    # IBEIS Control
    test_locals = utool.run_test(TEST_DETECT, ibs)
    execstr = utool.execstr_dict(test_locals, 'test_locals')
    exec(execstr)
    if SPECIAL:
        from plottool import df2
        df2.present()
        raw_input()
Exemplo n.º 5
0
    def test_grabcut_on_aid(aid):
        chip_fpath = ibs.get_annot_chip_fpath(aid)
        probchip_fpath = ibs.get_annot_probchip_fpath(aid)

        chip_img = vt.imread(chip_fpath)
        probchip_img = vt.imread(probchip_fpath, grayscale=True)

        label_values = [cv2.GC_BGD, cv2.GC_PR_BGD, cv2.GC_PR_FGD, cv2.GC_FGD]

        def probchip_to_grabcut_labels(probchip_img, w, h):
            scaled_probchip = cv2.resize(probchip_img, dsize=(w, h))
            mask = ((len(label_values) - 1) * (scaled_probchip / 255)).astype(
                np.uint8)
            # Except for one center pixel
            #mask[mask.shape[0] // 2, mask.shape[1] // 2] = 3
            label_mask = mask.copy()
            for index, value in enumerate(label_values):
                label_mask[mask == index] = value
            # No certainty
            label_mask[label_mask == cv2.GC_FGD] = cv2.GC_PR_FGD
            label_mask[label_mask == cv2.GC_BGD] = cv2.GC_PR_BGD
            return label_mask

        def grabcut_labels_to_probchip(label_mask):
            image_mask = label_mask.copy()
            label_colors = np.linspace(0, 255,
                                       len(label_values)).astype(np.uint8)
            for value, color in zip(label_values, label_colors):
                image_mask[label_mask == value] = (color)
            return image_mask

        def grabcut_from_probchip(chip_img, label_mask):
            rect = (0, 0, w, h)
            bgd_model = np.zeros((1, 13 * 5), np.float64)
            fgd_model = np.zeros((1, 13 * 5), np.float64)
            num_iters = 5
            mode = cv2.GC_INIT_WITH_MASK
            # label_mask is an outvar
            label_mask_ = label_mask.copy()
            print(label_values)
            print(np.unique(label_mask_))
            with ut.Timer('grabcut'):
                cv2.grabCut(chip_img,
                            label_mask_,
                            rect,
                            bgd_model,
                            fgd_model,
                            num_iters,
                            mode=mode)
            #is_foreground = (label_mask == cv2.GC_FGD) + (label_mask == cv2.GC_PR_FGD)
            #is_foreground = (label_mask_ == cv2.GC_FGD)  # + (label_mask == cv2.GC_PR_FGD)
            return label_mask_

        (h, w) = chip_img.shape[0:2]
        label_mask = probchip_to_grabcut_labels(probchip_img, w, h)
        label_mask_ = grabcut_from_probchip(chip_img, label_mask)
        float_mask = grabcut_labels_to_probchip(label_mask_) / 255.0
        segmented_chip = chip_img * float_mask[:, :, None]

        next_pnum = df2.make_pnum_nextgen(2, 3)
        df2.imshow(chip_img, fnum=1, pnum=next_pnum())
        df2.imshow(probchip_img, fnum=1, pnum=next_pnum())
        df2.imshow(grabcut_labels_to_probchip(label_mask),
                   fnum=1,
                   pnum=next_pnum())
        df2.imshow(segmented_chip, fnum=1, pnum=next_pnum())
        df2.imshow(255 * (float_mask), fnum=1, pnum=next_pnum())
        df2.imshow(chip_img * (float_mask > .6)[:, :, None],
                   fnum=1,
                   pnum=next_pnum())
        df2.present()