Point correction
| This documentation was generated with the assistance of AI. Please report any inaccuracies. |
A pair of matched image points estimated from real (noisy) correspondences almost never satisfies the epipolar constraint exactly. Triangulating such a pair back-projects two rays of light that do not actually intersect in 3D, so before triangulation it helps to correct and to the closest pair that lies exactly on the epipolar geometry given by .
The correction problem
Given measured points , and a fundamental matrix , the corrected points , minimize the reprojection cost subject to exact epipolar compliance:
irurueta-ar implements two solvers for this problem, both exposed through a common
com.irurueta.ar.epipolar.Corrector base class selected via CorrectorType.
Sampson approximation
The Sampson correction is a first-order approximation, valid for small errors (typically 1-2 pixels): writing and expanding the cost function to first order in a displacement gives a constrained least-norm problem solved in closed form with Lagrange multipliers, yielding a single correction with
so the corrected coordinates are Irurueta, PhD thesis §3.2.5.1. This is a single closed-form update — much cheaper than the Gold Standard method below, at the cost of being only approximate for larger errors.
Maps to com.irurueta.ar.epipolar.SampsonCorrector (batch) / SampsonSingleCorrector (single pair).
Gold Standard method
The Gold Standard method solves the correction cost exactly under a Gaussian noise assumption. After translating both measured points to the origin and rotating each view so its epipole lies on the x-axis, the cost becomes a rational function of a single parameter (parametrizing the family of candidate epipolar lines through the transformed epipole); its stationary points are the roots of a degree-6 polynomial in , found via the same companion-matrix eigenvalue technique used for the 7-point algorithm. Evaluating the cost at each real root picks the global minimum, and the corrected point is the foot of the perpendicular from the (transformed) measured point to the corresponding epipolar line Irurueta, PhD thesis §3.2.5.2. This is exact (not a first-order approximation) but more expensive than Sampson correction.
Maps to com.irurueta.ar.epipolar.GoldStandardCorrector / GoldStandardSingleCorrector.
Example
var corrector = Corrector.create(leftPoints, rightPoints, fundamentalMatrix, CorrectorType.GOLD_STANDARD);
corrector.correct();
List<Point2D> correctedLeft = corrector.getLeftCorrectedPoints();
List<Point2D> correctedRight = corrector.getRightCorrectedPoints();
// triangulate correctedLeft/correctedRight instead of the raw matches
References
Irurueta, PhD thesis §3.2.5
Hartley & Zisserman, 2003 §11.4-11.5
Hartley & Zisserman, 2003 Appendix 6 (iterative estimation)