Essential matrix
| This documentation was generated with the assistance of AI. Please report any inaccuracies. |
The essential matrix is the fundamental matrix’s calibrated counterpart: the same epipolar constraint, but written for image points that have been normalized by known camera intrinsics. If a scene is calibrated (both cameras' intrinsic matrices , are known), recovers not just the epipolar geometry but an actual metric camera pair — up to scale — directly from two views. This is the bridge between Fundamental matrix estimation (purely projective) and a metric reconstruction.
Relation to the fundamental matrix
For canonical cameras and ( ), the fundamental matrix expression from Fundamental matrix estimation reduces to
Normalizing points with the known intrinsics, , , the epipolar constraint holds for
Irurueta, PhD thesis §3.2.7. Unlike , is not an arbitrary rank-2 matrix: because it factors as a skew-symmetric matrix times a rotation, its SVD always has the form — two equal, non-zero singular values (defined up to the overall scale of ) and a third that is exactly zero. Counting rotation (3 DOF) and translation direction (2 DOF up to scale) confirms has only 5 degrees of freedom, two fewer than 's 7.
Maps to com.irurueta.ar.epipolar.EssentialMatrix, with a constructor overload
EssentialMatrix(FundamentalMatrix, PinholeCameraIntrinsicParameters leftIntrinsics,
PinholeCameraIntrinsicParameters rightIntrinsics) that implements directly, plus
overloads for building straight from a Rotation3D + translation, or from a pair of `PinholeCamera`s.
Recovering the camera pair: four-fold ambiguity
Because with (a convenient normalization of the baseline length), its SVD-based decomposition admits, with
two candidate rotations
Maps to EssentialMatrix.computePossibleRotationAndTranslations()
getFirstPossibleRotation()/getSecondPossibleRotation()
getFirstPossibleTranslation()/getSecondPossibleTranslation(). The cheirality-based disambiguation across
the four combinations is what com.irurueta.ar.sfm.EssentialMatrixInitialCamerasEstimator automates — see
Structure from Motion.
Example
// F already estimated (see epipolar/fundamental-matrix.adoc), K and K' known
var essential = new EssentialMatrix(fundamentalMatrix, leftIntrinsics, rightIntrinsics);
essential.computePossibleRotationAndTranslations();
Rotation3D rotationA = essential.getFirstPossibleRotation();
Rotation3D rotationB = essential.getSecondPossibleRotation();
Point2D translationA = essential.getFirstPossibleTranslation();
Point2D translationB = essential.getSecondPossibleTranslation();
// triangulate a few points under each of the 4 (rotation, translation) combinations
// and keep the one with all-positive cheirality (see sfm/structure-from-motion.adoc)
References
Irurueta, PhD thesis §3.2.7
Hartley & Zisserman, 2003 §9.6
Hartley, 1993 (cheirality)