Go to the documentation of this file.00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 #ifndef _DETECT_CALIBRATION_PATTERN_
00031 #define _DETECT_CALIBRATION_PATTERN_
00032 
00033 #include <opencv2/core/core.hpp>
00034 #include <opencv2/calib3d/calib3d.hpp>
00035 #include <opencv2/calib3d/calib3d.hpp>
00036 #include <opencv2/highgui/highgui.hpp>
00037 #include <opencv2/imgproc/imgproc.hpp>
00038 
00039 #include <Eigen/Dense>
00040 #include <Eigen/Geometry> 
00041 #include <Eigen/StdVector>
00042 
00043 #include <iostream>
00044 #include <stdexcept>
00045 
00046 using namespace std;
00047 
00048 enum Pattern
00049 {
00050   CHESSBOARD, CIRCLES_GRID, ASYMMETRIC_CIRCLES_GRID
00051 };
00052 
00053 typedef std::vector<cv::Point3f> object_pts_t;
00054 typedef std::vector<cv::Point2f> observation_pts_t;
00055 
00056 void convertCVtoEigen(cv::Mat& tvec, cv::Mat& R, Eigen::Vector3f& translation, Eigen::Quaternionf& orientation);
00057 
00058 class PatternDetector
00059 {
00060   public:
00061     PatternDetector() { }
00062   
00063     static object_pts_t calcChessboardCorners(cv::Size boardSize,
00064                                           float squareSize,
00065                                           Pattern patternType = CHESSBOARD,
00066                                           cv::Point3f offset = cv::Point3f());
00067                                           
00068     int detectPattern(cv::Mat& image_in, Eigen::Vector3f& translation, Eigen::Quaternionf& orientation, cv::Mat& image_out);
00069     
00070     void setCameraMatrices(cv::Mat K_, cv::Mat D_);
00071     
00072     void setPattern(cv::Size grid_size_, float square_size_, 
00073           Pattern pattern_type_, cv::Point3f offset_ = cv::Point3f());
00074 
00075   public:
00076     cv::Mat K;
00077     cv::Mat D;
00078     cv::Mat rvec, tvec, R;
00079     
00080     Pattern pattern_type;
00081     cv::Size grid_size;
00082     float square_size;
00083     object_pts_t ideal_points;
00084 };
00085 
00086 #endif