1. 程式人生 > >雙目標定(三)標定流程(含矯正)

雙目標定(三)標定流程(含矯正)

1.原理

2.採集

2.1標定板的製作
  • 大小:應當使得標定板在影象中佔比儘可能大一些。佔影象長度比例應當超過1/3;如果實在無法保證標定板佔影象比例比較大如果佔比比較小,則需要儘可能多采集一些影象。
  • 平:標定板應當儘可能使理想平面。如果要求不是非常嚴格(比如重投影誤差0.3即可),也可以用紙板(一般的標定板廠商做得即為此類);如果標定精度要求比較高,則需要用硬度較高的材料做標定板,在該標定板上列印塗層形成標定板)
  • 其他:matlab工具箱的標定板要求是橫縱格點數目一奇一偶。需要注意的是,“上下左右黑白相交”點才算格點,也就是最外側的一條與標定板白色背景相交的那一條線上的點不算格點。
2.2標定影象數目

如果標定板佔影象的長度比例大於1/2,則標定影象數目在10-20張為宜。否則,如果標定板在影象中比較小(比如雙目基線超過1米時),則應繼續增加標定影象張數到20張以上,以免標定板。

2.3標定板的位置
  • 條件1
    如果以後需要採集資料的物體在相機前5米左右,那麼標定板也放在5米是最好的。如果相機本身比較好/貴,則相機在消除畸變等方面做得很好,則可以不用太在意這一條
  • 條件2:應該讓標定板處在影象中不同位置,包括上下坐下,以及四角都有一定程度涵蓋,最後所有標定板疊加,結果看起來整幅圖主要部分都被標定板覆蓋了,而不能僅僅覆蓋影象左側或右側,或者看重左上部分而忽略右下部分。這樣主要避免主點偏向一側時,該側沒有足夠資料支援相機畸變模型。
  • 條件3:拍照時應當讓標定板完全靜止,避免圖片放大後細節處有模糊,或左右相機因為沒有硬體同步而導致所採影象不一致。
標定板的擺放朝向

各個標定板採集影象應該代表不同平面,比如在一個位置時可以左右偏航,上下俯仰;保持標定板平面與相機成像平面有一定一定傾斜夾角,但不要超過45度,以免角點檢測失敗。

2.4採集環境

為了精確定位標定板的格點,採集現場不能過曝過暗。光線以柔和為主、避免陽光直射,避免光照角度單一造成標定板上形成鏡面反射。

3.標定過程

相機模型以針孔相機模型為主,如果鏡頭焦距很小,如魚眼相機或球面相機,則可以用球面相機模型(也可用opencv fisheye來進行標定)
以下以針孔相機模型舉例:

3.1 opencv 標定

對於opencv,應該先進行左右相機的calibrateCamera單目標定,然後再進行stereoCalibrate雙目標定;

3.2 matlab標定工具箱

matlab 2014以後集成了一個標定工具箱(並非某論文作者自己開發的matlab標定程式碼),兼有單目標定、雙目標定、立體矯正的功能。
注意使用時,開啟skew,切向畸變的開關。
此外,應該先進行左右相機的單目標定,得到各自內參值,並將該內參值作為雙目標定的初始值傳入。

將雙目標定完成後,
應該進行檢查

  • 重投影誤差,這主要是單目標定情況
  • 矯正結果,比如應該水平的線條是否水平,以及標定板對應位置是否在同一水平線上。
  • 檢查外參,特別是基線長度是否和重投影的一致

4.矯正

採集程式碼示例可參照opencv的sample,包含普通相機和魚眼相機兩種矯正模型(注意opencv 魚眼相機標定函式有一定問題,在Ubuntu14.04上OpenCV2.4.11和3.4上測試得到的結果都是錯的)。
經過雙目矯正後,左右檢視的內參數都為一樣的,新的矯正左右檢視的影象需要採用統一的內參數,即opencv stereoRectify()得到的P2的左上角的3x3矩陣。同時,如果矯正是水平對齊,則baseline數值是P2的右上角的數值(fxbaselinefx \cdot baseline)除以fx。(ORBSLAM等直接使用P2右上角的fx*baseline.