Algorithms for the recovery of structure and motion.


The code in the package includes a variety of classical vision algorithms, but is primarily intended to solve the structure from motion problem. The structure from motion problems is that of recovering a camera's position and orientation in 3D together with the structure of the observed scene, given only the images that were taken of the scene at the recovered camera positions.

Contents of the package

1 Tracker

A wrapper around the KLT-tracker is available.

2 Algorithm for Initial Recovery of Structure and Motion Parameters

The batch algorithm proposed in my licenciate thesis is available under different forms. The algorithm will take outlier-free tracks and make structure and motion parameters out of them. The parameterisation of the structure and the motion is the following:

-cameras, intrinsic parameters: 5 intrinsic parameters (focal length, aspect ratio, skew, principal point (x,y)),
-cameras, extrinsic parameters: 3 rotation parameters (exponential map) and 3 translation parameters.
-3D points: non-homogeneous coordinates (length 3-vectors)

No RANSAC is provided at the time of writing.

3 Bundle Adjustment

Bundle adjustment featuring a relatively high flexibility in the choice of the intrinsic parameters to optimise over, analytical derivatives, sparse storage of the Jacobians, inversion using the Schur complement... (See Triggs et al., Bundle Adjustment, A Modern Synthesis for details). The parameterisation of the rotation in the Euclidian bundle adjustment is done by the exponential map, which I prefer to quaternions (because quaternions yield an overparameterisation of 1 parameter per camera). A parameterisation via quaternions is available too though, but I haven't run it for a long time.

4 Getting Started

The code is intended to be Matlab compatible, but since it is being developed under Octave incompatibilities might have sneaked in.

The suggested starting points are the demo-scripts in examples/*. The demos include the steps from initial reconstruction to a final bundle-adjusted model. Tracking is not included in the examples at the time of writing. The final models are point clouds.

Compile the few files needing compilation by typing "make" in the top directory (Octave only).

Three examples are included, one on real data (Dinosaur sequence) and 2 on synthetic data (reconstructing a box and the interior of a room).

Have fun!

Last updated 19/02/09