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 .

Point correction onto epipolar lines

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

Key classes

Class Repository Javadoc

Corrector

Source

Javadoc

CorrectorType

Source

Javadoc

References