GSoC2011SfM
0.1
Google Summer of Code 2011: Structure from motion
|
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