cisst-saw
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
svlCCCalibrationGrid.h
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /* ex: set filetype=cpp softtabstop=4 shiftwidth=4 tabstop=4 cindent expandtab: */
3 
4 /*
5 
6  Author(s): Wen P. Liu
7  Created on: 2011
8 
9  (C) Copyright 2006-2007 Johns Hopkins University (JHU), All Rights
10  Reserved.
11 
12 --- begin cisst license - do not edit ---
13 
14 This software is provided "as is" under an open source license, with
15 no warranty. The complete license can be found in license.txt and
16 http://www.cisst.org/cisst/license.txt.
17 
18 --- end cisst license ---
19 */
20 #ifndef _svlCCCalibrationGrid_h
21 #define _svlCCCalibrationGrid_h
22 
23 #include <math.h>
24 #include <iostream>
25 #include <limits>
29 
30 // Always include last!
32 
34 {
35 public:
36  svlCCCalibrationGrid(IplImage* iplImage, cv::Size boardSize, float size);
37  void correlate(svlCCOriginDetector* originDetector, svlCCCornerDetector* cornerDetector);
38  double refine(const cv::Mat& localRvec, const cv::Mat& localTvec, const cv::Mat& localCameraMatrix, const cv::Mat& localDistCoeffs, float threshold, bool runHomography);
39  std::vector<cv::Point2f> getGoodImagePoints();
40  std::vector<cv::Point3f> getGoodCalibrationGridPoints3D();
41  std::vector<cv::Point2f> getGoodProjectedImagePoints();
42  void optimizeCalibration();
43  void setGroundTruthTransformation(CvMat* groundTruthCameraTransformation);
44  void compareGroundTruth();
47 
49  cv::Point2f** calibrationGridPoints;
50  cv::Point2f** imagePoints;
51  bool** visibility;
52  float gridSize;
53  cv::Size boardSize;
55  std::vector<cv::Point2f> groundTruthImagePoints;
56  std::vector<cv::Point3f> groundTruthCalibrationGridPoints;
61  CvMat* worldToTCP;
66  bool valid;
71 
72 private:
73  int findGridPointIndex(cv::Point3f point);
74  void create2DChessboardCorners(bool visible);
75  void homographyCorrelation(float threshold);
76  int applyHomography(double homography[], float threshold);
77  bool updateHomography(float threshold);
78  float distanceBetweenTwoPoints ( float x1, float y1, float x2, float y2);
79  cv::Point2f extrapolateFromTwoPoints(float x1, float y1, float x2, float y2);
80  cv::Point2f midPointBetweenTwoPoints(float x1, float y1, float x2, float y2);
81  void findInitialCornerHelper(CvMat* coordsSrc, CvMat* coordsDst, bool initial);
82  void findInitialCorners(CvMat* coordsSrc, CvMat* coordsDst);
83  float nearestCorner(cv::Point2f targetPoint, cv::Point2f* corner, float distanceThreshold);
84  std::vector<cv::Point3f> getAllCalibrationGridPoints3D();
85  double runCalibration();
86  bool isHighDefinition();
87 
89  bool debug;
90  cv::Point2f calibrationGridOrigin;
91  cv::Point2f imageOrigin;
92  int homographyInlierLevel;
93  CvMat* calibrationGridColorBlobs;
94  CvMat* imageColorBlobs;
95  std::vector<cv::Point2f> corners;
96  IplImage* iplImage;
97  std::vector<cv::Point2f> colorBlobsFromDetector;
98  cv::Point2f originFromDetector;
99  double calibrationError;
100  std::vector<cv::Point2f> projectedImagePoints;
101  double projectedImagePointsCalibrationError;
102  int originColorModeFlag;
103 
104 };
105 
106 #endif
int minGridPoints
Definition: svlCCCalibrationGrid.h:70
void setGroundTruthTransformation(CvMat *groundTruthCameraTransformation)
bool ** visibility
Definition: svlCCCalibrationGrid.h:51
CvMat * groundTruthRmatrix
Definition: svlCCCalibrationGrid.h:59
float gridSizePixel
Definition: svlCCCalibrationGrid.h:54
float gridSize
Definition: svlCCCalibrationGrid.h:52
cv::Mat tvec
Definition: svlCCCalibrationGrid.h:64
std::vector< cv::Point2f > groundTruthImagePoints
Definition: svlCCCalibrationGrid.h:55
svlSampleCameraGeometry * GetCameraGeometry()
std::vector< cv::Point2f > getGoodProjectedImagePoints()
cv::Size boardSize
Definition: svlCCCalibrationGrid.h:53
double refine(const cv::Mat &localRvec, const cv::Mat &localTvec, const cv::Mat &localCameraMatrix, const cv::Mat &localDistCoeffs, float threshold, bool runHomography)
bool hasTracking
Definition: svlCCCalibrationGrid.h:68
std::vector< cv::Point2f > getGoodImagePoints()
svlCCCalibrationGrid(IplImage *iplImage, cv::Size boardSize, float size)
void IplImage
Definition: svlTypes.h:70
cv::Point2f ** calibrationGridPoints
Definition: svlCCCalibrationGrid.h:49
std::vector< cv::Point3f > getGoodCalibrationGridPoints3D()
cv::Mat groundTruthTvec
Definition: svlCCCalibrationGrid.h:60
CvMat * worldToTCP
Definition: svlCCCalibrationGrid.h:61
Definition: svlCCOriginDetector.h:27
Definition: svlCCCalibrationGrid.h:33
cv::Point2f ** imagePoints
Definition: svlCCCalibrationGrid.h:50
void correlate(svlCCOriginDetector *originDetector, svlCCCornerDetector *cornerDetector)
Macros to export the symbols of cisstStereoVision (in a Dll).
cv::Mat groundTruthRvec
Definition: svlCCCalibrationGrid.h:58
cv::Mat distCoeffs
Definition: svlCCCalibrationGrid.h:62
cv::Mat rmatrix
Definition: svlCCCalibrationGrid.h:65
void printCalibrationParameters()
std::string Mat
Definition: svlTypes.h:72
bool valid
Definition: svlCCCalibrationGrid.h:66
cv::Mat cameraMatrix
Definition: svlCCCalibrationGrid.h:57
Definition: svlCCCornerDetector.h:27
cv::Mat rvec
Definition: svlCCCalibrationGrid.h:63
bool validGroundTruth
Definition: svlCCCalibrationGrid.h:67
Definition: svlSampleCameraGeometry.h:34
float refineThreshold
Definition: svlCCCalibrationGrid.h:69
std::vector< cv::Point3f > groundTruthCalibrationGridPoints
Definition: svlCCCalibrationGrid.h:56