Skip to content

Incorrect formula to compute the epipolar_line in triangulation function #253

@lgalardini

Description

@lgalardini

Hi there and first of all thank you for this library, it is very nice and it contain many interesting algorithm/method.

I came across the Triangulation function and it's core FindOptimalImagePoints, since I was looking for an implementation of the Linstrom algorithm. If I'm right, the implementation in Theia is the niter2, the non-iterative method. I compared against the author's paper and found that there are two errors on line 92 and 93
epipolar_line1 -= e_submatrix * lambda * epipolar_line1;
epipolar_line2 -= e_submatrix.transpose() * lambda * epipolar_line2;

In niter2 implementation, formula 10 and 11 are different, in fact, the code should be:
epipolar_line1 -= e_submatrix * lambda * epipolar_line2;
epipolar_line2 -= e_submatrix.transpose() * lambda * epipolar_line1;

Another question that came in mind is: the author's suggest to use Jenkins-Traub root finding method, have you considered to switch to that? How you manage the root of negative number? In fact, sqrt in this way cannot manage non real roots, maybe I'm doing something wrong but I experienced negative root to be resolved. Maybe it worth to open another issue

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions