Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

What's the error used in findEssentialMat() ?

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?

What's the error used in findEssentialMat() ?

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?