Ask Your Question
1

What's the error function used in findEssentialMat() ?

asked 2017-09-14 15:03:55 -0600

HoneEee gravatar image

updated 2017-09-14 15:12:39 -0600

Hello,

I was checking the implementation detail of findEssentialMat().

The corresponding code for computing the error of one point is shown below:

        Vec3d x1(x1ptr[i].x, x1ptr[i].y, 1.);
        Vec3d x2(x2ptr[i].x, x2ptr[i].y, 1.);
        Vec3d Ex1 = E * x1;
        Vec3d Etx2 = E.t() * x2;
        double x2tEx1 = x2.dot(Ex1);

        double a = Ex1[0] * Ex1[0];
        double b = Ex1[1] * Ex1[1];
        double c = Etx2[0] * Etx2[0];
        double d = Etx2[1] * Etx2[1];

        err.at<float>(i) = (float)(x2tEx1 * x2tEx1 / (a + b + c + d));

My question is, how to interpret this error x2tEx1 * x2tEx1 / (a + b + c + d)?

It is not the distance between point and epipolar line.

Could anyone tell me what is that value?

edit retag flag offensive close merge delete

1 answer

Sort by » oldest newest most voted
0

answered 2020-07-05 04:51:51 -0600

As it happens, I was just looking at it myself and had the same question.

For some data, I did a comparison between point-to-epipolar line distance (let's call it PELD) and this error function (let's call it FEMD), and they are indeed different in practice. About 10% of my correspondences are either inliers according to PELD and outliers according to FEMD or vice versa. Generally, pairs with very small or very large PELD residuals will be classified as inlier or outlier by both methods, but in the PELD range of about 0.5 to 2.0 (my threshold is 1.0), the results are variable.

I believe therefore that FEMD will give suboptimal results if the objective is to maximize the number of correspondences within a specific PELD threshold.

edit flag offensive delete link more

Question Tools

Stats

Asked: 2017-09-14 15:03:55 -0600

Seen: 340 times

Last updated: Sep 14 '17