iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 16
0
自我挑戰組

我的影像視覺定位學習筆記系列 第 16

day16-Camera calibration使用心得

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20191002/20121127Hy2zobVhQg.png
相機的相關畸變參數,可以參考Camera Calibration and 3D Reconstruction

而校正不外乎有一個校正物,透過相機拍攝這個校正物,觀察其成像的變形,藉此求得畸變參數。
而最入門的不外乎棋盤格校正,當然還有其他特殊的校正物,如圓點、ArUco標記,
這些校正物都有幾個共同點,特徵明顯,其結構有規律,
我可以很容易地建立其虛擬的3D數據模型,並從影像中觀察到其特徵點的影像座標。

而透過設定in_VID.xml設定檔裡面的
<BoardSize_Width><BoardSize_Height> <Square_Size>
三個設定值會影響calibrateCamera的objectPoints的校正物的3D座標,
你可以觀察calcBoardCornerPositions這個涵式裡面在做的事情,
就好比建立了一個校正物的3D虛擬模型,而在棋盤格的例子中理想的角點的Z座標都是0,
而校正的目標就是要讓影像中抓取到的特徵角點,
再投影到這個理想3D虛擬模型上的誤差最小。
而Square_Size將會是像素單位與現實物理單位的比例關係。

<Calibrate_UseFisheyeModel>
這個因為鏡頭是不是魚眼的關係,改變畸變的描述方式,其校正的優化涵式與畸變參數也跟一般的不一樣。

而在讀入校正影像的時候,findChessboardCorners會先找棋盤格的角落,如果有找到會在近一步使用cornerSubPix找到角點的亞像素等級的影像座標,用以產生更好的校正結果。

而透過校正後的結果我們可以透過調用
initUndistortRectifyMap()配合remap()來將 失真有畸變的影像,校正為較為真實的影像。

而如果你在複製程式碼的時候,如果是從最新的github上找的camera_calibration,
你也許會在編譯的時候發現,你的涵式庫沒有這個方法calibrateCameraRO。
這個方法看起來像是openCV4所新增的校正方法,
也許4.1.1版本的校正又會更精準或是執行效率更好了,有興趣的朋友可以試試。


上一篇
day15-Camera calibration With OpenCV相機校正
下一篇
day17-stereo calibration With OpenCV深度相機校正
系列文
我的影像視覺定位學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言