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()
def present(): # In its own function for reloadableness from plottool import draw_func2 as df2 return df2.present(max_rows=4, row_first=False)
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()
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()