Bundle-Adjustment-in-the-Large¶
This example demonstrates bundle adjustment of camera extrinsics and intrinsics, as well as 3D landmark positions, for a Structure-from-Motion problem. The example isn’t particularly optimized for performance, but demonstrates the simplest way to set this up with SymForce.
We use the Bundle-Adjustment-in-the-Large dataset, as described here: https://grail.cs.washington.edu/projects/bal/
Feature correspondences have already been selected, and we’re given initial guesses for all of the variables; our only task is to perform bundle adjustment.
The camera model is a simple polynomial model, and each image is assumed to be captured by a different camera with its own intrinsics.
Ceres and GTSAM also have reference implementations for this dataset, see here for Ceres and here for GTSAM.
Files:¶
download_dataset.py:¶
Script to download the dataset files into the ./data folder, run this first if you’d like to run the example
bundle_adjustment_in_the_large.py¶
Defines the symbolic residual function for the reprojection error factor, and a function to generate the symbolic factor into C++. The generate function is called by symforce/test/symforce_examples_bundle_adjustment_in_the_large_codegen_test.py to generate everything in the gen directory.
bundle_adjustment_in_the_large.cc¶
This is the C++ file that actually runs the optimization. It loads a dataset, builds a factor graph, and performs bundle adjustment. See the comments there for more information.