ubc-vision/image-matching-benchmark

Error Metric Clarification

Opened this issue · 0 comments

Hello,

Thanks for you work!

I have a question about the error metrics:

# Compute err_q and err_t only when R, t are not None
    err_q, err_t = np.inf, np.inf
    if (R_1_actual is not None) and (R_2_actual is not None) and (
            t_1_actual is not None) and (t_2_actual is not None):
        # Compute dR, dt (actual)
        dR_act = np.dot(R_2_actual, R_1_actual.T)
        dt_act = t_2_actual - np.dot(dR_act, t_1_actual)

        # Get R, t from calibration information
        R_1, t_1 = calib1['R'], calib1['T'].reshape((3, 1))
        R_2, t_2 = calib2['R'], calib2['T'].reshape((3, 1))

        # Compute ground truth dR, dt
        dR = np.dot(R_2, R_1.T)
        dt = t_2 - np.dot(dR, t_1)

        # Save err_, err_t
        err_q, err_t = evaluate_R_t(dR, dt, dR_act, dt_act)

Taken from: https://github.com/ubc-vision/image-matching-benchmark/blob/master/utils/colmap_helper.py#L156

Which one is the ground truth here ?
dR and dt seem to be but then you have dR_act and dt_act just above that are retrieved from COLMAP (which what you use for ground truth ?)

Also dR_act = np.dot(R_2_actual, R_1_actual.T) is the rotation between R_2_actual and R_1_actual ?

What is dt_act = t_2_actual - np.dot(dR_act, t_1_actual) ? If it is the difference why is t_1_actual multiplied by dR_act?

Thanks!