OpenCV不仅仅是鱼眼图像的中心部分

时间:2018-02-26 13:52:45

标签: c++ opencv distortion fisheye radial

我正在尝试通过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

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

只有通过使用 投影 而不是尝试取消 才能实现。

此处更多信息OpenCV fisheye calibration cuts too much of the resulting image

示例结果:

enter image description here