OpenCV中的鱼眼/广角镜头校准

时间:2012-10-22 14:26:11

标签: opencv camera-calibration distortion calibration

我知道默认的OpenCV校准系统是Pinhole相机的模型,但我正在使用一个使用极宽FOV镜头(187度)的系统。如果有任何现有方法在OpenCV中执行此操作,或仅使用宽镜头?或者我是否必须为我的系统重写所有校准/不分类?

4 个答案:

答案 0 :(得分:9)

似乎没有好的OpenCV方法来做到这一点。

我最后使用OCamLib进行实际校准,然后编写我自己的“undistortPoints”功能(使用Scaramuzza的算法)将2D图像点无效地转换为3D单位矢量(而不是2D点)。不幸的是,这也破坏了OpenCV中的许多其他东西,因为大多数OpenCV图像处理功能都需要2D点和它们自己的针孔校准模型,所以我不得不为此重建代码的重要部分。

我欢迎任何其他见解。

答案 1 :(得分:2)

人们有充分的理由不使用广角镜头 - 当图像不失真时,产生的图像非常不矩形,边缘质量太差,需要将图像裁剪回来... 90°FOV。所以问题是,为什么不首先使用90度FOV镜头呢?立体相机和图像校正的情况更糟。

如果你真的需要使用多个摄像头或旋转摄像头。以下是一些示例:PointGrey Inc.

答案 2 :(得分:2)

为了使用极宽的FOV镜头校准相机,您可以使用Omnidirectional Camera module中的OpenCV Contrib。 重要的是要注意你必须使用OpenCV contrib重建你的OpenCV才能使用它。

答案 3 :(得分:0)

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