def renderMatching(pair, full_fps, matched_fps, inliers): renderings = [full_fps[i].render(fallback_im=pair.im[i]) for i in [0, 1]] ims = [cv2.cvtColor(i, cv2.COLOR_GRAY2BGR) for i in pair.im] roffsets = [i * ims[0].shape[0] for i in [1, 2]] full_im = np.concatenate([ims[0], renderings[0], renderings[1], ims[1]], axis=0) matched_ips = [matched_fp.ips_rc for matched_fp in matched_fps] inl_ips = [i[:, inliers] for i in matched_ips] endpoints = [inl_ips[i] + np.array([[roffsets[i], 0]]).T for i in [0, 1]] for i in range(endpoints[0].shape[1]): cv2.line(full_im, tuple(endpoints[0][[1, 0], i]), tuple(endpoints[1][[1, 0], i]), (0, 255, 0), 1, cv2.LINE_AA) if False: outl_ips = [i[:, np.logical_not(inliers)] for i in matched_ips] endpoints = [ outl_ips[i] + np.array([[roffsets[i], 0]]).T for i in [0, 1] ] for i in range(endpoints[0].shape[1]): cv2.line(full_im, tuple(endpoints[0][[1, 0], i]), tuple(endpoints[1][[1, 0], i]), (0, 0, 255), 1, cv2.LINE_AA) outdir = os.path.join('results', 'match_render', hyperparams.methodEvalString()) if not os.path.exists(outdir): os.makedirs(outdir) outfile = os.path.join(outdir, pair.name() + '.png') cv2.imwrite(outfile, full_im)
def renderTrainSample(pair, fps, corr_rc, inl): ims = [cv2.cvtColor(i, cv2.COLOR_GRAY2BGR) for i in pair.im] rc = system.renderColors() for fp, corr, im in zip(fps, corr_rc, ims): for i in range(128): cv2.circle(im, tuple(fp.ips_rc[[1, 0], i]), 6, tuple(rc[i]), 1, cv2.LINE_AA) if inl[i]: thck = -1 else: thck = 1 cv2.circle(im, tuple(corr[[1, 0], i]), 2, tuple(rc[i]), thck, cv2.LINE_AA) renderings = [i.render(with_points=False) for i in fps] gray_ims = np.concatenate(ims, axis=0) rend = np.concatenate(renderings, axis=0) full_im = np.concatenate([gray_ims, rend], axis=1) outdir = os.path.join('results', 'train_samples', hyperparams.methodEvalString()) if not os.path.exists(outdir): os.makedirs(outdir) outfile = os.path.join(outdir, pair.name() + '.png') cv2.imwrite(outfile, full_im)
def renderMatching(pair, fps): """ returns true inlier count, R_err and t_err """ _, true_count, mask, R_err, t_err = evaluatePair(pair, fps) renderings = [i.render(fallback_im=im) for i, im in zip(fps, pair.im)] ims = [cv2.cvtColor(i, cv2.COLOR_GRAY2BGR) for i in pair.im] roffsets = [i * ims[0].shape[0] for i in [1, 2]] full_im = np.concatenate([ims[0], renderings[0], renderings[1], ims[1]], axis=0) inl_ips = [fp.ips_rc[:, mask] for fp in fps] endpoints = [inl_ips[i] + np.array([[roffsets[i], 0]]).T for i in [0, 1]] rc = system.renderColors() inl_colors = rc[np.nonzero(mask)[0]] for i in range(endpoints[0].shape[1]): cv2.line(full_im, tuple(endpoints[0][[1, 0], i]), tuple(endpoints[1][[1, 0], i]), tuple(inl_colors[i]), 2, cv2.LINE_AA) outdir = os.path.join('results', 'match_render', hyperparams.methodEvalString()) if not os.path.exists(outdir): os.makedirs(outdir) outfile = os.path.join(outdir, pair.name() + '.png') cv2.imwrite(outfile, full_im) return true_count, R_err, t_err
def path(): cache_root = os.path.join('results', 'cache') if not os.path.exists(cache_root): os.makedirs(cache_root) return os.path.join(cache_root, hyperparams.methodEvalString() + '.hkl')
import hyperparams if __name__ == '__main__': deploy_net, sess = hyperparams.bootstrapFromCheckpoint() eval_set = hyperparams.getEvalSet() fpasser = hyperparams.getForwardPasser(deploy_net, sess) _, true_inl = hpatches.evaluate(fpasser, eval_set) n = len(eval_set.folder_names) assert len(true_inl) == 15 * n w = 3 h = int(np.ceil(float(n) / w)) im = np.ones([8 * h, 8 * w]) * np.max(true_inl) title = hyperparams.methodEvalString() + ':' for i in range(n): row = i / w col = i % w squ = scidist.squareform(true_inl[i * 15:(i + 1) * 15]) im[(row * 8 + 1):(row * 8 + 7), (col * 8 + 1):(col * 8 + 7)] = squ if col == 0: title = title + '\n' title = title + eval_set.folder_names[i] + ', ' plt.imshow(im) plt.colorbar() plt.title(title) plt.show()
pair_fps[0], pair_fps[1], 10, get_rt=True) for pair_fps in pairs_fps] nmins = [i[0] for i in stats] Rerrs = [i[1] for i in stats] terrs = [i[2] for i in stats] # Also save diffs of evaluation set dR, dt = [], [] for pair in eval_pairs: T = pair.T_0_1 dR.append(math.degrees(rpg_common_py.geometry.getRotationAngle(T.R))) dt.append(np.linalg.norm(T.t)) # Save csv csv_dir = os.path.join('results', 'match_render', hyperparams.methodEvalString()) if not os.path.exists(csv_dir): os.makedirs(csv_dir) csv_path = os.path.join(csv_dir, '%s.csv' % hyperparams.methodEvalString()) csv_vals = zip([i.name() for i in eval_pairs], dR, dt, nmins, Rerrs, terrs) with open(csv_path, 'w') as csv_file: writer = csv.writer(csv_file, delimiter=' ', quotechar='"', quoting=csv.QUOTE_MINIMAL) writer.writerow(['name', 'dR', 'dt', 'nmin', 'eR', 'et']) for val in csv_vals: writer.writerow(val) dR = np.array(dR) dt = np.array(dt) nmins = np.array(nmins) mt100filt = nmins > 100