【问题标题】:Errors with stereoCalibrate Function in OpenCVOpenCV中stereoCalibrate函数的错误
【发布时间】:2013-10-24 17:23:00
【问题描述】:

我正在尝试校准转换为两个 640x360px mp4 测试文件的松下 z10000 3D 相机的输出。

-我更像是一个设计师而不是一个程序员(我在大学里从来没有任何数学科目) 所以请原谅我的一些愚蠢的错误

我认为我的代码看起来不错,但我在校准过程中没有得到好的结果 stereoCalibrate 的投影误差约为 6-20,但应该是

我想我在 imagePoints 和 objectPoints 上做错了 - 但我想不通。

找到 chessBoardCorners 后,我释放 Videocapture 以在校准后重新加载它

整个程序(重映射、视差图)可以工作,但结果很糟糕。

//Länge des Vektors zuweisen anhand der Bildpunkte
vector<Point3f> obj;
for(int j=0;j < (Chess_X*Chess_Y);j++)
    obj.push_back(Point3f(j/Chess_X, j%Chess_Y, 0.0f));

//Schleife für Frame Wiedergabe
for(int counterLP= 0; Chess_Found< Chess_Count; counterLP++)
{
    //Übertrage Frame auf Matrix
    capRight>>rMat;
    capLeft>>lMat;

    //Prüfe auf Side by Side Video
    if(vid_input==2 || vid_input==3)
    {
        //Übertrage ROI auf Matrix
        lMat= roi( roiLeft);
        rMat= roi( roiRight);
    }

    //Ausgabe
    //cout<<rMat.cols<<"r"<<rMat.rows<<"\n";
    //cout<<lMat.cols<<"l"<<lMat.rows<<"\n";


    //Farben Konvertieren
    cvtColor( lMat, lMat_grey, CV_RGB2GRAY);
    cvtColor( rMat, rMat_grey, CV_RGB2GRAY);

    //Überprüfe jeden fünften Frame
    if(counterLP%5==0)
    {
        //Suche Schachbrettmuster auf Matrix
        successLeft= findChessboardCorners( lMat_grey, Chess_size, cornersLeft, CALIB_CB_ADAPTIVE_THRESH);
        successRight= findChessboardCorners( rMat_grey, Chess_size, cornersRight, CALIB_CB_ADAPTIVE_THRESH);

        //Wenn Schachbrettmuster gefunden wurde
        if( successLeft && successRight)
        {

            //Muster genauer bestimmen
            cornerSubPix( lMat_grey, cornersLeft, Size( 5, 5),Size( -1, -1),TermCriteria( CV_TERMCRIT_ITER + CV_TERMCRIT_EPS, 50, 0.01 ));
            cornerSubPix( rMat_grey, cornersRight, Size( 5, 5),Size( -1, -1),TermCriteria( CV_TERMCRIT_ITER + CV_TERMCRIT_EPS, 50, 0.01 ));

            //Zeichne Schachbrettmuster
            drawChessboardCorners( lMat, Chess_size, Mat(cornersLeft), successLeft);
            drawChessboardCorners( rMat, Chess_size, Mat(cornersRight), successRight);

            //
            imagePointsLeft.push_back(cornersLeft);
            imagePointsRight.push_back(cornersRight);

            objectPoints.push_back(obj);
            cout << "Punkte gespeichert\n";

            //Zeige Farbbild
            imshow( "Left", lMat);
            imshow( "Right", rMat);

            //Erfolgreich
            Chess_Found++;
            //cout<< Chess_Found << " Muster gefunden!\n";

            //Sicherheitsprüfung
            successLeft= false;
            successRight= false;
        }
    }
    else
    {
        //Zeige graues Bild
        imshow( "Left", lMat_grey);
        imshow( "Right", rMat_grey);
    }

    //33ms verzögerung
    if (waitKey(30) >= 0)
        break;
}

//Schließe Streams
capLeft.release();
capRight.release();

//Schließe Fenster
destroyAllWindows();

//Erzeuge identifizierte Kamera Matrix
Mat camMatLeft = Mat::eye(3, 3, CV_64FC1);
Mat camMatRight = Mat::eye(3, 3, CV_64FC1);

//Erzeuge Distranzkoeffizienten
Mat distCoLeft;
Mat distCoRight;

//Erzeuge Rotationsvektor
Mat rvecs;

//Erzeuge Verschiebungsvektor
Mat tvecs;

//Erzeuge Output essential Matrix
Mat essMat;

//Erzeuge Output fundamental Matrix
Mat funMat;

//Starte Kalibrierung
cout << "Starte Kalibrierung\n";



//Kalibrierung
double s = stereoCalibrate(objectPoints, imagePointsLeft, imagePointsRight, camMatLeft, distCoLeft, camMatRight, distCoRight, Size(640,360), rvecs,  tvecs, essMat, funMat, cvTermCriteria(CV_TERMCRIT_ITER+CV_TERMCRIT_EPS, 100, 1e-5),CV_CALIB_FIX_ASPECT_RATIO+CV_CALIB_ZERO_TANGENT_DIST + CV_CALIB_SAME_FOCAL_LENGTH);
cout <<"Fehler: " <<s<<endl;

谢谢

【问题讨论】:

    标签: opencv camera-calibration stereo-3d stereoscopy


    【解决方案1】:

    cornerSubPix() 产生的结果比普通的findChessboardCorners() 更差。尝试不使用它。您应该会在图像窗口中看到找到的角,以及它们与图片的匹配程度。

    除此之外,您的代码看起来还不错。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-26
      • 2016-06-25
      • 2023-03-18
      • 1970-01-01
      • 2012-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多