opencv 雙目攝像頭標定

2021-08-09 04:26:46 字數 1404 閱讀 9936

我用的是opencv官方的例程,花了一天把**大致注釋了下,但是雙目感覺好難,很多地方都不懂,都是在大佬們的部落格找的資料

下面是對例程使用的說明

雙目攝像頭矯正就是為了

可以自己拍攝13張左相機,13張右相機進行代替(ps:名稱需要和.xml檔案中的對應)

opencv的攝像機標定採用通用的棋盤標定模板,先用函式findchessboardcorners()粗略提取出棋盤的角點,然後再使用findcornersubpix()函式,進一步精確得到角點亞象素級的座標值。

最後把座標值代入stereocalibrate()函式,得到攝像機的內外引數值。內引數是攝像機座標系和理想座標系之間的關係

4個內參(fx-焦距,fy,cx-對於x方向上光軸的偏移,cy)

5個畸變引數-3個徑向(k1,k2,k3)-2個切向(p1,p2)

外參計算需要旋轉引數(jiao1,jiao2,jiao3)和平移引數(tx,ty,tz)

然後用undistortpoints函式對上面求得的相機內外引數和畸變進行處理,對角點進行校準

用stereorectify函式對(標定過得相機進行校準)stereocalibrate求得的

cameramatrix[0],//第乙個相機矩陣

distcoeffs[0],//第乙個相機畸變引數

cameramatrix[1],// 第二個相機矩陣

distcoeffs[1],//第二個相機畸變引數

imagesize,// 用於校正的影象大小.

r,// 第一和第二相機座標系之間的旋轉矩陣。

t,//第一和第二相機座標系之間的平移矩陣. 

r1,//輸出第乙個相機的3x3矯正變換(旋轉矩陣) 

r2, //輸出第二個相機的3x3矯正變換(旋轉矩陣)

進行校準得到

p1,//在第一台相機的新的座標系統(矯正過的)輸出 3x4 的投影矩陣

p2,//在第二台相機的新的座標系統(矯正過的)輸出 3x4 的投影矩陣

q,//輸出深度視差對映矩陣

然後使用函式findfundamentalmat()計算兩幅影象關聯點的基礎矩陣,

用stereorectifyuncalibrated函式是對未標定的攝像頭進校準,由於上面進行校準所以這一步不會發生   大神對stereorectifyuncalibrated介紹 

initundistortrectifymap// 計算左右兩幅影象的對映矩陣(畸變對映)

remap函式進行重對映,用remap來校準輸入的左右影象--(通過initundistortrectifymap輸出的畸變對映來矯正影象)

**:效果:

可能由於標定板佔整個圖幅面積過小導致的畸變處理只有標定板附件那麼一點區域

雙目攝像頭標定

本文選擇使用matlab進行標定。標定過程分3步,接下來分步詳細展開 使用棋盤格生產影象 使用影象在matlab中標定 使用標定係數 第一步 使用棋盤格生產影象 列印棋盤格紙 這一步建議選擇矩形棋盤格,否則容易因為原點不同出現標定偏差,本文版本放在文末了 在目錄下建立兩個資料夾 frameright...

攝像頭標定

void calrealpoint std vector obj,int boardwidth,int boardheight,int imgnumber,int squaresize for int imgindex 0 imgindex imgnumber imgindex void camer...

攝像頭標定

void calrealpoint std vector obj,int boardwidth,int boardheight,int imgnumber,int squaresize for int imgindex 0 imgindex imgnumber imgindex void camer...