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, float squareSize, Pattern patternType = CHESSBOARD,
00064                                             cv::Point3f offset = cv::Point3f());
00065 
00066   int detectPattern(cv::Mat& image_in, Eigen::Vector3f& translation, Eigen::Quaternionf& orientation,
00067                     cv::Mat& image_out);
00068 
00069   void setCameraMatrices(cv::Matx33d K_, cv::Mat D_);
00070 
00071   void setPattern(cv::Size grid_size_, float square_size_, Pattern pattern_type_, cv::Point3f offset_ = cv::Point3f());
00072 
00073 public:
00074   cv::Matx33d K;
00075   cv::Mat D;
00076   cv::Mat rvec, tvec, R;
00077 
00078   Pattern pattern_type;
00079   cv::Size grid_size;
00080   float square_size;
00081   object_pts_t ideal_points;
00082 };
00083 
00084 #endif