R3DR - Robust 3D Reconstruction from Visual Data

R3DR is a Software Campus micro project funded by the Federal Ministry of Education and Research. It aims to create a prototype for a web-based system for user-assisted 3D reconstruction. The project comprises various aspects of what is typically considered the traditional structure from motion pipeline, as well as all facilities needed to make these tools available to the consumer.

Many of the applications and libraries that drive R3DR will be made available as open source licensed under MPL 2.0.

Currently, only the dlm module is released, which handles bundle adjustment of projective and metric scenes. For the metric scenes, chains of Euclidean transformations can be optimized. While dlm provides the facilities to load and store a native binary format, there is no input data available yet. For this reason, dlmVoodooIO provides functions to easily load and store data in the format used by the Voodoo camera tracker.

In dlm 1.3.0 there is a bug in dlm::optimizer::Optimizer that makes it misinterpret the origin specified in dlm::entity::Image. This bug will be fixed in a future release. A workaround is to set the origin to LowerLeft and specify the coordinates with respect to an UpperLeft origin, or equivalent.

The release of dlm 1.6.0 is currently in preparation.

Main libraries


Auxiliary libraries


Demo application


Test data


The above software was tested using GCC 4.7.2, Clang 3.4, and VS2012. CMake files are included in the releases, but the build system is currently in an experimental stage. If using CMake 2.8.8 is an option, the recommended way is to use CMake with the included files and let it figure out the include locations from the build trees itself, i.e.

  • cd path/to/dlm/
  • mkdir build
  • cd build
  • cmake ..
  • make

For Windows, the appropriate solutions can be built using VS once they have been created by CMake. Make sure to build the right configuration, though. The build should be performed in the order dlm -> dlmVoodooIO -> demo, to ensure that the packages are available and can be found.

Once built, the demo application demonstrates the optimization of a given scene in voodoo cam/pnt format. For a usage example, execute the program without paramters. Boolean values given must be written as either 'true' or 'false'. An example command line for the provided sequence is './bin/demo ../default/column%04d.cam ../default/column%04d.pnt false 200 false ../out/output%04d.cam ../out/output%04d.pnt'. The last two arguments can be omitted; if they are present, the output directory has to be present. Optimization of the whole sequence (2500 cam/pnt files) with the vanilla demo application is discouraged.

The only dependency for dlm is Eigen3, to perform Choleksy decomposition and SVD. For Linux, the environment variable EIGEN3_INCLUDE_DIR should be set to the location of Eigen3 (export EIGEN3_INCLUDE_DIR=/path/to/Eigen3/). For Windows, Eigen3 should be placed in Program Files or similar. If that's the case, CMake should be able to figure out the paths by itself.

There is no documentation yet, but there will be a wiki. Also, dlmVoodooIO is a good starting point to see how to use the dlm::Scene class.

Imprint / Impressum