00001
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 };
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 };
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 };
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 };
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 };
00255
00256 }
00257
00258 }
00259
00260 #endif