opencV计算Undistort的失真系数(Uncalibrated)

时间:2014-05-28 09:24:44

标签: c++ opencv 3d camera-calibration distortion

我是使用2.4.9版本的openCV新手

我正在尝试从一系列图像生成点投影,而不了解相机参数,也没有使用相机进行校准。使用的相机有一个鱼眼镜头。

我使用goodFeaturesToTrack()来检测特征点,然后在openCV中执行LK以跟踪图像序列中的特征点。利用这些点,我成功地从findFundamentalMat()估计了基本矩阵,并实现了stereoRectifyUncalibrated()来生成整流单应矩阵H1和H2。然后我从H计算了旋转矩阵R R = cameraMatrix ^ { - 1} * H * cameraMatrix

现在我需要在整改后不要失真。通过initUndistortRectifyMap()和remap()或直接通过undistort(),但这两个函数也需要“失真系数”来计算校正后的图像。 我试图找到各种方法来估计这些参数,既没有公司提供相机型号的文档,也没有找到任何其他方法,除了使用棋盘或圆网格校准相机。

我该怎么办? 我做得对吗? 还有其他更好的方法吗? 有人可以帮忙吗? 在此先感谢。

//代码

        //Fundamental Matrix
                 Mat fundamental_matrix = findFundamentalMat(points[0], points[1], FM_RANSAC, 3, 0.99);
                 cout<<"F:\n" <<fundamental_matrix<<endl;
         //Rectification Homographies
         Mat H1, H2,F;
         F = fundamental_matrix;
          stereoRectifyUncalibrated(points[0],points[1], F, image.size(), H1, H2, 3);
          cout<<"H1:\n" <<H1<<endl;
          cout<<"H2:\n" <<H2<<endl;
      //calculating Rotation matrix from homographic maps
            Mat fInv= fundamental_matrix.inv();
            R = (fInv)*H1*fundamental_matrix;


           // Mat distCoeffs = Mat::zeros(8, 1, CV_64F);
           initUndistortRectifyMap(fundamental_matrix, distCoeffs, R, fundamental_matrix, image.size() ,CV_32FC1,  map1,  map2);

//如何在没有相机或先验知识的情况下计算distCoeff。谢谢你

0 个答案:

没有答案