Source code for wbia.plottool.viz_keypoints

# -*- coding: utf-8 -*-
import utool
from . import draw_func2 as df2
import numpy as np
from wbia.plottool import plot_helpers as ph

# (print, print_, printDBG, rrr, profile) = utool.inject(__name__, '[viz_keypoints]', DEBUG=False)
utool.noinject(__name__, '[viz_keypoints]')


[docs]def testdata_kpts(): import utool as ut import vtool as vt import pyhesaff img_fpath = ut.grab_test_imgpath(ut.get_argval('--fname', default='star.png')) kwargs = ut.parse_dict_from_argv(pyhesaff.get_hesaff_default_params()) (kpts, vecs) = pyhesaff.detect_feats(img_fpath, **kwargs) imgBGR = vt.imread(img_fpath) return kpts, vecs, imgBGR
[docs]def show_keypoints(chip, kpts, fnum=0, pnum=None, **kwargs): r""" Args: chip (ndarray[uint8_t, ndim=2]): annotation image data kpts (ndarray[float32_t, ndim=2]): keypoints fnum (int): figure number(default = 0) pnum (tuple): plot number(default = None) Kwargs: ddd, title, figtitle, interpolation, cmap, heatmap, data_colorbar, darken, update, redraw_image, docla, doclf, projection, sel_fx CommandLine: python -m wbia.plottool.viz_keypoints --exec-show_keypoints Example: >>> # DISABLE_DOCTEST >>> from wbia.plottool.viz_keypoints import * # NOQA >>> import vtool as vt >>> kpts, vecs, chip = testdata_kpts() >>> fnum = 0 >>> pnum = None >>> result = show_keypoints(chip, kpts, fnum, pnum) >>> print(result) """ # printDBG('[df2.show_kpts] %r' % (kwargs.keys(),)) fig, ax = df2.imshow(chip, fnum=fnum, pnum=pnum, **kwargs) _annotate_kpts(kpts, **kwargs) ph.set_plotdat(ax, 'viztype', 'keypoints') ph.set_plotdat(ax, 'kpts', kpts) if kwargs.get('ddd', False): ph.draw()
# @utool.indent_func def _annotate_kpts(kpts_, sel_fx=None, **kwargs): r""" Args: kpts_ (ndarray): keypoints sel_fx (None): Keywords: color: 3/4-tuple, ndarray, or str Returns: None Example: >>> from wbia.plottool.viz_keypoints import * # NOQA >>> sel_fx = None >>> kpts = np.array([[ 92.9246, 17.5453, 7.8103, -3.4594, 10.8566, 0. ], ... [ 76.8585, 24.7918, 11.4412, -3.2634, 9.6287, 0. ], ... [ 140.6303, 24.9027, 10.4051, -10.9452, 10.5991, 0. ],]) """ if len(kpts_) == 0: print('len(kpts_) == 0...') return # color = kwargs.get('color', 'distinct' if sel_fx is None else df2.ORANGE) color = kwargs.get('color', 'scale' if sel_fx is None else df2.ORANGE) if color == 'distinct': # hack for distinct colors color = df2.distinct_colors(len(kpts_)) # , randomize=True) elif color == 'scale': # hack for distinct colors import vtool as vt # color = df2.scores_to_color(vt.get_scales(kpts_), cmap_='inferno', score_range=(0, 50)) color = df2.scores_to_color( vt.get_scales(kpts_), cmap_='viridis', score_range=(5, 30), cmap_range=None ) # df2.distinct_colors(len(kpts_)) # , randomize=True) # Keypoint drawing kwargs drawkpts_kw = { 'ell': True, 'pts': False, 'ell_alpha': 0.4, 'ell_linewidth': 2, 'ell_color': color, } drawkpts_kw.update(kwargs) # draw all keypoints if sel_fx is None: df2.draw_kpts2(kpts_, **drawkpts_kw) else: # dont draw the selected keypoint in this batch nonsel_kpts_ = np.vstack((kpts_[0:sel_fx], kpts_[sel_fx + 1 :])) # Draw selected keypoint sel_kpts = kpts_[sel_fx : sel_fx + 1] import utool as ut if ut.isiterable(color) and ut.isiterable(color[0]): # hack for distinct colors drawkpts_kw['ell_color'] = color[0:sel_fx] + color[sel_fx + 1 :] drawkpts_kw drawkpts_kw2 = drawkpts_kw.copy() drawkpts_kw2.update( {'ell_color': df2.BLUE, 'eig': True, 'rect': True, 'ori': True} ) df2.draw_kpts2(nonsel_kpts_, **drawkpts_kw) df2.draw_kpts2(sel_kpts, **drawkpts_kw2)