【问题标题】:Wide angle lenses calibration with Opencv使用 Opencv 进行广角镜头校准
【发布时间】:2013-12-05 23:34:45
【问题描述】:

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

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

  • 不同的图像集
  • 不同的径向系数数: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)

我能得到的最好的是:

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

我在 opencv 3.0 中看到添加了薄棱镜系数。我还没有尝试过,但我认为不会有什么不同,对吧?编辑:检查过...什么都没有

【问题讨论】:

  • 您是否获得了校准目标位于视场边界(左上、右上等)的图像?
  • 是的,我做到了。实际上,我周围有很多带有棋盘的图像...您可以检查我在这里使用的数据集之一:[dl.dropboxusercontent.com/u/31166777/images.rar]

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


【解决方案1】:

鱼眼镜头有不同的失真建模。要校准鱼眼相机,请使用 opencv 鱼眼模块。见opnecv docs

【讨论】:

    【解决方案2】:

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

    这里是 my suggestions 用于 150 度镜头。你也可以考虑试试April Cal,我运气不错。

    【讨论】:

      【解决方案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 中的特征值问题,我们做一个严格的 扰动分析以获得实用的校准程序。 做实验,我们指出如果存在虚假解 仅强加了共线性和并行性。我们的技术有很多 理想的属性。例如,不需要度量信息 关于参考图案或相机位置,并分开 条纹图案可以显示在视频屏幕上以生成 虚拟网格,省去网格点提取处理。

      【讨论】:

        【解决方案4】:

        我对鱼眼镜头没有任何经验,但如果你打算将图像映射到透视投影,你会遇到麻烦。图像的大视角部分将映射到图像平面上很远的距离。这实际上可能会产生与您提供的图像类似的图像。肯定有一些错误,但似乎大多数笔直的“世界线”映射到笔直的“图像线”。

        您对结果的确切期望是什么?您打算将此校准用于什么目的?

        【讨论】:

          【解决方案5】:

          自 Opencv 2.4.10 及更高版本以来,广角/鱼眼镜头的特定畸变模型能够处理这种强烈的径向畸变。我已经用我的数据集进行了测试,结果非常好。

          【讨论】:

          • 鱼眼镜头的opencv模型就是基于这项工作。 Juho Kannala 和 Sami S. Brandt 的传统、广角和鱼眼镜头的通用相机模型和校准方法
          【解决方案6】:

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

          【讨论】:

          • 我用鱼眼模型校准了190度的相机,效果不错。问题是,当您拥有如此宽的视野时,您无法将图像重新映射到针孔相机,您需要使用另一个模型来投影这些点。例如,查看 equirectangular 或立体投影。
          • 感谢您的回复!据我所知,立体投影是一种将球体投影到平面的方法。但我的输入数据是来自鱼眼相机的平面图像。但是我很高兴遇到一个使用 180+ FOV 相机取得好成绩的人。我真正的任务是通过物理鱼眼相机的数据实现虚拟云台变焦(PTZ)相机。请看我的另一个问题,我把它放在HERE
          猜你喜欢
          • 2012-10-12
          • 2015-01-03
          • 2023-03-15
          • 2013-02-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-11-24
          • 2015-11-11
          相关资源
          最近更新 更多