Subversion Repositories seema-scanner

Rev

Rev 134 | Rev 137 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 134 Rev 136
Line 27... Line 27...
27
        if(!SMCalibrationSetI.checked)
27
        if(!SMCalibrationSetI.checked)
28
            continue;
28
            continue;
29
 
29
 
30
        // Camera 0
30
        // Camera 0
31
        std::vector<cv::Point2f> qci0;
31
        std::vector<cv::Point2f> qci0;
-
 
32
 
32
        // Convert bayer to grayscale
33
        // Convert to grayscale
33
        cv::Mat gray;
34
        cv::Mat gray;
34
//        SMCalibrationSetI.frame0.convertTo(temp, CV_8UC1, 1.0/256.0);
35
        if(SMCalibrationSetI.frame0.channels() == 1)
35
        cv::cvtColor(SMCalibrationSetI.frame0, gray, CV_BayerBG2GRAY);
36
            cv::cvtColor(SMCalibrationSetI.frame0, gray, CV_BayerBG2GRAY);
-
 
37
        else
-
 
38
            cv::cvtColor(SMCalibrationSetI.frame0, gray, CV_RGB2GRAY);
-
 
39
 
36
        // Extract checker corners
40
        // Extract checker corners
37
        bool success0 = cv::findChessboardCorners(gray, checkerCount, qci0, cv::CALIB_CB_ADAPTIVE_THRESH + cv::CALIB_CB_FAST_CHECK);
41
        bool success0 = cv::findChessboardCorners(gray, checkerCount, qci0, cv::CALIB_CB_ADAPTIVE_THRESH + cv::CALIB_CB_FAST_CHECK);
38
        if(success0){
42
        if(success0){
39
            cv::cornerSubPix(gray, qci0, cv::Size(6, 6), cv::Size(1, 1),cv::TermCriteria(CV_TERMCRIT_EPS + CV_TERMCRIT_ITER, 20, 0.0001));
43
            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
44
            // Draw colored chessboard
41
            cv::Mat color;
45
            cv::Mat color;
-
 
46
            if(SMCalibrationSetI.frame0.channels() == 1)
42
            cv::cvtColor(SMCalibrationSetI.frame0, color, CV_BayerBG2RGB);
47
                cv::cvtColor(SMCalibrationSetI.frame0, color, CV_BayerBG2RGB);
-
 
48
            else
-
 
49
                color = SMCalibrationSetI.frame0.clone();
-
 
50
 
43
            cvtools::drawChessboardCorners(color, checkerCount, qci0, success0, 10);
51
            cvtools::drawChessboardCorners(color, checkerCount, qci0, success0, 10);
44
            SMCalibrationSetI.frame0Result = color;
52
            SMCalibrationSetI.frame0Result = color;
45
        }
53
        }
46
 
54
 
47
        emit newFrameResult(i, 0, success0, SMCalibrationSetI.frame0Result);
55
        emit newFrameResult(i, 0, success0, SMCalibrationSetI.frame0Result);
48
 
56
 
49
        // Camera 1
57
        // Camera 1
50
        std::vector<cv::Point2f> qci1;
58
        std::vector<cv::Point2f> qci1;
-
 
59
 
51
        // Convert bayer to grayscale
60
        // Convert to grayscale
52
//        SMCalibrationSetI.frame1.convertTo(temp, CV_8UC1, 1.0/256.0);
61
        if(SMCalibrationSetI.frame1.channels() == 1)
53
        cv::cvtColor(SMCalibrationSetI.frame1, gray, CV_BayerBG2GRAY);
62
            cv::cvtColor(SMCalibrationSetI.frame1, gray, CV_BayerBG2GRAY);
-
 
63
        else
-
 
64
            cv::cvtColor(SMCalibrationSetI.frame1, gray, CV_RGB2GRAY);
-
 
65
 
54
        // Extract checker corners
66
        // Extract checker corners
