GSoC2011SfM
0.1
Google Summer of Code 2011: Structure from motion
|
00001 #ifndef _GSOC_SFM_CAMERA_PINHOLE_H 00002 #define _GSOC_SFM_CAMERA_PINHOLE_H 1 00003 00004 //A lot of methods are inspired of LIBMV project ( http://code.google.com/p/libmv_core/ ) 00005 00006 #include "macro.h" //SFM_EXPORTS 00007 #include "opencv2/calib3d/calib3d.hpp" 00008 #include "Camera.h" 00009 00010 namespace OpencvSfM{ 00011 enum paramsOfIntraParameters{ 00012 FOCAL_PARAM=1, 00013 SKEW_PARAM=2, 00014 PRINCIPAL_POINT_PARAM=4 00015 }; 00016 00024 class SFM_EXPORTS CameraPinhole:public Camera{ 00025 protected: 00026 cv::Mat intra_params_; 00027 cv::Mat inv_intra_params_; 00028 00034 unsigned char estimation_needed_; 00035 public: 00043 CameraPinhole( cv::Mat intra_params=cv::Mat::eye( 3, 3, CV_64F ), 00044 int img_w=640, int img_h=480, unsigned char wantedEstimation 00045 = FOCAL_PARAM|SKEW_PARAM|PRINCIPAL_POINT_PARAM ); 00057 CameraPinhole( const std::vector<std::vector<cv::Point3f> >& objectPoints, 00058 const std::vector<std::vector<cv::Point2f> >& imagePoints, 00059 cv::Size imageSize, double aspectRatio=1., int img_w=640, int img_h=480, 00060 unsigned char wantedEstimation=FOCAL_PARAM|SKEW_PARAM|PRINCIPAL_POINT_PARAM ); 00061 ~CameraPinhole( ); 00066 virtual uchar getNbMissingParams( ) const; 00078 virtual void updateIntrinsic( double* values, uchar nbVal, bool add_to_intra ); 00079 00085 void updateIntrinsicMatrix( cv::Mat newParams,unsigned char intraValues=FOCAL_PARAM|SKEW_PARAM|PRINCIPAL_POINT_PARAM ); 00086 00090 virtual std::vector<cv::Vec4d> convertFromImageTo3Dray( std::vector<cv::Vec3d> points ); 00091 00097 virtual std::vector<cv::Vec2d> pixelToNormImageCoordinates( std::vector<cv::Vec2d> points ) const; 00103 virtual std::vector<cv::Vec2d> normImageToPixelCoordinates( std::vector<cv::Vec2d> points ) const; 00108 virtual cv::Mat getIntraMatrix( ) const 00109 {return intra_params_;}; 00115 virtual double getFocal( ) const; 00116 00121 static cv::Ptr<Camera> read( const cv::FileNode& node ); 00122 00127 virtual void write( cv::FileStorage& fs ) const; 00128 00129 }; 00130 00131 }; 00132 00133 #endif