v9.1.1
Menu

Chapter 6: 3D Reconstruction Pipelines

Week 6

Master the complete pipeline for reconstructing 3D models from images and sensor data: photogrammetry workflows from images to textured meshes, surface reconstruction from point clouds using Poisson and marching cubes, implicit surface representations with signed distance functions, mesh optimization and simplification, and texture mapping onto recovered geometry.

Topics
7
Demos
2
Videos
3
Min read
40

Chapter Overview

3D reconstruction is the process of recovering a complete digital 3D model of a scene or object from sensor data. This chapter covers the full pipeline: from raw images or point clouds through to watertight, textured meshes ready for visualization, simulation, or manufacturing.

What is this chapter about? We walk through the major reconstruction approaches. Photogrammetry takes a collection of photographs and produces a textured 3D model through a sequence of well-defined stages. Point cloud meshing converts raw 3D points into connected surfaces. Poisson reconstruction and marching cubes provide mathematically principled methods for extracting smooth surfaces from noisy data. Signed distance functions offer a powerful implicit representation that unifies many reconstruction techniques. We close with the practical concerns of mesh simplification (making models efficient) and texture mapping (making them look real).

Why does this matter? 3D reconstruction drives applications from cultural heritage preservation (digitizing ancient artifacts) to real estate (virtual property tours) to film and games (scanning real-world environments). Understanding the full pipeline lets you diagnose quality issues, choose appropriate methods for different scenarios, and build production-quality reconstruction systems.

How the topics connect: The photogrammetry pipeline provides the big picture of how images become 3D models. Mesh reconstruction and Poisson reconstruction convert intermediate point clouds into surfaces. Marching cubes extracts geometry from volumetric representations. Signed distance functions provide the mathematical foundation for implicit surfaces. Mesh simplification optimizes the result for practical use, and texture mapping adds visual realism.

Chapter Roadmap

Click any topic to jump in

Explainer videoInteractive demo
1
Photogrammetry

The full pipeline from photographs to 3D models — SfM, dense MVS, and the COLMAP workflow.

Structure from Motion (SfM)Dense Reconstruction and MVSEnd-to-End Pipeline: COLMAP Workflow
Point cloud to surface

Two approaches to meshing — local connectivity and global smoothness

2
Mesh Reconstruction

Converting raw point clouds into connected triangle meshes using ball pivoting and alpha shapes.

Ball Pivoting Algorithm (BPA)Alpha Shapes and Delaunay-Based MethodsDelaunay Triangulation in 3D
3
Poisson Reconstruction

Extracting smooth, watertight surfaces by solving the Poisson equation on oriented normals.

The Indicator Function and Poisson EquationScreened Poisson ReconstructionNormal Estimation and Orientation
Volumetric and implicit methods

Grid-based extraction and implicit representations

4
Marching Cubes

Extracting triangle meshes from volumetric scalar fields using cube classification and edge interpolation.

Cube Classification and Lookup TableEdge Interpolation and Vertex PlacementHandling Ambiguities and Mesh Quality
5
Signed Distance Functions

Implicit surface representations where zero-crossings define geometry — from TSDF to DeepSDF.

SDF as an Implicit Surface RepresentationTruncated Signed Distance Function (TSDF)Neural Implicit Surfaces (DeepSDF)
Making meshes practical

Optimization for rendering and adding visual realism

6
Mesh Simplification

Reducing triangle count via edge collapse and quadric error metrics for efficient rendering.

Edge Collapse OperationsQuadric Error Metrics (QEM)Level of Detail (LOD) and Progressive Meshes
7
Texture Mapping

Projecting color onto geometry through UV parameterization, atlas generation, and mipmap filtering.

UV Parameterization and Atlas GenerationProjective Texture Mapping from PhotographsTexture Filtering and Mipmapping

Topics

7 topics in this chapter

Chapter 5 ended with depth maps, from sensors or from multi-view stereo, but a depth map is one view's opinion about the scene. A museum scanning a statue, a game studio capturing a rock, or a surveyor documenting a building wants a single model: one consistent surface with colour, viewable from anywhere and usable in other software. Photogrammetry is the pipeline that turns a pile of overlapping photographs into that model, and this chapter walks through its stages. The first stage is structure from motion from Chapter 4, which recovers every camera's pose and a sparse point cloud. Multi-view stereo then computes dense depth for every image and fuses the maps into a point cloud with millions of points. Meshing converts points into a connected surface, simplification trims the triangle count to something usable, and texturing paints the photographs back onto the mesh. Each stage inherits the errors of the one before, so a weak pose estimate shows up as a doubled wall or a smeared texture. This topic gives the overview with COLMAP as the running example; the rest of the chapter opens up each stage.

Definition

A photogrammetry pipeline reconstructs a textured 3D model from overlapping photographs. Structure from motion estimates camera poses and sparse points, multi-view stereo computes and fuses dense depth maps into a point cloud, surface reconstruction converts the points into a mesh, and texture mapping projects the photographs onto it. Tools such as COLMAP and Meshroom automate the stages.

