使用opencv3鱼眼模型的圆形鱼眼扭曲

Posted

技术标签:

【中文标题】使用opencv3鱼眼模型的圆形鱼眼扭曲【英文标题】:Circular fisheye distort using opencv3 fisheye model 【发布时间】:2018-03-20 02:00:31 【问题描述】:

我使用 OpenCV fisheye model 函数来执行鱼眼校准工作。我的图像是圆形鱼眼 (example),但我从 OpenCV 鱼眼模型函数中得到了 this result。

我有以下问题:

    我不知道为什么结果是椭圆而不是完美的圆形。这是预期的吗?

    能否针对圆形鱼眼图像校准 OpenCV 鱼眼模型?

    不明白为什么使用 cv::fisheye::calibrate 函数获取 K 中的 Cx Cy 参数时图像不居中?

    棋盘上有哪些提示(图片编号、角度和位置...)可以得到正确的相机矩阵和畸变系数?


预期结果

我的结果

【问题讨论】:

【参考方案1】:

首先 cv::fisheye 使用了一个非常简单的想法。为了消除径向失真,它将从圆心到圆边缘的方向移动鱼眼圆的点。 中心附近的点会移动一点。靠近边缘的点将移动到更大的距离。 换句话说,点移动的距离不是一个常数。这是一个函数 f(x)= 1+K1*x3+K2*x5+K3*x7=K4*x9。 K1-K4是opencv鱼眼不失真模型的径向失真系数。在正常情况下,未失真的图像总是比初始图像大。 如您所见,您的未失真图像小于初始鱼眼图像。我认为问题的根源是校准不当。

【讨论】:

【参考方案2】:
    我不知道为什么结果是椭圆而不是完美的圆形。这是预期的吗?

-> 校准模型的切向参数可以使它看起来像椭圆。可能是您的实际镜头倾斜或校准不正确。只需尝试关闭切向参数选项。

    能否针对圆形鱼眼图像校准 OpenCV 鱼眼模型?

-> 据我所知没问题。也可以试试 ocam。

    我不明白为什么在使用 cv::fisheye::calibrate 函数获取 K 中的 Cx Cy 参数时图像不居中?

-> 光学中心与图像中心不对齐是正常的。然而,这是一个程度的问题。 Cx、Cy代表实际光学中心。低质量的鱼眼相机制造商不控制这个参数的质量。

    可以在棋盘上使用哪些提示(图片编号、角度和位置...)来获取正确的相机矩阵和失真系数?

-> 只有清晰的图像,不同的距离,不同的角度,不同的位置。尽可能多。

【讨论】:

以上是关于使用opencv3鱼眼模型的圆形鱼眼扭曲的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 opencv.omnidir 模块去扭曲鱼眼图像

通过鱼眼扭曲功能扭曲直线并在图像中正确绘制

如何找到未失真的鱼眼图像和正常图像之间的差异?

如何在opencv中对鱼眼图像生成的去扭曲?

整流鱼眼镜头到飞机上

d3.js 地图上的鱼眼失真