1. 程式人生 > >魚眼鏡頭的標定及矯正

魚眼鏡頭的標定及矯正

OCamCalib: Omnidirectional Camera Calibration Toolbox for Matlab
  本文主要目的是為分享來自蘇黎世大學Davide ScaramuzzaOCamCalib全視角相機模型標定矯正演算法。作者主頁 因為是被牆了,所以我分享出來以供參考。先上結果圖:

這裡寫圖片描述

這裡寫圖片描述

可以看出,效果是相當不錯的,所以這也是我強烈分享給大家的原因之一。

環境
1. MATLAB2015R標定魚眼鏡頭
2. Ubuntu14.04 + OpenCV2.4.11根據標定結果對魚眼鏡頭矯正

預備工作
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,全視相機模型(暫且這樣翻譯),這不同於一般的徑向畸變模型,這種能夠對魚眼大角度相機做更好的還原,之後有時間跟大家探討下粗淺的內部機理。

PS
1. 覺得本文有幫助的可以左上角點贊,或者留言互動。