Structure from Motion — Technologies & Tricks

Updated July 2026 with 2025–2026 SOTA additions — new entries marked ★. Algorithm names link to their papers (arXiv / project page).

April 2026 · Version 1.0


Contents

  1. Foundations: What Is SfM?
  2. Multi-View Geometry Foundations
  3. Feature Detection
  4. Feature Matching
  5. RANSAC Family
  6. Bundle Adjustment
  7. COLMAP: The De Facto Pipeline
  8. Global SfM
  9. Multi-View Stereo (MVS)
  10. Feed-Forward 3D (the 2024–26 Wave)
  11. Visual SLAM
  12. Camera Models and Calibration
  13. Loop Closure and Place Recognition
  14. Tools and Software
  15. Datasets and Benchmarks
  16. Production Pipelines
  17. Common Failure Modes
  18. Theoretical Foundations
  19. Frontier 2025–2026
  20. Production Stack 2026

1. Foundations: What Is SfM?

1.1 Working definition

Given a set of images of a scene from different viewpoints, recover:

1.2 Why SfM?

1.3 The classical SfM pipeline

  1. Feature detection per image.
  2. Feature matching across image pairs.
  3. Geometric verification.
  4. Initial pair selection / two-view init.
  5. Incremental: register new images via PnP.
  6. Triangulate new 3D points.
  7. Bundle adjustment.
  8. (Optional) loop closure / global refinement.

1.4 The 2024–2026 transformation

Key

Feed-forward 3D models (DUSt3R, MASt3R, VGGT) are eclipsing classical SfM. Single transformer pass from N images \(\to\) depth + cameras + 3D point cloud. By 2025–26, COLMAP is becoming a fallback / refinement step, not the default.

1.5 The two paradigms today

  1. Classical: COLMAP / Theia / OpenMVG. Mature, accurate, slow, fragile on textureless / repetitive.
  2. Feed-forward: DUSt3R / MASt3R / VGGT. Fast, robust, requires training data, less interpretable.

1.6 Inputs / outputs

Input Output
N images N camera poses (rotation + translation)
(optional) intrinsics (if not given); sparse 3D point cloud (optional); dense depth maps (optional); feature tracks

1.7 Use cases by paradigm

2. Multi-View Geometry Foundations

2.1 Pinhole camera model

World point \(X \in \mathbb{R}^3\) projects to pixel \(x\) via:

\[\lambda \begin{pmatrix} u \\ v \\ 1 \end{pmatrix} = K\,[R \mid t] \begin{pmatrix} X \\ 1 \end{pmatrix},\]

where intrinsic matrix \(K = \begin{pmatrix} f_x & s & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{pmatrix}\), 5 DoF (4 if \(s = 0\)).

2.2 Distortion

Brown-Conrady (radial-tangential):

\[x_d = x\,(1 + k_1 r^2 + k_2 r^4 + k_3 r^6) + 2 p_1 x y + p_2 (r^2 + 2 x^2), \quad r^2 = x^2 + y^2.\]

Kannala-Brandt (fisheye): polynomial in \(\theta = \arctan(r)\).

