def _draw_matches(title, fm, px): # Helper with common arguments to df2.show_chipmatch2 dmkwargs = dict(fs=None, title=title, all_kpts=False, draw_lines=True, docla=True, fnum=fnum, pnum=(3, 3, px)) df2.show_chipmatch2(rchip1, rchip2, kpts1, kpts2, fm, show_nMatches=True, **dmkwargs)
def show_chipres(hs, res, cx, fnum=None, pnum=None, sel_fm=[], in_image=False, **kwargs): 'shows single annotated match result.' qcx = res.qcx #cx2_score = res.get_cx2_score() cx2_fm = res.get_cx2_fm() cx2_fs = res.get_cx2_fs() #cx2_fk = res.get_cx2_fk() #printDBG('[viz.show_chipres()] Showing matches from %s' % (vs_str)) #printDBG('[viz.show_chipres()] fnum=%r, pnum=%r' % (fnum, pnum)) # Test valid cx printDBG('[viz] show_chipres()') if np.isnan(cx): nan_img = np.zeros((32, 32), dtype=np.uint8) title = '(q%s v %r)' % (hs.cidstr(qcx), cx) df2.imshow(nan_img, fnum=fnum, pnum=pnum, title=title) return fm = cx2_fm[cx] fs = cx2_fs[cx] #fk = cx2_fk[cx] #vs_str = hs.vs_str(qcx, cx) # Read query and result info (chips, names, ...) if in_image: # TODO: rectify build_transform2 with cc2 # clean up so its not abysmal rchip1, rchip2 = [hs.cx2_image(_) for _ in [qcx, cx]] kpts1, kpts2 = cx2_imgkpts(hs, [qcx, cx]) else: rchip1, rchip2 = hs.get_chip([qcx, cx]) kpts1, kpts2 = hs.get_kpts([qcx, cx]) # Build annotation strings / colors lbl1 = 'q' + hs.cidstr(qcx) lbl2 = hs.cidstr(cx) if in_image: # HACK! lbl1 = None lbl2 = None # Draws the chips and keypoint matches kwargs_ = dict(fs=fs, lbl1=lbl1, lbl2=lbl2, fnum=fnum, pnum=pnum, vert=hs.prefs.display_cfg.vert) kwargs_.update(kwargs) ax, xywh1, xywh2 = df2.show_chipmatch2(rchip1, rchip2, kpts1, kpts2, fm, **kwargs_) x1, y1, w1, h1 = xywh1 x2, y2, w2, h2 = xywh2 if len(sel_fm) > 0: # Draw any selected matches _smargs = dict(rect=True, colors=df2.BLUE) df2.draw_fmatch(xywh1, xywh2, kpts1, kpts2, sel_fm, **_smargs) offset1 = (x1, y1) offset2 = (x2, y2) annotate_chipres(hs, res, cx, xywh2=xywh2, in_image=in_image, offset1=offset1, offset2=offset2, **kwargs) return ax, xywh1, xywh2