GSoC2011SfM  0.1
Google Summer of Code 2011: Structure from motion
D:/Travail/These/Determination caracteristiques camera/GSoC/SfM/src/CameraPinholeDistor.h
00001 #ifndef _GSOC_SFM_CAMERA_PINHOLE_DISTORTION_H
00002 #define _GSOC_SFM_CAMERA_PINHOLE_DISTORTION_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 "CameraPinhole.h"
00008 #include "opencv2/imgproc/imgproc.hpp"
00009 
00010 namespace OpencvSfM{
00011   enum paramsOfDistoParameters{
00012     RADIAL_PARAM=0x10,  
00013     TANGEANT_PARAM=0x20  
00014   };
00015 
00016   
00024   class SFM_EXPORTS CameraPinholeDistor:public CameraPinhole{
00025   protected:
00026     cv::Vec<double, 6> radial_dist_;
00027     unsigned char nb_radial_params_;
00028     cv::Vec<double, 2> tangential_dist_;
00029     unsigned char nb_tangent_params_;
00030     cv::Mat distortionVector;
00031  
00032   public:
00043     CameraPinholeDistor( cv::Mat intra_params=cv::Mat::eye( 3, 3, CV_64F ),
00044       cv::Vec6d radial_dist=cv::Vec6d( 0.0,0.0,0.0,0.0,0.0,0.0 ),
00045       unsigned char nbRadialParam=6,cv::Vec2d tangential_dist=cv::Vec2d( 0.0,0.0 ),
00046       int img_w=640, int img_h=480,
00047       unsigned char wantedEstimation=FOCAL_PARAM|SKEW_PARAM|PRINCIPAL_POINT_PARAM|RADIAL_PARAM|TANGEANT_PARAM );
00062     CameraPinholeDistor( const std::vector<std::vector<cv::Point3f> >& objectPoints,
00063       const std::vector<std::vector<cv::Point2f> >& imagePoints, cv::Size imageSize,double aspectRatio=1.,
00064       cv::Vec6d radial_dist=cv::Vec6d( 0.0,0.0,0.0,0.0,0.0,0.0 ),
00065       unsigned char nbRadialParam=6,
00066       cv::Vec2d tangential_dist=cv::Vec2d( 0.0,0.0 ),
00067       int img_w=640, int img_h=480,
00068       unsigned char wantedEstimation=FOCAL_PARAM|SKEW_PARAM|PRINCIPAL_POINT_PARAM|RADIAL_PARAM|TANGEANT_PARAM );
00069     ~CameraPinholeDistor( );
00070 
00075     virtual uchar getNbMissingParams( ) const;
00087     virtual void updateIntrinsic( double* values, uchar nbVal, bool add_to_intra );
00088 
00096     void updateDistortionParameters( const cv::Vec6d& radial_dist, unsigned char nbRadialParam,const cv::Vec2d& tangential_dist,
00097       unsigned char wantedEstimation=RADIAL_PARAM|TANGEANT_PARAM );
00098 
00102     virtual std::vector<cv::Vec4d> convertFromImageTo3Dray( std::vector<cv::Vec3d> points );
00103     
00109     virtual std::vector<cv::Vec2d> pixelToNormImageCoordinates( std::vector<cv::Vec2d> points ) const;
00115     virtual std::vector<cv::Vec2d> normImageToPixelCoordinates( std::vector<cv::Vec2d> points ) 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
 All Classes Functions Variables