Subversion Repositories seema-scanner

Rev

Rev 128 | Rev 136 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 128 Rev 134
Line 34... Line 34...
34
//        SMCalibrationSetI.frame0.convertTo(temp, CV_8UC1, 1.0/256.0);
34
//        SMCalibrationSetI.frame0.convertTo(temp, CV_8UC1, 1.0/256.0);
35
        cv::cvtColor(SMCalibrationSetI.frame0, gray, CV_BayerBG2GRAY);
35
        cv::cvtColor(SMCalibrationSetI.frame0, gray, CV_BayerBG2GRAY);
36
        // Extract checker corners
36
        // Extract checker corners
37
        bool success0 = cv::findChessboardCorners(gray, checkerCount, qci0, cv::CALIB_CB_ADAPTIVE_THRESH + cv::CALIB_CB_FAST_CHECK);
37
        bool success0 = cv::findChessboardCorners(gray, checkerCount, qci0, cv::CALIB_CB_ADAPTIVE_THRESH + cv::CALIB_CB_FAST_CHECK);
38
        if(success0){
38
        if(success0){
39
            cv::cornerSubPix(gray, qci0, cv::Size(5, 5), cv::Size(-1, -1),cv::TermCriteria(CV_TERMCRIT_EPS + CV_TERMCRIT_ITER, 20, 0.001));
39
            cv::cornerSubPix(gray, qci0, cv::Size(6, 6), cv::Size(1, 1),cv::TermCriteria(CV_TERMCRIT_EPS + CV_TERMCRIT_ITER, 20, 0.0001));
40
            // Draw colored chessboard
40
            // Draw colored chessboard
41
            cv::Mat color;
41
            cv::Mat color;
42
            cv::cvtColor(SMCalibrationSetI.frame0, color, CV_BayerBG2RGB);
42
            cv::cvtColor(SMCalibrationSetI.frame0, color, CV_BayerBG2RGB);
43
            cvtools::drawChessboardCorners(color, checkerCount, qci0, success0, 10);
43
            cvtools::drawChessboardCorners(color, checkerCount, qci0, success0, 10);
44
            SMCalibrationSetI.frame0Result = color;
44
            SMCalibrationSetI.frame0Result = color;
Line 52... Line 52...
52
//        SMCalibrationSetI.frame1.convertTo(temp, CV_8UC1, 1.0/256.0);
52
//        SMCalibrationSetI.frame1.convertTo(temp, CV_8UC1, 1.0/256.0);
53
        cv::cvtColor(SMCalibrationSetI.frame1, gray, CV_BayerBG2GRAY);
53
        cv::cvtColor(SMCalibrationSetI.frame1, gray, CV_BayerBG2GRAY);
54
        // Extract checker corners
54
        // Extract checker corners
55
        bool success1 = cv::findChessboardCorners(gray, checkerCount, qci1, cv::CALIB_CB_ADAPTIVE_THRESH + cv::CALIB_CB_FAST_CHECK);
55
        bool success1 = cv::findChessboardCorners(gray, checkerCount, qci1, cv::CALIB_CB_ADAPTIVE_THRESH + cv::CALIB_CB_FAST_CHECK);
56
        if(success1){
56
        if(success1){
57
            cv::cornerSubPix(gray, qci1, cv::Size(5, 5), cv::Size(-1, -1),cv::TermCriteria(CV_TERMCRIT_EPS + CV_TERMCRIT_ITER, 20, 0.001));
57
            cv::cornerSubPix(gray, qci1, cv::Size(6, 6), cv::Size(1, 1),cv::TermCriteria(CV_TERMCRIT_EPS + CV_TERMCRIT_ITER, 20, 0.0001));
58
            // Draw colored chessboard
58
            // Draw colored chessboard
59
            cv::Mat color;
59
            cv::Mat color;
60
            cv::cvtColor(SMCalibrationSetI.frame1, color, CV_BayerBG2RGB);
60
            cv::cvtColor(SMCalibrationSetI.frame1, color, CV_BayerBG2RGB);
61
            cvtools::drawChessboardCorners(color, checkerCount, qci1, success1, 10);
61
            cvtools::drawChessboardCorners(color, checkerCount, qci1, success1, 10);
62
            SMCalibrationSetI.frame1Result = color;
62
            SMCalibrationSetI.frame1Result = color;
Line 99... Line 99...
99
    cal.frameWidth = calibrationData[0].frame0.cols;
99
    cal.frameWidth = calibrationData[0].frame0.cols;
100
    cal.frameHeight = calibrationData[0].frame0.rows;
100
    cal.frameHeight = calibrationData[0].frame0.rows;
101
    cv::Size frameSize(cal.frameWidth, cal.frameHeight);
101
    cv::Size frameSize(cal.frameWidth, cal.frameHeight);
102
 
102
 
103
    // determine only k1, k2 for lens distortion
103
    // determine only k1, k2 for lens distortion
104
    int flags = cv::CALIB_FIX_ASPECT_RATIO + cv::CALIB_FIX_K3;
104
    int flags = cv::CALIB_FIX_K3 + cv::CALIB_ZERO_TANGENT_DIST + cv::CALIB_FIX_PRINCIPAL_POINT + cv::CALIB_FIX_ASPECT_RATIO;
105
    // Note: several of the output arguments below must be cv::Mat, otherwise segfault
105
    // Note: several of the output arguments below must be cv::Mat, otherwise segfault
106
    std::vector<cv::Mat> cam_rvecs0, cam_tvecs0;
106
    std::vector<cv::Mat> cam_rvecs0, cam_tvecs0;
107
    cal.cam0_error = cv::calibrateCamera(Q, qc0, frameSize, cal.K0, cal.k0, cam_rvecs0, cam_tvecs0, flags);
107
    cal.cam0_error = cv::calibrateCamera(Q, qc0, frameSize, cal.K0, cal.k0, cam_rvecs0, cam_tvecs0, flags,
108
 
-
 
-
 
108
                                         cv::TermCriteria(cv::TermCriteria::COUNT+cv::TermCriteria::EPS, 100, DBL_EPSILON));
-
 
109
//std::cout << cal.k0 << std::endl;
109
//    // refine extrinsics for camera 0
110
//    // refine extrinsics for camera 0
110
//    for(int i=0; i<Q.size(); i++)
111
//    for(int i=0; i<Q.size(); i++)
111
//        cv::solvePnPRansac(Q[i], qc0[i], cal.K0, cal.k0, cam_rvecs0[i], cam_tvecs0[i], true, 100, 0.05, 100, cv::noArray(), CV_ITERATIVE);
112
//        cv::solvePnPRansac(Q[i], qc0[i], cal.K0, cal.k0, cam_rvecs0[i], cam_tvecs0[i], true, 100, 0.05, 100, cv::noArray(), CV_ITERATIVE);
112
 
113
 
113
    std::vector<cv::Mat> cam_rvecs1, cam_tvecs1;
114
    std::vector<cv::Mat> cam_rvecs1, cam_tvecs1;
114
    cal.cam1_error = cv::calibrateCamera(Q, qc1, frameSize, cal.K1, cal.k1, cam_rvecs1, cam_tvecs1, flags);
115
    cal.cam1_error = cv::calibrateCamera(Q, qc1, frameSize, cal.K1, cal.k1, cam_rvecs1, cam_tvecs1, flags,
115
 
-
 
-
 
116
                                         cv::TermCriteria(cv::TermCriteria::COUNT+cv::TermCriteria::EPS, 100, DBL_EPSILON));
-
 
117
//std::cout << cal.k1 << std::endl;
116
    // stereo calibration
118
    // stereo calibration
117
    int flags_stereo = cv::CALIB_FIX_INTRINSIC;
119
    int flags_stereo = cv::CALIB_FIX_INTRINSIC;// + cv::CALIB_FIX_K3 + cv::CALIB_ZERO_TANGENT_DIST + cv::CALIB_FIX_PRINCIPAL_POINT + cv::CALIB_FIX_ASPECT_RATIO;
118
    cv::Mat E, F, R1, T1;
120
    cv::Mat E, F, R1, T1;
119
    cal.stereo_error = cv::stereoCalibrate(Q, qc0, qc1, cal.K0, cal.k0, cal.K1, cal.k1,
121
    cal.stereo_error = cv::stereoCalibrate(Q, qc0, qc1, cal.K0, cal.k0, cal.K1, cal.k1,
120
                                              frameSize, R1, T1, E, F,
122
                                              frameSize, R1, T1, E, F,
121
                                              cv::TermCriteria(cv::TermCriteria::COUNT + cv::TermCriteria::EPS, 100, DBL_EPSILON),
123
                                              cv::TermCriteria(cv::TermCriteria::COUNT + cv::TermCriteria::EPS, 200, DBL_EPSILON),
122
                                              flags_stereo);
124
                                              flags_stereo);
123
 
125
 
124
    cal.R1 = R1;
126
    cal.R1 = R1;
125
    cal.T1 = T1;
127
    cal.T1 = T1;
126
    cal.E = E;
128
    cal.E = E;