Week 12 - Multiple-view geometry
Camera geometry from multiple views. Structure from motion (SfM), full bundle adjustment (BA) and multiple-view stereo processing.
Lectures
- Multiple-view geometry (video (Norwegian) | pdf)
- Full bundle adjustment (video (Norwegian) | pdf)
- Multiple-view stereo (video (Norwegian) | pdf)
Recommended reading
- Szeliski: Ch 11.4, 12.1.2, 12.7
Lab: Structure from Motion and 3D reconstruction
In today's lab you have three options where you can play around and explore the theory in practice
1. SfM and MVS with COLMAP
COLMAP is a general-purpose Structure-from-Motion (SfM) and Multi-View Stereo (MSV) pipeline with a graphical and command-line interface. It offers a wide range of features for reconstruction of ordered and unordered image collections.
Install
You can download binaries for Windows and Mac from https://demuc.de/colmap/
On Ubuntu (x86_64) you can install COLMAP like this:
sudo apt-get install colmap
You need CUDA in order to perform MVS. For this to work on Ubuntu, you will have to build COLMAP yourself.
Experiment
Follow the tutorial: https://colmap.github.io/tutorial.html
You can use the Holmenkollen dataset from https://github.com/tek5030/lab-camera-pose-py/tree/master/data, or caputure your own data.
2. Simple BA-experiments in python
Lab 5 from Tryms VSLAM course at NTNU covers python implementations for MOBA, SOBA and full BA.
Experiment
Follow the experiments in https://github.com/ttk21/lab_05#readme
3. Advanced incremental SfM experiment in Python
Trym has written a simplified implementation of incremental SfM based on the Holmenkollen dataset where the correspondences already have been found:
https://github.com/tussedrotten/sfm_example
Experiment
Run and play around with https://github.com/tussedrotten/sfm_example/blob/main/incremental_sfm.py
You can study the dataset with image correspondences and corresponding 3d points in https://github.com/tussedrotten/sfm_example/blob/main/explore_matches_data.py and https://github.com/tussedrotten/sfm_example/blob/main/explore_map_data.py