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


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


6867
2017-10-22 14:26


起源

你试过opencv的功能吗?他们为针孔摄像机建模的事实意味着他们模拟针孔摄像机的扭曲,未失真的摄像机是针孔摄像机。我相信opencv可以校正径向和切向失真,你有其他类型的失真来纠正吗? - Hammer
我有,他们似乎几乎工作,但一些假设不准确。例如,我可以直接看到自己使用187度相机,因此计算2D-> 3D变换变得更加困难,因为点可以在前面的完整180度区域中,并且与观察方向完全正交。 - Yeraze


答案:


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

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

我欢迎任何其他见解。


9
2017-10-25 13:27



如果你让它发挥作用,你会介意发布/分享你的代码吗? - nbubis
是的,这听起来很有趣。不介意看代码。感谢参考Scaramuzza的算法。 - Eduard Feicho


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

如果你真的需要宽视野使用几个摄像头或旋转摄像头。这里有些例子: PointGrey Inc.


2
2018-02-22 07:52





为了使用极宽的FOV镜头校准相机,您可以使用 全方位相机模块 从 OpenCV Contrib。 重要的是要注意,您必须使用OpenCV contrib重建您的OpenCV才能使用它。


2
2018-06-09 20:03





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


0
2018-03-07 07:15