我必须使用鱼眼镜头校准我的相机。
首先,我使用带有标志CV_CALIB_RATIONAL_MODEL的OpenCv 2.4来获得更好的结果,但这还不够。 之后,我看到OpenCv 3.0具有用于校准的鱼眼功能。
我计算我的objectPoints并使用findChessboardCorners()获取我的imagePoints,它们似乎是正确的。
我的问题在于, fisheye :: calibrate 。 我的返回值,如重投影误差,内部矩阵和失真系数是错误的。它们是-nan值。
有谁知道我做错了什么?
由于
答案 0 :(得分:3)
对于新的OpenCV 3.0鱼眼功能,我发现除非指定cv::fisheye::CALIB_RECOMPUTE_EXTRINSIC
标志(例如38像素重投影错误),否则我没有获得可用的内在校准。另外,我指的是cv::fisheye::CALIB_FIX_SKEW
。当然,您应该尽可能多地指定cv::fisheye::CALIB_FIX_Kx
个标志。
对于我的镜头,这是一个非常简单的微型镜头,但具有很大的径向畸变,正常的OpenCV整流功能无法产生精确的整流。通过上述标志并修复K2=K3=K4=0
,我得到了很好的结果。