55
        bool success1 = cv::findChessboardCorners(gray, checkerCount, qci1, cv::CALIB_CB_ADAPTIVE_THRESH + cv::CALIB_CB_FAST_CHECK);
67
        bool success1 = cv::findChessboardCorners(gray, checkerCount, qci1, cv::CALIB_CB_ADAPTIVE_THRESH + cv::CALIB_CB_FAST_CHECK);
56
        if(success1){
68
        if(success1){
57
            cv::cornerSubPix(gray, qci1, cv::Size(6, 6), cv::Size(1, 1),cv::TermCriteria(CV_TERMCRIT_EPS + CV_TERMCRIT_ITER, 20, 0.0001));
69
            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
70
            // Draw colored chessboard
59
            cv::Mat color;
71
            cv::Mat color;
-
 
72
            if(SMCalibrationSetI.frame1.channels() == 1)
60
            cv::cvtColor(SMCalibrationSetI.frame1, color, CV_BayerBG2RGB);
73
                cv::cvtColor(SMCalibrationSetI.frame1, color, CV_BayerBG2RGB);
-
 
74
            else
-
 
75
                color = SMCalibrationSetI.frame1.clone();
-
 
76
 
61
            cvtools::drawChessboardCorners(color, checkerCount, qci1, success1, 10);
77
            cvtools::drawChessboardCorners(color, checkerCount, qci1, success1, 10);
62
            SMCalibrationSetI.frame1Result = color;
78
            SMCalibrationSetI.frame1Result = color;
63
        }
79
        }
64
 
80
 
65
        emit newFrameResult(i, 1, success1, SMCalibrationSetI.frame1Result);
81
        emit newFrameResult(i, 1, success1, SMCalibrationSetI.frame1Result);
Line 114... Line 130...
114
    std::vector<cv::Mat> cam_rvecs1, cam_tvecs1;
130
    std::vector<cv::Mat> cam_rvecs1, cam_tvecs1;
115
    cal.cam1_error = cv::calibrateCamera(Q, qc1, frameSize, cal.K1, cal.k1, cam_rvecs1, cam_tvecs1, flags,
131
    cal.cam1_error = cv::calibrateCamera(Q, qc1, frameSize, cal.K1, cal.k1, cam_rvecs1, cam_tvecs1, flags,
116
                                         cv::TermCriteria(cv::TermCriteria::COUNT+cv::TermCriteria::EPS, 100, DBL_EPSILON));
132
                                         cv::TermCriteria(cv::TermCriteria::COUNT+cv::TermCriteria::EPS, 100, DBL_EPSILON));
117
//std::cout << cal.k1 << std::endl;
133
//std::cout << cal.k1 << std::endl;
118
    // stereo calibration
134
    // stereo calibration
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;
135
    int flags_stereo = cv::CALIB_FIX_INTRINSIC;// + cv::CALIB_FIX_K2 + cv::CALIB_FIX_K3 + cv::CALIB_ZERO_TANGENT_DIST + cv::CALIB_FIX_PRINCIPAL_POINT + cv::CALIB_FIX_ASPECT_RATIO;
120
    cv::Mat E, F, R1, T1;
136
    cv::Mat E, F, R1, T1;
121
    cal.stereo_error = cv::stereoCalibrate(Q, qc0, qc1, cal.K0, cal.k0, cal.K1, cal.k1,
137
    cal.stereo_error = cv::stereoCalibrate(Q, qc0, qc1, cal.K0, cal.k0, cal.K1, cal.k1,
122
                                              frameSize, R1, T1, E, F,
138
                                              frameSize, R1, T1, E, F,
123
                                              cv::TermCriteria(cv::TermCriteria::COUNT + cv::TermCriteria::EPS, 200, DBL_EPSILON),
139
                                              cv::TermCriteria(cv::TermCriteria::COUNT + cv::TermCriteria::EPS, 200, DBL_EPSILON),
124
                                              flags_stereo);
140
                                              flags_stereo);