Skip to content
AI360XpertBeta

Essential Matrix for Calibrated Views

The essential matrix is the calibrated cousin of the fundamental matrix: with intrinsics known, five point pairs recover the rotation and the direction of travel between two views, up to scale.

With calibration known, the essential matrix turns five ray matches into rotation plus travel direction, and the toy rays satisfy the constraint with residual exactly 0
With calibration known, the essential matrix turns five ray matches into rotation plus travel direction, and the toy rays satisfy the constraint with residual exactly 0

Why Does This Exist?

The fundamental matrix works without calibration but needs seven or eight matches and never yields motion directly. Once intrinsics are known from camera calibration, pixels become true rays and the geometry tightens: five matches determine the relative pose, and decomposing EE hands over the rotation plus the travel direction. That is how structure from motion bootstraps its first camera pair and how visual SLAM initializes motion before any map exists.

The geometry this page stands on is the two-view constraint in epipolar geometry and stereo matching: each match must satisfy one equation, and calibration simply rewrites that equation in ray coordinates.

Think of It Like This

A steel ruler with no numbers printed

The fundamental matrix is a knotted string: it orders positions along a line but measures nothing. Calibration upgrades it to a steel ruler, straight and true, so angles and directions read exactly. But the ruler has no numbers printed: it says "that way" without saying "how far."

That missing scale is permanent to pure vision. Two journeys with identical headings but different lengths produce the identical EE. Where it stops: an IMU, a GPS fix, or a known-size object writes the numbers on the ruler from outside, which is exactly the sensor-fusion escape hatch real systems use.

How It Actually Works

With calibrated ray coordinates xx and x′x' (pixels premultiplied by K−1K^{-1}), the constraint keeps its shape: x′TEx=0x'^T E x = 0, where E=[t]×RE = [t]_{\times} R. Here [t]×[t]_{\times} is the skew-symmetric cross-product matrix of the translation direction tt, and RR is the relative rotation. Freedom counting gives 33 (rotation) +2+ 2 (direction, since scale is free) =5= 5 degrees of freedom, hence five-point solvers instead of the seven or eight the uncalibrated case needs. The two matrices connect through E=K′TFKE = K'^T F K.

Decomposing EE yields four (R,t)(R, t) combinations, of which exactly one places the triangulated points in front of both cameras. That visibility test is the cheirality check, and it is the only disambiguation needed.

Worked numbers

Take RR as identity and t=(1,0,0)t = (1, 0, 0), so EE has rows (0,0,0)(0, 0, 0), (0,0,−1)(0, 0, -1), (0,1,0)(0, 1, 0). With x=(0.5,0.2,1)x = (0.5, 0.2, 1):

Ex=(0, −1, 0.2)E x = (0,\ -1,\ 0.2)

Row by row: 0×0.5+0×0.2+0×1=00 \times 0.5 + 0 \times 0.2 + 0 \times 1 = 0, then 0+0+(−1)×1=−10 + 0 + (-1) \times 1 = -1, then 0+1×0.2+0=0.20 + 1 \times 0.2 + 0 = 0.2. With x′=(1.5,0.2,1)x' = (1.5, 0.2, 1) the residual is 1.5×0+0.2×(−1)+1×0.2=−0.2+0.2=01.5 \times 0 + 0.2 \times (-1) + 1 \times 0.2 = -0.2 + 0.2 = 0. Decomposing this EE returns the identity rotation and the +x+x travel direction among its four candidates, and cheirality keeps that physical one.

Code

Stdlib Python replays the worked residual: multiply ExE x, then dot with x′x'.

e = ((0.0, 0.0, 0.0), (0.0, 0.0, -1.0), (0.0, 1.0, 0.0))x = (0.5, 0.2, 1.0)xp = (1.5, 0.2, 1.0)
ex = tuple(sum(e[r][c] * x[c] for c in range(3)) for r in range(3))print(ex)# -> (0.0, -1.0, 0.2)print(xp[0] * ex[0] + xp[1] * ex[1] + xp[2] * ex[2])# -> 0.0

The product is (0.0,−1.0,0.2)(0.0, -1.0, 0.2) and the residual is exactly 0.00.0, confirming the pair satisfies the constraint. Five such independent pairs pin down EE; fewer leave the motion ambiguous.

Watch Out For

Reading absolute scale out of E

By convention ∥t∥=1\lVert t \rVert = 1, so the translation is a direction with an arbitrary unit length. Treating it as metres yields trajectories with perfect shape and wrong size. This is the same scale ambiguity structure from motion documents: fuse an IMU, a GPS fix, or a known-size object to pin the gauge.

Feeding it a pure rotation

With no translation, t=0t = 0 makes EE the zero matrix and the constraint 0=00 = 0 accepts everything. Decomposition output is then garbage with a confident face. Detect the rotation-only case (negligible translation, high rotational consistency) and switch to a homography, which owns pure rotations via H=KRK−1H = K R K^{-1}.

The Quick Version

  • The essential matrix acts on calibrated rays and satisfies x′TEx=0x'^T E x = 0 with E=[t]×RE = [t]_{\times} R.
  • Five matches suffice, versus seven or eight for the fundamental matrix.
  • Decomposition gives four (R,t)(R, t) candidates; the cheirality check keeps the physical one.
  • The toy rays (0.5,0.2)(0.5, 0.2) and (1.5,0.2)(1.5, 0.2) give Ex=(0,−1,0.2)E x = (0, -1, 0.2) and residual 00.
  • Translation comes out as a direction only; absolute scale is unobservable.
  • Pure rotation zeroes EE out, so rotation-only pairs belong to a homography.