鱼眼镜头的标定及矫正

来源:互联网 发布:jqueryrotate.js教程 编辑:程序博客网 时间:2024/05/01 03:55

OCamCalib: Omnidirectional Camera Calibration Toolbox for Matlab
  本文主要目的是为分享来自苏黎世大学Davide ScaramuzzaOCamCalib全视角相机模型标定矫正算法。作者主页 因为是被墙了,所以我分享出来以供参考。先上结果图:

这里写图片描述

这里写图片描述

可以看出,效果是相当不错的,所以这也是我强烈分享给大家的原因之一。

环境
1. MATLAB2015R标定鱼眼镜头
2. Ubuntu14.04 + OpenCV2.4.11根据标定结果对鱼眼镜头矫正


资源
1. C++鱼眼矫正程序

预备工作
1. 将OCamCalib工具箱添加到Matlab里面,这个方法如果不懂,百度挺多的,这里就不赘述了。
2. 在使用前跟一般的相机矫正方法类似,先拍大约二十张棋盘格,注意每张图必须要拍满所有的角点!一般的原则是,尽可能让每个区域都有棋盘格分布。
3. 将拍好的照片放到工具箱对应的目录下(这里也可以不用如此,只是本人习惯而已)


具体操作步骤

  • 将拍摄好的棋盘格照片放到OCamCalib工具箱目录下

  • 将上述链接地址的工具箱下载本地添加到Matlab工具箱地址,然后运行ocam_calib
    这里写图片描述

  • 加载图片,选择Read names

    1. Basename camera calibration images (without number nor suffix):
      输入你照片的共同的前缀部分

    2. Image format: ([]='r'='ras', 'b'='bmp', 't'='tif', 'g'='gif', 'p'='pgm', 'j'='jpg', 'm'='ppm') >> g
      输入你格式对应的字母,然后就加载好图片了。
      Loading image 1...2...3...4...5...6...7...8...9...10...done
      然后,会显示总共加载到的所有图片
      这里写图片描述

    3. 接下来Extract grid cornes,提取角点。根据提示,依次需要确认需要添加的图片、棋盘格长宽格子数目、格子的长宽尺寸等,这些相信大家看提示应该知道怎么做。

      • 有需要注意的是,这里输入棋盘格x和y方向的小格子数量,这里的计数是从角点以内的方块开始算的。
        Number of squares along the X direction ([]=10) =
        Number of squares along the Y direction ([]=10) =
        看下图,举个栗子:
        这里写图片描述
        上图就是X方向五个方块,Y方向7个方块,这里千万不能弄错,如果弄错了,棋盘格就一个都检测不出来。

      • 输入棋盘格的实际尺寸,单位是毫米(mm)
        Size dX of each square along the X direction ([]=30mm) = 30
        Size dY of each square along the X direction ([]=30mm) = 30

      • 剩下的就是确认中心点等,初阶用户按Entry即可。

      • 下面是正确检测到角点的结果展示
        这是正确检测到角点的图
    4. 矫正 Calibration ,因为是自动检测角点,所以这里就只要简单的等待即可。

    5. 其他的优化结果、显示棋盘格位置、分析误差等功能大家可以尝试,这里我们最重要的是保存标定结果。也就是Save,会在本地生成一个calib_results_fisheye.txt的文件,这就是我们接下来的矫正程序需要用到的。

    6. 将calib_results_fisheye.txt文件拷到undistortFunctions的根目录,然后将你的原始图片也拷到根目录,编译运行即可。原工程没有项目文件,仅有简单的几个cpp、hpp文件,推荐大家用qmake生成一个简单的pro文件即可,需要添加OpenCV的几个库,我用OpenCV2.4.11有效运行。
      以下是我添加的库列表,节约时间就没有一一去查看是否多余了。
      LIBS += /usr/local/lib/libopencv_highgui.so \
      /usr/local/lib/libopencv_core.so \
      /usr/local/lib/libopencv_imgproc.so \
      /usr/local/lib/libopencv_features2d.so \
      /usr/local/lib/libopencv_nonfree.so \
      /usr/local/lib/libopencv_calib3d.so \
      /usr/local/lib/libopencv_video.so \

  • 工具主页
    下载页面


其它

  • 高阶用法就是优化角点误差、人工选取角点等操作,大家有兴趣自己探索,也可以留言讨论。

  • 因为下载页必须设分数,如果没有下载分的可以留言邮箱,我发给你。

  • 本文摘自OCamCalib: Omnidirectional Camera Calibration Toolbox for Matlab,全视相机模型(暂且这样翻译),这不同于一般的径向畸变模型,这种能够对鱼眼大角度相机做更好的还原,之后有时间跟大家探讨下粗浅的内部机理。