Jafar
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
cameraHandler.hpp
00001 /* $Id$ */
00002 
00003 #ifndef _CAMERA_HANDLER_HPP
00004 #define _CAMERA_HANDLER_HPP
00005 
00006 #include "kernel/jafarException.hpp"
00007 #include "jmath/jblas.hpp"
00008 #include "camera/cameraException.hpp"
00009 #include "camera/cameraPinhole.hpp"
00010 #include "camera/cameraBarreto.hpp"
00011 
00012 namespace jafar {
00013   namespace camera {
00020     class AbstractCameraHandler {
00021       
00022       public:
00024       AbstractCameraHandler(){};
00026       virtual ~AbstractCameraHandler(){};
00028       virtual void setParameters(const jblas::vec& params) = 0;
00030       virtual void applyScale(double scale) = 0;
00032       virtual bool project(const jblas::vec3& v, 
00033                            jblas::vec2& pix) = 0;
00035       virtual void projectJac(const jblas::vec3& v, 
00036                               jblas::mat& J) = 0;
00038       virtual void projectJac(const jblas::vec3& v, 
00039                               jblas::vec2& pix,
00040                               jblas::mat& J) = 0;
00042       virtual void imageToCameraFrame(const jblas::vec2& pixel, 
00043                                       jblas::vec3& position) = 0;
00045       virtual void imageToCameraFrameDirection(const jblas::vec2& pixel, 
00046                                                jblas::vec3& direction) = 0;
00048       virtual void imageToCameraFrameDirectionJac(const jblas::vec2& pixel,
00049                                                   jblas::mat& J) = 0;
00051       virtual void imageToCameraFrameDirectionJac(const jblas::vec2& pixel,
00052                                                   jblas::vec3& direction,
00053                                                   jblas::mat& J) = 0;
00055       virtual void load(const std::string& configFile) = 0;
00057       virtual void intrinsics(jblas::mat33& intrinsic) = 0;
00058     }; // class AbstractCameraHandler
00059     
00060     template <class CAMERA = camera::CameraPinhole>
00067       class CameraHandler : public AbstractCameraHandler {
00068       
00069       protected:
00070       CAMERA m_camera;
00071 
00072       public:
00073       CameraHandler() : AbstractCameraHandler() {};
00075       CameraHandler(const CAMERA& _camera){
00076         m_camera = _camera;
00077       };
00078 
00079       virtual ~CameraHandler(){};
00080 
00081       virtual void setParameters(const jblas::vec& params) {};
00082 
00083       void applyScale(double scale){
00084         m_camera.applyScale(scale);
00085       }
00086 
00087       virtual bool project(const jblas::vec3& v, 
00088                            jblas::vec2& pix) {return false;};
00089 
00090       virtual void projectJac(const jblas::vec3& v, 
00091                               jblas::mat& J) {};
00092 
00093       virtual void projectJac(const jblas::vec3& v, 
00094                               jblas::vec2& pix,
00095                               jblas::mat& J) {};
00096 
00097       virtual void imageToCameraFrame(const jblas::vec2& pixel, 
00098                                       jblas::vec3& position) {};
00099 
00100       virtual void imageToCameraFrameDirection(const jblas::vec2& pixel, 
00101                                                jblas::vec3& direction) {};
00102 
00103       virtual void imageToCameraFrameDirectionJac(const jblas::vec2& pixel,
00104                                           jblas::mat& J) {};
00105 
00106       virtual void imageToCameraFrameDirectionJac(const jblas::vec2& pixel,
00107                                           jblas::vec3& direction,
00108                                           jblas::mat& J) {};
00109 
00110       void load(const std::string& configFile){
00111         m_camera.load(configFile);
00112       };
00113 
00114       virtual void intrinsics(jblas::mat33& intrinsic) {};
00115 
00116     }; // class CameraHandler
00117 
00122     class PinholeCameraHandler : public CameraHandler<camera::CameraPinhole> {
00123       public:
00124 
00125       PinholeCameraHandler();
00126 
00127       PinholeCameraHandler(const camera::CameraPinhole& _camera);
00128 
00129       ~PinholeCameraHandler();
00130 
00131       void setParameters(const jblas::vec& params);
00132 
00133       void imageToCameraFrame(const jblas::vec2& pixel, 
00134                               jblas::vec3& position);
00135 
00136       void imageToCameraFrameJac(const jblas::vec2& pixel,
00137                                  jblas::mat& J);
00138 
00139       void imageToCameraFrameJac(const jblas::vec2& pixel,
00140                                  jblas::vec3& position,
00141                                  jblas::mat& J);
00142 
00143       bool project(const jblas::vec3& v, 
00144                    jblas::vec2& pix);
00145 
00146       void projectJac(const jblas::vec3& v, 
00147                       jblas::mat& J);
00148 
00149       void projectJac(const jblas::vec3& v, 
00150                       jblas::vec2& pix,
00151                       jblas::mat& J);
00152 
00153       void imageToCameraFrameDirection(const jblas::vec2& pixel,
00154                                        jblas::vec3& direction);
00155 
00156       void imageToCameraFrameDirectionJac(const jblas::vec2& pixel,
00157                                           jblas::mat& J);
00158 
00159       void imageToCameraFrameDirectionJac(const jblas::vec2& pixel,
00160                                           jblas::vec3& direction,
00161                                           jblas::mat& J);
00162 
00163       void intrinsics(jblas::mat33& intrinsic);
00164     }; // class PinholeCameraHandler
00165 
00171     class StereoBenchHandler : public CameraHandler<camera::StereoBench> {
00172       public:
00173       StereoBenchHandler();
00174 
00175       StereoBenchHandler(const camera::StereoBench& _camera);
00176 
00177       ~StereoBenchHandler();
00178 
00179       void setParameters(const jblas::vec& params);
00180 
00181       void imageToCameraFrame(const jblas::vec2& pixel,
00182                               const double& disparity,
00183                               jblas::vec3& position);
00184 
00185       void imageToCameraFrameJac(const jblas::vec2& pixel,
00186                                  const double& disparity,
00187                                  jblas::mat& J);
00188 
00189       void imageToCameraFrameJac(const jblas::vec2& pixel,
00190                                  const double& disparity,
00191                                  jblas::vec3& position,
00192                                  jblas::mat& J);
00193 
00194       bool project(const jblas::vec3& v,
00195                    jblas::vec2& pix);      
00196 
00197       void projectJac(const jblas::vec3& v, 
00198                       jblas::mat& J);      
00199 
00200       void projectJac(const jblas::vec3& v, 
00201                       jblas::vec2& pix,
00202                       jblas::mat& J);
00203 
00204       void imageToCameraFrameDirection(const jblas::vec2& pixel, 
00205                                        jblas::vec3& direction);
00206 
00207       void imageToCameraFrameDirectionJac(const jblas::vec2& pixel,
00208                                           jblas::mat& J);
00209 
00210       void imageToCameraFrameDirectionJac(const jblas::vec2& pixel,
00211                                           jblas::vec3& direction,
00212                                           jblas::mat& J);
00213 
00214       void intrinsics(jblas::mat33& intrinsic);
00215     }; //class StereoBenchHandler
00216 
00221     class ParabolicBarretoCameraHandler : public CameraHandler<camera::CameraParabolicBarreto> {
00222       public:
00223       ParabolicBarretoCameraHandler();
00224 
00225       ParabolicBarretoCameraHandler(const camera::CameraParabolicBarreto& _camera);
00226 
00227       ~ParabolicBarretoCameraHandler();
00228 
00229       void setParameters(const jblas::vec& params);
00230 
00231       void imageToCameraFrame(const jblas::vec2& pixel, 
00232                               jblas::vec3& position);
00233       bool project(const jblas::vec3& v, 
00234                    jblas::vec2& pix);
00235 
00236       void projectJac(const jblas::vec3& v, 
00237                       jblas::mat& J);
00238 
00239       void projectJac(const jblas::vec3& v, 
00240                       jblas::vec2& pix,
00241                       jblas::mat& J);
00242 
00243       void imageToCameraFrameDirection(const jblas::vec2& pixel, 
00244                                        jblas::vec3& direction);
00245       
00246       void imageToCameraFrameDirectionJac(const jblas::vec2& pixel,
00247                                           jblas::mat& J);
00248 
00249       void imageToCameraFrameDirectionJac(const jblas::vec2& pixel,
00250                                           jblas::vec3& direction,
00251                                           jblas::mat& J);
00252 
00253       void intrinsics(jblas::mat33& intrinsic);
00254     }; // class ParabolicBarretoCameraHandler
00255 
00256   } // camera
00257 
00258 } // jafar
00259 
00260 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated on Wed Oct 15 2014 00:37:17 for Jafar by doxygen 1.7.6.1
LAAS-CNRS