2.3 Calibration (Zhang's method)

2.4 Epipolar geometry

For two cameras with relative pose \((R, t)\):

\[\mathbf{x}_2^{\top} E\, \mathbf{x}_1 = 0, \quad E = [t]_\times R.\]

2.5 Eight-point algorithm

For \(\ge 8\) correspondences: linear system \(A f = 0\). Solve via SVD; enforce rank-2 by zeroing smallest singular value.

Watch out

Hartley normalization essential: normalize image coords (centroid at origin, average distance \(\sqrt{2}\)). Without it, 8-point is numerically catastrophic.

2.6 Five-point algorithm (Nistér 2004)

For calibrated case, 5 correspondences suffice.

Up to 10 candidate solutions via Gröbner basis or Macaulay matrix. Standard for two-view init in modern pipelines.

2.7 Triangulation

Given correspondence \((x_1, x_2)\) and projection matrices \(P_1, P_2\):

2.8 PnP (Perspective-n-Point)

Given 3D points \(X_i\) and 2D observations \(x_i\) + intrinsics, recover \(R, t\).

3. Feature Detection

3.1 Classical features

3.2 Modern learned features

3.3 SIFT vs modern learned

3.4 Detector vs descriptor

3.5 Scale-invariance and rotation

3.6 What features to use in 2026

4. Feature Matching

4.1 Classical matching

4.2 Geometric verification

After putative matches:

4.3 Modern learned matchers

4.4 Detector-free matching

LoFTR / ROMA / DKM: skip explicit feature detection; produce dense matches end-to-end. Better on textureless / repetitive scenes.

4.5 Image-pair matchers as 3D estimators

DUSt3R / MASt3R: short-circuit matching — predict pixel-aligned 3D pointmaps; matches fall out as nearest neighbors in 3D. The 2024+ paradigm.

4.6 Evaluation metrics

4.7 Practical recipe (2026)

  1. Detect features (SIFT, ALIKED, or DISK).
  2. Match with LightGlue.
  3. Geometric verify with MAGSAC++.
  4. Or: use MASt3R / VGGT for direct 3D inference.

★ 2026 SOTA update — Dense-SfM: detector-free dense SfM

5. RANSAC Family

5.1 Basic RANSAC (Fischler & Bolles 1981)

  1. Sample \(s\) minimal correspondences.
  2. Fit model.
  3. Count inliers (within threshold \(\tau\)).
  4. Repeat \(N\) iterations; return model with most inliers.

5.2 Number of iterations

For inlier ratio \(w\), sample size \(s\):

\[N = \frac{\log(1 - p)}{\log(1 - w^s)},\]

where \(p\) is the desired confidence (\(p = 0.99\) standard). Adapt \(N\) as \(w\) estimate improves.

5.3 Variants

5.4 Modern defaults

5.5 Threshold \(\tau\)

5.6 Failure modes

5.7 Differentiable RANSAC

6. Bundle Adjustment

6.1 The objective

Minimize total reprojection error over cameras \(\{T_j\}\) and 3D points \(\{X_i\}\):

\[\min_{\{T_j, X_i\}} \sum_{(i,j) \in \Omega} \rho\!\left( \left\| \pi(T_j, X_i) - \mathbf{x}_{ij} \right\|_\Sigma^2 \right),\]

where \(\pi\) is the projection model, \(\rho\) is a robust kernel, \(\Sigma\) is the per-observation covariance.

6.2 Levenberg-Marquardt

Standard non-linear least squares solver:

\[\left( J^{\top} J + \lambda\, \mathrm{diag}(J^{\top} J) \right) \Delta\theta = -J^{\top} r,\]

\(\lambda\) damps between Gauss-Newton and gradient descent. Updated based on whether step decreased the loss.

6.3 Sparsity and Schur complement

\[\left( H_{CC} - H_{CP} H_{PP}^{-1} H_{CP}^{\top} \right) \Delta\theta_C = -b_C + H_{CP} H_{PP}^{-1} b_P.\]

6.4 Robust kernels

6.5 Solvers

6.6 Local vs global BA

6.7 Practical considerations

6.8 Compute scale

7. COLMAP: The De Facto Pipeline

7.1 What is COLMAP?

Open-source SfM + MVS framework by Schönberger (2016). De facto standard for incremental SfM since 2016.

7.2 The COLMAP SfM pipeline

  1. Feature extraction (SIFT default).
  2. Pairwise feature matching (vocabulary tree or sequential).
  3. Geometric verification.
  4. Initial pair selection (well-conditioned baseline).
  5. Two-view reconstruction.
  6. Incremental: register new images via PnP, triangulate new points.
  7. Periodic local + global BA.
  8. Outlier filtering.

7.3 COLMAP MVS pipeline

After SfM:

  1. PatchMatch stereo per image pair.
  2. Per-image dense depth maps.
  3. Fusion into point cloud / mesh.

7.4 Initial pair selection

Critical step: choose two images with:

Heuristic-based; sometimes fails.

7.5 Image registration (PnP)

7.6 Bundle adjustment cadence

7.7 Failure modes

7.8 Mitigations

7.9 Why COLMAP dominated for 8 years

7.10 Why COLMAP is being replaced (2024–26)

8. Global SfM

8.1 Vs incremental

Incremental (COLMAP-style): cameras added one-by-one; cumulative drift; sensitive to initialization.

Global: solve for all cameras jointly via rotation + translation averaging. Faster but potentially less accurate.

8.2 Rotation averaging

Given relative rotations \(R_{ij}\) from pairwise matching, recover absolute rotations \(R_i\):

\[\min_{\{R_i\}} \sum_{(i,j)} \left\| R_{ij} - R_j R_i^{-1} \right\|.\]

Robust solvers (Chatterjee + Govindu): L1 averaging on \(SO(3)\).

8.3 Translation averaging

Given relative directions \(t_{ij}\) (sign / scale ambiguous), recover \(t_i\):

8.4 Frameworks

8.5 Hybrid approaches

HSfM (hierarchical): cluster images, do global within clusters, merge incrementally.

8.6 When global wins

8.7 When incremental wins

9. Multi-View Stereo (MVS)

9.1 What is MVS?

After SfM gives camera poses + sparse points, MVS produces dense depth / point cloud / mesh. Per-image depth via stereo matching.

9.2 PatchMatch MVS

9.3 COLMAP MVS

PatchMatch stereo + photometric / geometric consistency check + multi-view fusion into final point cloud.

9.4 Learned MVS

9.5 Modern feed-forward depth

9.6 Mesh extraction

9.7 MVS quality factors

10. Feed-Forward 3D (the 2024–26 Wave)

10.1 The phase transition

Single transformer pass from images \(\to\) 3D structure. Skips classical pipeline entirely.

10.2 DUSt3R (Naver 2024)

The breakthrough: predict per-pixel 3D pointmaps from 2 images, in camera 1's frame.

\[X^{1,1}, X^{2,1} \in \mathbb{R}^{H \times W \times 3}.\]

10.3 MASt3R

10.4 MASt3R-SfM

10.5 Spann3R (incremental)

10.6 Splatt3R (3DGS direct)

10.7 NoPoSplat / Fast3R

10.8 VGGT (Visual Geometry Grounded Transformer, Meta 2025)

10.9 π3 (Pi-cubed, Meta 2025)

10.10 Comparison to classical SfM

Aspect COLMAP DUSt3R / VGGT
Speed hours seconds
Accuracy precise comparable for most
Robustness fragile on textureless robust
Calibration required no
Scale ambiguous metric (with right model)
Trained data no yes
Interpretability high lower
Maintenance mature active research

★ 2026 SOTA update — MapAnything: universal metric 3D

★ 2026 SOTA update — CUT3R: stateful online pointmaps

★ 2026 SOTA update — Depth Anything 3: any-view geometry

★ 2026 SOTA update — StreamVGGT: causal streaming VGGT

★ 2026 SOTA update — AnySplat: feed-forward 3DGS init

11. Visual SLAM

11.1 SLAM vs SfM

11.2 Visual SLAM stacks

11.3 Visual-inertial SLAM

Pre-integrated IMU between keyframes gives motion priors. Drift reduces dramatically. Standard for AR, drones, robotics.

Joint cost:

\[\sum_k \left( r_{\text{vis}} + r_{\text{IMU}} \right) + \text{prior}.\]

11.4 Direct vs feature-based

11.5 Loop closure

Detect revisited locations; add constraint to pose graph; correct accumulated drift.

11.6 Neural SLAM (2023+)

11.7 Production SLAM stacks

★ 2026 SOTA update — VGGT-SLAM: SL(4) submap SLAM

12. Camera Models and Calibration

12.1 Pinhole

Most common; 4–5 DoF intrinsics (\(f_x, f_y, c_x, c_y\), optional skew).

12.2 Distortion models

12.3 Calibration methods

12.4 Calibration toolboxes

12.5 Self-calibration during SfM

COLMAP estimates intrinsics during reconstruction. Less accurate than explicit calibration but standard workflow.

12.6 Auto-calibration with feed-forward 3D

DUSt3R / VGGT: predict intrinsics implicitly. No calibration step needed.

13. Loop Closure and Place Recognition

13.1 The problem

After traveling, return to start; recognize "I've been here before"; correct drift.

13.2 Place-recognition pipeline

  1. Compute global descriptor per image.
  2. Index in retrieval structure.
  3. Query: top-k nearest descriptors.
  4. Geometric verification: check if 3D structure matches.

13.3 Global descriptors

13.4 Loop closure mechanics

13.5 Pose graph optimization

\[\min_{\{T_i\}} \sum_{(i,j) \in E} \rho\!\left( \left\| \log\!\left( T_j^{-1} T_i Z_{ij}^{-1} \right) \right\|_\Sigma^2 \right),\]

where \(Z_{ij}\) is the measured relative pose. Used in g2o, GTSAM.

13.6 Long-term localization

13.7 Visual Positioning Systems (VPS)

Persistent global localization:

14. Tools and Software

14.1 Open-source frameworks

Tool Type Notes
COLMAP SfM + MVS de facto standard
OpenMVG SfM global + incremental
Theia SfM global focus
HLoc SfM + visual loc SuperPoint + SuperGlue + COLMAP
PixSfM SfM per-pixel BA
GLOMAP SfM global re-imagined
VisualSFM SfM (legacy) GUI-based
GTSAM Optimization factor graph
g2o Optimization SLAM-friendly
Ceres NLS solver general non-linear
OpenSfM SfM Mapillary's

14.2 Commercial photogrammetry

14.3 Mobile / consumer

14.4 Modern feed-forward 3D

14.5 Choosing a tool (2026)

15. Datasets and Benchmarks

15.1 SfM benchmarks

15.2 Visual localization

15.3 SLAM benchmarks

15.4 AV-specific

15.5 Mobile / AR

15.6 Ground truth

16. Production Pipelines

16.1 Photogrammetry workflow

  1. Capture: 50–500 photos covering subject.
  2. Run SfM + MVS (COLMAP / Reality Capture).
  3. Mesh reconstruction (Poisson / TSDF).
  4. Texture baking.
  5. Export to graphics pipeline.

16.2 3DGS asset pipeline

  1. Capture (handheld / turntable).
  2. SfM init (COLMAP or VGGT).
  3. Optimize 3DGS from SfM points.
  4. Compress (LightGaussian).
  5. Deploy.

16.3 AV HD map building

  1. Vehicle drives test region with cameras + LiDAR + IMU + GNSS.
  2. Multi-sensor SfM / SLAM (e.g., NeuRAD, OmniRe).
  3. Lane / road / signs annotated.
  4. Map served to fleet.
  5. Continual updates.

16.4 VFX camera tracking

  1. Production footage shot.
  2. SfM recovers camera poses.
  3. Composite CG aligned with real camera motion.
  4. Standard for VFX since 1990s; modern tools include neural-aided tracking.

16.5 AR persistent localization

16.6 Mobile capture (phone \(\to\) 3D)

Polycam / Luma AI / Scaniverse:

  1. User captures photos / video.
  2. On-device or cloud reconstruction.
  3. Output: 3DGS scene / mesh.
  4. Share / export.

16.7 Drone / aerial

17. Common Failure Modes

17.1 Textureless surfaces

Walls, sky, water. Not enough features. Fix: learned features, MVSNet, modern feed-forward.

17.2 Repetitive structures

Identical windows, parking lots. Fix: DEGENSAC, semantic constraints, larger context.

17.3 Dynamic scenes

Moving people / cars violate static-scene assumption. Fix: mask out dynamic objects (semantic segmentation), SLAM with motion modeling.

17.4 Drift

Cumulative error over long traversal. Fix: loop closure, global BA, IMU integration.

17.5 Scale ambiguity

Monocular SfM has unknown global scale. Fix: known object size, IMU, GPS, stereo, monocular depth model (MoGe).

17.6 Initialization failure

Bad initial pair \(\to\) catastrophic. Fix: try multiple pairs, global SfM.

17.7 Outliers

Mismatched features. Fix: RANSAC, robust kernels, learned matchers.

17.8 Occlusion

Features visible in some images, not others. Fix: handled by triangulation only on overlapping; not a fundamental issue.

17.9 Lighting / weather

Day-night, sun glare, rain. Fix: illumination-invariant features, learned matchers (better at this), AnyLoc-class.

17.10 Narrow baselines

Insufficient parallax. Fix: better baseline (move further).

18. Theoretical Foundations

18.1 Cramer-Rao bound

Lower bound on covariance of unbiased estimator. Used to predict expected SfM accuracy.

18.2 Triangulation uncertainty

18.3 Reconstruction ambiguities

18.4 Degenerate configurations

18.5 Optimal triangulation

Hartley-Sturm: minimize geometric reprojection in both images via optimization on a 6th-order polynomial. Closed-form.

18.6 Uncertainty quantification

18.7 Robust statistics

19. Frontier 2025–2026

19.2 Hybrid pipelines

19.3 Open research

19.4 End-to-end pipelines

19.5 Production reality

19.6 Convergence with neural rendering

★ 2026 SOTA update — VGGT-Long: km-scale streaming

20. Production Stack 2026

Use case Default approach Notes
High-precision photogrammetry Reality Capture / Metashape commercial
Open-source SfM (precision) COLMAP + HLoc + LightGlue research / academic
Fast 3D from photos VGGT or MASt3R-SfM seconds
3DGS init VGGT (replacing COLMAP) 100× faster
Phone capture Polycam / Luma AI / Scaniverse consumer
AR persistent loc Niantic Lightship / ARKit Cloud Anchors VPS
Drone / aerial survey Pix4D / Metashape RTK + photogrammetry
VFX camera tracking PFTrack / SynthEyes / Reality Capture professional
Visual SLAM (mobile) ARKit / ARCore (closed) device-native
Visual SLAM (research) ORB-SLAM3 / OKVIS-2 / Kimera open
Visual-inertial SLAM VINS-Fusion / OKVIS VIO
Neural SLAM MonoGS / SplaTAM / GS-SLAM 3DGS-based
Place recognition AnyLoc / NetVLAD / MixVPR global descriptors
Long-term loc Aachen Day-Night benchmark; AnyLoc / SuperGlue illum-robust
Object scanning Reality Capture turntable + cross-pol Quixel pattern

Appendix A: Twenty-Five Things to Know

  1. Pinhole camera: \(\lambda x = K[R|t]X\).
  2. Brown-Conrady distortion (radial + tangential).
  3. Zhang's calibration: planar checkerboard from multiple views.
  4. Epipolar constraint: \(x_2^{\top} E x_1 = 0\).
  5. Essential matrix: \(E = [t]_\times R\), 5 DoF.
  6. Fundamental matrix: \(F = K_2^{-\top} E K_1^{-1}\), 7 DoF, rank-2.
  7. Eight-point algorithm with Hartley normalization.
  8. Five-point algorithm (Nistér): minimal calibrated case.
  9. DLT triangulation via SVD.
  10. PnP: P3P (4 candidates) or EPnP \(O(n)\).
  11. RANSAC iterations: \(N = \log(1 - p)/\log(1 - w^s)\).
  12. MAGSAC++: marginalize over noise scale.
  13. Reprojection error + Huber kernel + LM = bundle adjustment.
  14. Schur complement reduces BA to camera-only system.
  15. Ceres / g2o / GTSAM standard solvers.
  16. COLMAP: incremental SfM + PatchMatch MVS.
  17. HLoc: SuperPoint + SuperGlue / LightGlue + COLMAP.
  18. LightGlue is the production-default learned matcher (2024+).
  19. DUSt3R: predict pixel-aligned 3D pointmaps from 2 images.
  20. MASt3R-SfM: replaces COLMAP at \(\sim 100\times\) speedup.
  21. VGGT (Meta 2025): feed-forward N-image \(\to\) depth + cameras.
  22. Visual SLAM = online SfM with real-time constraints.
  23. ORB-SLAM3 / VINS-Fusion / OKVIS-2 are mature SLAM stacks.
  24. Loop closure: place recognition + geom verify + pose graph opt.
  25. NetVLAD / MixVPR / AnyLoc are place recognition standards.

Appendix B: Decision Tree — "Which SfM?"

  1. Highest-precision photogrammetry? \(\to\) Reality Capture or Metashape.
  2. Open-source max precision? \(\to\) COLMAP + HLoc + LightGlue + MAGSAC++.
  3. Fast SfM (seconds)? \(\to\) VGGT or MASt3R-SfM.
  4. 3DGS pipeline init? \(\to\) VGGT (replacing COLMAP).
  5. Phone capture? \(\to\) Polycam / Luma AI / Scaniverse / RealityScan.
  6. Real-time SLAM? \(\to\) ORB-SLAM3 (no IMU) or VINS-Fusion (with IMU).
  7. Photoreal map needed? \(\to\) MonoGS / SplaTAM (3DGS-SLAM).
  8. Aerial / drone survey? \(\to\) Pix4D / Metashape + RTK.
  9. AR persistent localization? \(\to\) Niantic Lightship / ARKit Cloud Anchors.
  10. Long-term loc (day-night)? \(\to\) AnyLoc + LightGlue for illum-robust.
  11. Visual-inertial? \(\to\) VINS-Fusion / OKVIS-2 / Kimera.
  12. VFX camera tracking? \(\to\) PFTrack / SynthEyes / Reality Capture.

Appendix C: Year-by-Year SfM Milestones