示例#1
0
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)
示例#2
0
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)
示例#3
0
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
示例#4
0
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')
示例#5
0
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()
示例#6
0
        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