【问题标题】:OpenCV undistorts only a central part of fisheye imageOpenCV 仅不扭曲鱼眼图像的中心部分
【发布时间】:2018-08-06 00:08:21
【问题描述】:

我正在尝试通过 OpenCV 3.4.0(C++,MS Windows)执行鱼眼相机校准。

我使用 cv::fisheye::calibrate 来制作 K 和 D(相机矩阵和径向畸变系数矩阵)。然后我使用 cv::fisheye::initUndistortRectifyMap 为 X 和 Y 坐标生成地图。 最后,我使用 cv::remap 通过来自 initUndistortRectifyMap 的地图来消除鱼眼相机的图像失真。 一切看起来都不错,但 OpenCV 只扭曲了鱼眼图像的中心部分。 边缘移到外面。 我想扭曲整个图像。 我尝试手动更改 K 矩阵中的焦距,并得到不失真的边缘,但它们变得非常模糊。 我在这个任务中找到了一些结果。例如

https://www.youtube.com/watch?v=Ll8KCnCw4iU

和

https://www.youtube.com/watch?v=p1kCR1i2nF0

据您所知,这些结果与我的结果非常相似。 有人有解决这个问题的办法吗?

【问题讨论】:

  • 您可能想要分享 K 和 D 矩阵、您用来解包的代码以及您得到的结果。它将帮助我们定义问题

标签: c++ opencv distortion fisheye radial


【解决方案1】:

在过去的两周里,我分析了很多论文。我想我找到了问题的根源。 OpenCV 3.4.0 鱼眼不失真方法基于针孔相机模型。我们在相机的光轴和来自某个物体的光线之间有一个角度。我们在这个物体的未失真点的方向和相机光轴之间也有一个角度。如果鱼眼图像未正确失真,则这两个角度将相等。我的鱼眼相机的 FOV 是 180 度。这意味着从未失真图像中心到未失真图像边缘对应的点的距离等于无穷大。 换句话说,如果我们有一个 FOV 约为 180 度的鱼眼相机,那么 100% 的鱼眼图像表面的无失真(通过 OpenCV)是不可能的。

【讨论】:

  • 你能链接一些你读过的关于这个主题的论文吗?谢谢
【解决方案2】:

可以实现,只是使用投影而不是尝试不失真它。

更多信息在这里OpenCV fisheye calibration cuts too much of the resulting image

示例结果:

【讨论】:

  • 我们谈论的是完全不同的任务。我的任务的主要目标是“直线应该是直线”。您校正后的图像根本没有任何直线
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-14
  • 1970-01-01
  • 1970-01-01
  • 2017-02-12
  • 1970-01-01
  • 2017-02-22
相关资源
最近更新 更多