玩過魚眼相機的人都知道,光線穿透過魚眼鏡頭後在感光元件上的成像會扭曲。我們的目的是想讓更多的場景容納進影像中,於是選擇接觸光源面積較廣的魚眼鏡頭,然而問題出現了~這將會產生扭曲的影像,距離中心越遠的場景資料被壓縮得越多!而且原本該是筆直的線段都變成曲線。那麼該如何使扭曲的影像回復正常?這就是相機校準 (Camera Calibration)的工作了。
相機校準 (Camera Calibration)有幾種方法,之前使用單一鏡頭的方法失敗了,接著我使用兩顆鏡頭來試驗,沒想到效果相當不錯呢!
話說我只有一顆魚眼鏡頭,我必須事先做好間隔控制,以方便交換魚眼鏡頭位置來拍攝同一場景。還要準備一張棋盤狀的紙張,邊長最好是奇數x偶數,效果比較好!

測試時的環境為Dev C++加上OpenCV 2.0,我直接拿LearningOpenCV的Code來修改:
- ch12_ex12_3.cpp
- ch12_list.txt
- stereoData資料夾,裡頭放有八對左右魚眼影像。
接著,程式會對這八對影像做辨識,從影像中找出6×9的棋盤,並針對Stereo Data作角標記,順序從紅色開始,接著橙色、黃色、綠色、藍色。
再來,程式會根據八對影像找出平均曲率差,並以兩個角度對原影像做重新映射,以完成相機校準 (Camera Calibration)的工作。
以上結果看起來是不是矯正得相當好呢?
黑灰色影像表示兩張影像的距離差異,這是根據所找到的棋盤位置進而計算而得到的。
註:這篇相機校準 (Camera Calibration)其實比鏡頭校正 (Camera Calibration)那篇還要早寫,兩篇使用同一魚眼鏡頭做一樣的實驗,然而使用不同的演算法(前者:兩顆鏡頭;後者:一顆鏡頭),就效果而言表面上是這篇比較出色,畢竟它已把校正完然而不理想的區域給截除掉。







Comments on: "[OpenCV] 相機校準 (Camera Calibration)" (7)
你好 最近在研究魚眼的相機率定
是否可以不要使用棋盤格進行魚眼校正阿??
有點類似用SFM座相機率定這樣
讚讚
請問如果我用單一webcam去追蹤人臉 把追蹤到人臉的資訊傳給XZ軸線性滑軌上 讓線性滑軌與人臉做同步運動 那我需要使用camera calibration嗎
讚讚
除非臉變形特別嚴重,不然應該是不需要去校正相機,一般的webcam是不用特別去校正喔!
讚讚
順便問一下從不同角度的拍攝用意是? ..我認為是需要涵蓋到整個相機視野,來得知整體變形的狀況…你覺得呢?
讚讚
呵~演算法的主人建議盡可能涵蓋影像,
使得可以得到更好的結果喔!
讚讚
其實我最近也有做這個研究,請問他的適用性如何呢?
比如說你遠拍近拍,校正的結果都通用?
還是說必須在有效的焦距內使用?
讚讚
我有試過把棋盤放較遠的地方,
演算法依然可以找到標記,
當然適用性還可以多好,
你就要親自去實驗它了~ 😉
讚讚