COLMAP

Schönberger 2016 · Paper

One-line summary — The de-facto standard open-source incremental Structure-from-Motion and Multi-View Stereo pipeline (“Structure-from-Motion Revisited”, CVPR 2016), used as the offline reconstruction and ground-truth-poses workhorse across 3D vision.

Problem

Incremental SfM — register images one at a time, triangulating structure and bundle-adjusting as you go — was the prevalent strategy for unordered photo collections by 2016, but “robustness, accuracy, completeness, and scalability remain the key problems towards building a truly general-purpose pipeline”. Existing systems (Bundler, VisualSFM) often failed to register a large fraction of registrable images or produced broken models from mis-registrations and drift. Schönberger and Frahm revisited each stage of the incremental pipeline and hardened it, releasing the result as COLMAP.

Method & architecture

The pipeline has two stages: correspondence search (feature extraction, matching, geometric verification producing a scene graph) and incremental reconstruction (initialization, image registration via PnP, triangulation, bundle adjustment, outlier filtering). The paper’s contributions harden each step:

cosα=taXabtaXab2tbXabtbXab2\cos\alpha=\frac{t_{a}-X_{ab}}{\left\|t_{a}-X_{ab}\right\|_{2}}\cdot\frac{t_{b}-X_{ab}}{\left\|t_{b}-X_{ab}\right\|_{2}}

plus positive depths (cheirality) and reprojection error below threshold tt. Recursion on the remaining measurements recovers multiple independent points falsely merged into one track.

E=jρj(π(Pc,Xk)xj22)E=\sum_{j}\rho_{j}\left(\left\|\pi\left(P_{c},X_{k}\right)-x_{j}\right\|_{2}^{2}\right)

over poses PcSE(3)P_c \in \mathrm{SE}(3) and points XkR3X_k \in \mathbb{R}^3 (Cauchy loss ρj\rho_j in local BA; Ceres with sparse direct solver or PCG). Local BA runs after each registration; global BA only after the model grows by a set percentage. COLMAP adds post-BA re-triangulation on top of VisualSFM’s pre-BA RT, and iterates BA → RT → filtering until filtered observations diminish, fighting drift.

A companion PatchMatch-based MVS stage (“Pixelwise View Selection for Unstructured Multi-View Stereo”, ECCV 2016) densifies the output; the whole system ships as a maintained C++/CUDA codebase with GUI, CLI, and pycolmap bindings.

Results

Evaluated on 17 datasets totalling 144,953 unordered Internet photos against Bundler, VisualSFM, Theia, and DISCO:

Why it matters for SLAM

COLMAP is the reference point against which both SLAM systems and learned reconstruction methods are measured, and it is the standard tool for generating camera poses used to train and evaluate them — most NeRF and 3D Gaussian Splatting pipelines start from COLMAP poses. Understanding its incremental design clarifies what SLAM does differently (sequential input, real-time budgets, loop closure), and its per-image cost growth is exactly the pain point that global-SfM (GLOMAP), GPU-parallel (InstantSfM), and feed-forward (DUSt3R, VGGT) successors target.