In this topic

  1. 1Structure from Motion (SfM)
  2. 2Dense Reconstruction and MVS
  3. 3End-to-End Pipeline: COLMAP Workflow
1 of 3
Structure from Motion (SfM)

SfM simultaneously recovers camera poses (positions and orientations) and a sparse 3D point cloud from image correspondences. The process begins with feature detection (SIFT, SuperPoint) and matching across image pairs. An initial pair of images is chosen with sufficient baseline, and their relative pose is estimated from the Essential matrix. Additional images are registered incrementally by finding 2D-3D correspondences (PnP algorithm) and triangulating new 3D points. Bundle adjustment globally optimizes all camera parameters and 3D point positions by minimizing the total reprojection error across all observations. The output is a set of calibrated cameras and a sparse point cloud (thousands to millions of points).

Mathematical Intuition

SfM solves a nonlinear least squares problem: minimize total reprojection error min⁡{Rj,tj},{Xi}∑i,j∥π(RjXi+tj,Kj)−xij∥2\min_{\{R_j, t_j\}, \{X_i\}} \sum_{i,j} \|\pi(R_j X_i + t_j, K_j) - x_{ij}\|^2 over all camera poses {Rj,tj}\{R_j, t_j\} and 3D points {Xi}\{X_i\}. With NN cameras and MM points, there are 6N+3M6N + 3M unknowns but the Jacobian is extremely sparse (each observation only depends on one camera and one point), enabling efficient Schur complement-based bundle adjustment that reduces the system to a 6N×6N6N \times 6N camera-only problem.

Example:

An SfM pipeline processes 200 images and produces 50,000 sparse 3D points. On average, each point is observed in 4 images. How many total observations (reprojection constraints) does bundle adjustment optimize over?

2 of 3
Dense Reconstruction and MVS

After SfM produces camera poses and a sparse point cloud, Multi-View Stereo (MVS) computes dense depth maps for each image. Dense reconstruction evaluates depth hypotheses at every pixel by checking photometric consistency across neighboring views. The per-view depth maps are then fused into a single dense point cloud by applying geometric consistency filters that reject outliers. Tools like COLMAP, OpenMVS, and Meshroom automate this pipeline. The dense point cloud typically has hundreds of times more points than the sparse SfM output (the worked example below reaches 360x), with sufficient density for surface reconstruction.

Mathematical Intuition

Dense MVS estimates per-pixel depth by evaluating photometric consistency across views. The cost function at pixel pp and depth dd aggregates matching scores: C(p,d)=1∣N∣∑j∈N1−NCC(Pref(p),Pj(Hj(d)⋅p))C(p, d) = \frac{1}{|\mathcal{N}|} \sum_{j \in \mathcal{N}} 1 - \text{NCC}(\mathcal{P}_{\text{ref}}(p), \mathcal{P}_j(H_j(d) \cdot p)) where Hj(d)H_j(d) is the depth-dependent homography from reference to view jj and NCC is normalized cross-correlation over local patches. The depth with minimum cost is selected: d∗(p)=arg⁡min⁡dC(p,d)d^*(p) = \arg\min_d C(p, d).

Example:

SfM produced 50,000 sparse points from 200 images at 4000x3000 resolution. MVS produces depth maps at 1/4 resolution. Estimate the dense point cloud size after fusion with 60% valid pixel rate.

3 of 3
End-to-End Pipeline: COLMAP Workflow

COLMAP is the most widely used open-source photogrammetry pipeline. It integrates feature extraction (SIFT), exhaustive or sequential matching, incremental SfM with bundle adjustment, and dense MVS with PatchMatch stereo. The typical workflow is: (1) extract features from all images, (2) match features across image pairs, (3) run incremental SfM to recover poses and sparse points, (4) optionally run geometric verification, (5) compute dense depth maps via PatchMatch, (6) fuse depth maps into a dense point cloud. From there, external tools (Poisson reconstruction, Screened Poisson) generate the final mesh, and texture mapping projects colors back onto the surface.

Mathematical Intuition

COLMAP's exhaustive matching has O(n2)O(n^2) complexity: for nn images, it evaluates (n2)=n(n−1)/2\binom{n}{2} = n(n-1)/2 image pairs. Each pair requires O(F2)O(F^2) descriptor comparisons for FF features per image (or O(Flog⁡F)O(F \log F) with approximate nearest neighbors). The quadratic scaling becomes the bottleneck — 500 images need 124,750 pair evaluations. Vocabulary tree matching reduces this to O(n⋅k)O(n \cdot k) by retrieving only the top-kk most similar images per query, enabling reconstruction from thousands of images.

Example:

A COLMAP pipeline with 500 images takes 2 minutes for feature extraction, 45 minutes for exhaustive matching (O(n2)O(n^2)), 30 minutes for SfM, and 120 minutes for dense MVS. If the image count doubles to 1000, estimate the new total time.