Jafar
|
The bundle adjustment (BA) is a technique for simultaneously refining 3D structure and viewing parameters to obtain a reconstruction which is optimal in comparison with the noise affecting the observed image features (and other sources of information : like camera pose given by an odomertry sensor, like position of some 3D features in the World Frame). BA amounts to minimizing an non linear least squares criterion, non linear because the predictive model is non linear in terms of the sought parameters. For more information, I advise you to read the Bill Triggs's review.
In our implementation, we have introduced two additive terms permitting to add a priori on structure parameters and/or camera pose parameters. Then the global criterion is :
The bundle modules includes two algorithms :
This implementation is widely inspired by the C implematation coded and documented by Manolis Lourakis. Another contributor is Gunter Winkler for his implementation of conjugated gradient method for solving linear system (much faster than LU decomposition method when the number of equation is high).
To run our Bundle Adjustment implementation, the user need to fill an configuration file on the model of paramBA_default.bun (located in the doc directory of bundle jafar-module). This file gives information on :
All data-loading functions wait for binary files. The format of files depends on the recorded data. Now, I'm going list the different files potentially needed by bundle adjustement.
At the end of the optimization process, two files are generated : one to store position of the 3D structure elements in the format of the 3D structure initialization file and an other to store refined extrinsic parameters in the format of the motion initialization file.
Extra doc for macro can go here... (you can delete this section if not relevant)
The interface of the module is generated from the following files:
try
{ } catch
block for this module. Classes | |
class | jafar::bundle::observation |
Base class of observation object. More... | |
class | jafar::bundle::observationsContainer |
Container for all observations used by the BA algorithm. More... | |
class | jafar::bundle::bundleDimension |
Container for problem dimensions (Number of cameras, number of 3D points, ...) More... | |
class | jafar::bundle::BundleException |
Base class for all exceptions defined in the module bundle. More... | |
class | jafar::bundle::bundleParameters |
Container for bundle parameter storage. More... | |
class | jafar::bundle::bundleVariables< Sensor > |
Base class for parameters to refine during optimization process The class is templated in order to be generic with rapport to camera model. More... | |
class | jafar::bundle::bundleLinearSys |
Mathematical part of our Bundle Adjustment implementation. More... | |
class | jafar::bundle::SBAObservation |
class SBAObsevation Holds structure of observed point. More... | |
class | jafar::bundle::SBACamera |
class SBACamera Holds intrinsic and extrinsic camera parameters. More... | |
class | jafar::bundle::SparseBundleAdjustment |
class SparseBundleAdjustment It's an interface to Lourakis Sparse Bundle Adjustment I started recoding in cpp templated way but haven't time to finish it. More... | |
Functions | |
template<typename CamType > | |
void | jafar::bundle::computeResidual (observationsContainer &obs, bundleVariables< CamType > &variables) |
Update all residual vectors (2D, 3D structure and extrinsic parameters) from current variables estimation (variables) and from observations (obs) | |
template<typename CamType > | |
void | jafar::bundle::bundleGN (std::string paramFile) |
Bundle adjustment algorithm using the Gauss-Newton minimization algorithm. | |
template<typename CamType > | |
void | jafar::bundle::bundleLM (std::string paramFile) |
Bundle adjustment algorithm using the Levenberg Marquardt minimization algorithm. |
Generated on Wed Oct 15 2014 00:37:30 for Jafar by doxygen 1.7.6.1 |