/**

@mainpage Deferred Feature Matching and Subset Bundle Adjustment Implementation.

@section MainPage_Intro Introduction

This is the implementation of a structure from motion pipeline for the publication:
<BR>
<CENTER>
<STRONG>Structure from Motion with Deferred Feature Matching and Subset Bundle Adjustment</STRONG>
<BR>
by
<BR>
<I> Andreas Ley, Ronny Hänsch, and Olaf Hellwich </I> 
</CENTER>

The implemented structure from motion pipeline uses Deferred Feature Matching and Subset Bundle Adjustment to
increase the speed and precision of the reconstruction. It performs a sparse reconstruction to estimate the camera
parameters and outputs these to be used by subsequent dense reconstruction algorithms. The intended use case are
reconstructions of a single object of interest with a lot of overlap in the source images.
The source code is released under GPLv3.

@section MainPage_Requirements Requirements

The code base is written in C++11 and Cuda 5.0 and requires 
an AVX capable CPU (Intel Ivybridge architecture or higher) and a Cuda device with a compute capability of at least 3.0
(Kepler architecture or higher) for execution. The entire framework was developed under linux but should be 
easy to port to other OS ecosystems like Windows. Compilation was tested with GCC 4.8.2.

In addition, the following tools and libraries are needed:
<UL>
<LI>CMake (build system)</LI>
<LI>Cuda</LI>
<LI>ImageMagick</LI>
<LI>Boost</LI>
<LI>TinyXML</LI>
<LI>xxd (a command line tool for converting to hex)</LI>
<LI>GLEW (for some of the GUI tools, not for the main program)</LI>
<LI>X11 (for some of the GUI tools, not for the main program)</LI>
</UL>

@section MainPage_Structure Structure of the Codebase

The codebase is structured into several libraries and projects. The most important part is the
@ref Page_SFMBackend "backend" which holds the entire implementation of the actual
structure from motion pipeline. A frontend, in the form of a command line program,
is supplied as well (see @ref Page_CommandLineFrontend) which combines the structure from
motion implementation with input and output handling into a fully functional application.

In addition, there are various helper libraries which feature for example common
@ref SFMUtilities_Group "utility functions". Some folders contain test projects or
tools for measuring the reconstruction quality. They are included in this source distribution
for the sake of completeness, but are not well cleaned up.

@section MainPage_Build How to Build the Framework

The framework can be build via the cmake build system. To perform a release out of source build, create a subdirectory and invoke cmake from there:
@code{.unparsed}
$ cd code/
$ mkdir buildRelease
$ cd buildRelease/
$ cmake .. -DCMAKE_BUILD_TYPE=Release
@endcode
This step only needs to be done once to set up the build directory. To actually build the framework call "make" in the same directory:
@code{.unparsed}
$ cd code/buildRelease/
$ make -j
@endcode
This will build the @ref Page_SFMBackend "backend" as well as the @ref Page_CommandLineFrontend "command line frontend". The latter can subsequently be found in "buildRelease/CommandLineFrontend/CommandLineFrontend".

To directly inspect the results of the sparse reconstruction a @ref Page_SparseReconstructionViewer "sparse reconstruction viewer" is included
in the framework. This can be enabled via the cmake option "BUILD_VIEWER":
@code{.unparsed}
$ cd code/
$ mkdir buildRelease
$ cd buildRelease/
$ cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_VIEWER=true
@endcode
The viewer can then be found in "buildRelease/SparseReconstructionViewer/SparseReconstructionViewer".

*/

