我是使用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。谢谢你