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 or , and translation (the last column of ) — four combinations for the second camera . Two of the four are a twisted pair related by a 180° rotation about the baseline. Only one combination places every triangulated 3D point in front of both cameras (correct cheirality); the other three put at least some points behind a camera, so the standard disambiguation is to triangulate a handful of correspondences under all four hypotheses and keep the one with the most positive cheiralities Irurueta, PhD thesis §3.2.7.2.

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)

Key classes

Class Repository Javadoc

EssentialMatrix

Source

Javadoc

FundamentalMatrix

Source

Javadoc