3

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

据你所见,这些结果与我的结果非常相似。有没有人有这个问题的解决方案?

4

2 回答 2

3

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

于 2018-03-12T07:53:19.840 回答
1

它可以实现,只是使用投影而不是试图不扭曲它。

更多信息在这里OpenCV 鱼眼校准削减了太多的结果图像

示例结果:

在此处输入图像描述

于 2018-11-27T13:02:21.603 回答