Two-View Reconstruction

correspondences → F → E → (R,t) → 3D

Two cameras photograph one scene. From the matched points alone we recover the cameras' relative pose and a 3-D point cloud — the whole epipolar pipeline, running for real. The maths is genuine: the 8-point algorithm, the rank-2 projection, E = KᵀFK forced to (σ,σ,0), the SVD decomposition, cheirality, and triangulation all execute live below. Switch to Valbonne church to run it on two actual photographs — there the correspondences were found offline by SIFT + RANSAC (matching is "a whole story by itself"); everything from F onward is computed here, in your browser, on those real matches.

01
Two views
02
Correspondences
03
F → E
04
Pose (R,t)
05
Triangulate
noise 0.3 px
K error 0 %
01Two views of one scene
Two cameras photograph the same house from slightly different viewpoints. We know nothing about their relative position yet — only the two images. The goal: recover the camera motion and the 3-D scene.
unknowns: relative pose (R, t)  +  3-D points X

Camera 1 · left view image plane

CAM 1

Camera 2 · right view click a point on the left →

CAM 2

Reconstructed point cloud drag to orbit · scroll to zoom · shape is metric-up-to-scale

run the pipeline to triangulate
ESSENTIAL MATRIX E = KᵀFK
— pending —
SINGULAR VALUES of E
σ = ( —, —, — )
A matrix is essential iff its singular values are (σ, σ, 0). We project onto that — averaging the top two, zeroing the third — which is exactly what rank-2 alone can't buy you.
RECOVERED POSE vs GROUND TRUTH
rotation error ‖R−R̂‖—
translation direction · t̂—
cheirality (pts in front)—
reprojection RMSE—
baseline ‖t‖—
Scale is unrecoverable. We set ‖t‖ = 1, so every depth is in baseline units — the dollhouse-vs-house ambiguity that two images can never resolve. The cloud above is shown normalized.
What the K-error slider shows. Slide it and watch the cloud warp. With the wrong K you can't normalize the rays correctly, so the reconstruction shears away from the true metric shape — the slider is your calibration argument made visible: F survives bad K, but metric structure needs the real intrinsics.
Built with a hand-rolled one-sided Jacobi SVD; correspondences synthetic, reconstruction real. Drag the cloud, press R to reset the view.