奇怪的转换图像整流Opencv

时间:2013-07-22 17:48:40

标签: c++ opencv matrix

我需要使用部分校准相机的图像校正,也就是说,只有内部参数是已知的。 首先,我匹配一些关键点并使用findFundamentalMat(...)。 这是我到目前为止的结果,似乎没问题?

Keypoints looking fine

我得到的平均误差是:274.326(看起来很多?) 我用来计算这个值的代码如下:

vector<Point3f> linesL;
vector<Point3f> linesR;
computeCorrespondEpilines(pL, 1, f, linesL);
computeCorrespondEpilines(pR, 2, f, linesR);
double avgErr = 0;

for(int i = 0; i < linesL.size(); i++ ) {

    double err = fabs(pL[i].x*linesR[i].x +
    pL[i].y*linesR[i].y + linesR[i].z) +
    fabs(pR[i].x*linesL[i].x +
    pR[i].y*linesL[i].y + linesL[i].z);
    if(err != err)
        cout << "nan" << endl;
    cout << err << endl;
    avgErr += err;
}
cout << "avg err = " << avgErr/linesL.size() << endl;

这是同质坐标的简单距离公式,对吗? 然后我基本上这样做了:

Mat h1, h2;
Mat w;
stereoRectifyUncalibrated(pL, pR, f, imgL.size(), h1, h2);
warpPerspective(imgL, w, h1, imgL.size());

但是当试图显示图像时,它看起来像这样: wrongful transformation

所以我的问题是:我做错了什么?另外我知道ransac是不确定的,但是我的平均误差有时大约是前面提到的270,但有时它会达到3.79508e + 19等等。

PS:pL和pR,是使用来自f的掩码过滤的匹配点,阈值是3.我知道这里有关于主题的一些线程,我也按照那里给出的指示,我的问题只是在当前的情况下找到问题的根源。

0 个答案:

没有答案