camera.h

Go to the documentation of this file.
00001 #ifndef CAMERA_H
00002 #define CAMERA_H
00003 
00004 #include "mimasconfig.h"
00005 
00006 #ifdef HAVE_LIBMINPACK
00007 #ifdef HAVE_LIBLAPACK
00008 #ifdef CAMERA_CALIBRATION_ENABLE
00009 
00010 #include <boost/numeric/ublas/vector.hpp>
00011 #include <boost/numeric/ublas/banded.hpp>
00012 #include <boost/numeric/ublas/matrix.hpp>
00013 #include <boost/numeric/ublas/symmetric.hpp>
00014 #include <boost/numeric/ublas/triangular.hpp>
00015 #include <boost/numeric/ublas/storage.hpp>
00016 #include "linalg.h"
00017 #include "nlinalg.h"
00018 #include "mimasexception.h"
00019 #include "primitives.h"
00020 
00021 namespace mimas { 
00022 namespace camera_calibration {
00023 
00036   struct Chessboard {
00038     std::vector< point_f > object;
00039     
00043     std::vector< pixel_f > image;
00044   };
00045 
00057   class Camera {
00058     
00059   public:
00061     typedef boost::numeric::ublas::matrix< double, boost::numeric::ublas::column_major > Matrix;
00062     
00064     typedef boost::numeric::ublas::vector< double > Vector;
00065 
00067     typedef boost::numeric::ublas::triangular_matrix 
00068       < double, boost::numeric::ublas::upper, boost::numeric::ublas::column_major > TriangularMatrix;
00069 
00071     typedef boost::numeric::ublas::symmetric_matrix 
00072       < double, boost::numeric::ublas::upper, boost::numeric::ublas::column_major > SymmetricMatrix;
00073 
00074   private:
00076     Matrix K, K_opt;
00077 
00079     Vector disto;
00080 
00082     bool optimisation;
00083 
00084     std::vector< Chessboard > chessb;
00085     std::vector< Matrix > extrinsics;
00086 
00087   protected:
00092     void maxLikelyhood(Matrix &intrinsics, int nbPictures) throw (mimasexception);
00093 
00094     /* void initDistortion(void); */
00095 
00096   public:
00097 
00099     Camera() throw(mimasexception);
00100 
00102     ~Camera();
00103 
00120     void calibrate(std::vector< Chessboard > &chess) throw (mimasexception);
00121 
00136     static void
00137       fcn(int *m, int */*n*/, double *x, double *fvec, int */*iflag*/);
00138 
00147     static void 
00148       findHomography(const Chessboard &chess, Matrix &homography);
00149 
00156     static void findHomographies(std::vector< Matrix > &homographies, std::vector< Chessboard > &chess);
00157 
00164     static Matrix initCalibration(std::vector< Matrix > &homographies, std::vector< Chessboard > &chess) 
00165       throw (mimasexception);
00166 
00173     static void findExtrinsics(std::vector< Matrix > &extrinsics, std::vector< Matrix > &homographies, 
00174              Matrix &intrinsics, int nbPictures);
00175 
00177     Matrix getIntrinsicsInit() const { return K; }
00178 
00180     Matrix getIntrinsics() const { return K_opt; }  
00181 
00183     Vector getDistortion() const { return disto; }
00184 
00186     bool isOptimized() const { return optimisation; }
00187 
00190   static Camera *current_cam;
00191 
00192   };
00193 
00196 }
00197 }
00198 
00199 #endif
00200 #endif
00201 #endif
00202 
00203 #endif /* CAMERA_H */

[GNU/Linux] [Qt] [Mesa] [STL] [Lapack] [Boost] [Magick++] [Xalan-C and Xerces-C] [doxygen] [graphviz] [FFTW] [popt] [xine] [Gnuplot] [gnu-arch] [gcc] [gstreamer] [autoconf/automake/make] [freshmeat.net] [opensource.org] [sourceforge.net] [MMVL]
mimas 2.1 - Copyright Mon Oct 30 11:31:16 2006, Bala Amavasai, Stuart Meikle, Arul Selvan, Fabio Caparrelli, Jan Wedekind, Manuel Boissenin, ...