使用Opencv进行广角镜头校准

时间:2013-11-21 13:13:05

标签: opencv camera computer-vision camera-calibration calibration

我正在使用广角镜头(178º对角线FOV),我正在尝试使用Opencv校准模块正确校准它。所有的检测和校准过程都运行良好,但效果很差。

我尝试了很多不同的配置:

  • 不同的图像集
  • 不同的径向系数:2,3,4,5甚至6.(CV_CALIB_FIX_K1,...,CV_CALIB_FIX_K6)
  • 将主点和切向失真固定为0(CV_CALIB_FIX_ASPECT_RATIO,CV_CALIB_FIX_PRINCIPAL_POINT)
  • 使用预期焦距作为初始相机矩阵。 (CV_CALIB_USE_INTRINSIC_GUESS)

我能得到的最好的东西是:Bad calibration

关于如何获得良好校准的任何想法? 您是否认为同时使用两种校准模式,或使用圆形网格作为校准模式会有所帮助?

我在opencv 3.0中看到过添加了薄棱镜系数。我没试过,但我认为不会有所作为,对吧?编辑:选中它......没什么

6 个答案:

答案 0 :(得分:3)

OpenCV的相机/镜头型号可能无法准确描述您的超广角镜头。因此,您可能不得不放弃内置的OpenCV校准程序并编写自己的校准程序。

例如,谷歌搜索给了我:

Kanatani, K., "Calibration of Ultrawide Fisheye Lens Cameras by Eigenvalue Minimization," Pattern Analysis and Machine Intelligence, IEEE Transactions on , vol.35, no.4, pp.813,822, April 2013

  

摘要:我们提出了一种校准超宽鱼眼的新技术   镜头相机通过施加共线点的约束   整流为共线,平行线平行,和   正交线是正交的。利用线的事实   拟合减少到3D中的特征值问题,我们做得很严谨   扰动分析以获得实际的校准程序。   做实验,我们指出如果存在虚假解决方案   单独使用共线性和并行性。我们的技术有很多   理想的属性。例如,不需要度量信息   关于参考图案或相机位置,并分开   条纹图案可以显示在视频屏幕上以生成   虚拟网格,消除网格点提取处理。

答案 1 :(得分:3)

鱼眼镜头有不同的失真模型。要校准鱼眼摄像机,请使用opencv鱼眼模块。请参阅opnecv docs

答案 2 :(得分:2)

您确定使用CV_CALIB_RATIONAL_MODEL标志吗?这将告诉OpenCV使用支持更广角镜头的模型。

对于150度镜头,这是my suggestions。您也可以考虑尝试April Cal我已经运气不错了。

答案 3 :(得分:1)

我对鱼眼镜头没有任何经验,但如果您计划将图像映射到透视投影,则会遇到麻烦。图像的大视角部分将映射到图像平面上的非常远的距离。这可能会导致像您提供的图像一样。肯定存在一些错误,但似乎大多数直线“世界线”都映射到直线“图像线”。

您对结果的期望是什么以及您计划使用此校准的目的是什么?

答案 4 :(得分:1)

自Opencv 2.4.10及更高版本开始,广角/鱼眼镜头就有一个特殊的失真模型能够处理这种强烈的径向失真。我已经使用我的数据集进行了测试,结果非常好。

答案 5 :(得分:0)

OpenCV 2.4.10及以上版本配有鱼眼摄像机校准模块。但是这个模块使用了一种基于针孔相机模型的方法。在这个模型中,我们在摄像机的光轴和摄像机前面的某个物体的光线之间有一个角度。我们还有一个光轴和方向之间的角度指向未失真的图像(对应于对象)。如果正确执行校准,这两个角度将相等。这意味着如果您的相机的FOV大约为180度,则从未失真图像中心到未失真图像边缘的距离将等于无穷大。因此,OpenCV鱼眼校正模块(cv :: fisheye)不仅仅是图像的中心部分。在我自己的结果中,我在未失真的图像中得到了140-150度的视野。我放置HERE的更详细解释。如果FOV大约140-150度适合你,你可以使用cv :: fisheye而不做任何修改