天天看點

雙目相機的畸變校正以及平行校正(極線校正)的入門問題總結



做相機标定對于剛入手的人來說有很多疑惑的點,我總結個人的入手的方法和需要弄明白的問題:

一、相機标定是幹什麼的,需要什麼器材才能做?雙目校正目标是什麼,又需要什麼裝置?

二、相機(針孔)模型是什麼樣的?世界坐标系,相機坐标系,圖像實體坐标系,圖像像素坐标系,這四個坐标系到底是什麼?從世界坐标系到圖像坐标系到底是怎麼轉換的?

三、Opencv中用到的相機标定函數,對應的算法具體是誰的,什麼算法?獲得的各矩陣資料的含義指的是什麼?

四、獲得單個相機的内參矩陣和畸變系數後,怎麼對相機進行畸變校正?

五、分别獲得兩個相機的内參矩陣和畸變系數,以及兩相機之間的相對旋轉平移矩陣後。怎樣進行雙目平行校正?校正的結果和流程應該是怎樣的?

這些問題如果搞清楚了,那麼相機的畸變和平行校正的方法你一定也就明白了。

對于上述問題,我目前的了解如下:

     一、相機标定就是要通過一定的方法對特定圖像(棋盤格角點檢測)計算出這個相機本身的一些參數,包擴:内參矩陣A,外參矩陣[R|T]、畸變系數[k1,k2,k3,~,p1,p2,~]。内參矩陣各元素意義:一個像素的實體尺寸dx和dy,焦距f,圖像實體坐标的扭曲因子gama,圖像原點相對于光心成像點的的縱橫偏移量cx和cy(像素為機關)。外參矩陣:世界坐标系轉換到相機坐标系的旋轉R和平移T矩陣。畸變系數:包括相機的徑向畸變系數k1,k2,k3,~,和相機的切向畸變系數p1,p2,~。需要的器材:一個黑白棋盤格的标定闆,一個相機拍攝的不同角度或距離的棋盤格圖像至少三張以上。

雙目校正就是通過一定的方法将兩個攝像頭拍攝同一個物體的圖像進行處理,使得兩幅圖像最終達到下面的目标,同一個物體在兩幅圖像中的大小一樣,且水準在一條直線上。需要的裝置:雙目攝像頭(即兩個同規格的攝像頭水準放置左右攝像頭),拍攝同一個實體的左右圖像對,需要已知左右相機的内參矩陣、畸變系數、右相機相對于左相機的旋轉矩陣R(通過一定的方法可将此矩陣分解成兩個矩陣R1和R2,即左右相機各旋轉一半達到水準)。

二、針孔相機的模型:三維世界中的物體,經過相機成像系統,變成二維圖像過程如下所示。

雙目相機的畸變校正以及平行校正(極線校正)的入門問題總結

世界坐标系:就是物體在真實世界中的坐标,比如黑白棋盤格的世界坐标系原點定在第一個棋盤格的頂點,Xw,Yw,Zw互相垂直,Zw方向就是垂直于棋盤格面闆的方向。可見世界坐标系是随着物體的大小和位置變化的,機關是長度機關。隻要棋盤格的大小決定了,無論闆子怎麼動,棋盤格角點坐标一般就不再變動(因為是相對于世界坐标系原點的位置不變),且認為是Zw=0.

相機坐标系:以光心為相機坐标系的原點,以平行于圖像的x和y方向為Xc軸和Yc軸,Zc軸和光軸平行,Xc,Yc,Zc互相垂直,機關是長度機關。

圖像實體坐标系:以主光軸和圖像平面交點為坐标原點,x和y方向如圖所示,機關是長度機關。

圖像像素坐标系:以圖像的頂點為坐标原點,u和v方向平行于x和y方向,機關是以像素計。

     從世界坐标系到圖像坐标系的轉換過程如下:世界坐标系通過外參矩陣轉換到相機坐标系,相機坐标系通過内參矩陣轉換到圖像像素坐标系(這一步是通過兩步完成的,一,相機坐标系通過焦距對角矩陣和畸變系數轉換到圖像實體坐标系,二圖像實體坐标系通過像素轉換矩陣轉換到像素坐标系中)。轉換過程和公式如下(将在接下來的文章裡詳細說明):

雙目相機的畸變校正以及平行校正(極線校正)的入門問題總結

      三、opencv标定中用到的重要函數和算法以及擷取矩陣的含義:

findChessboardCorners()用來發現棋盤格的角點位置,這裡用的是haaris角點檢測方法。cornerSubPix()角點位置精确到亞像素級。

stereoCalibrate()通過角點推算出兩個相機的内參矩陣M1,M2和畸變系數D1,D2,當然外參矩陣随之也就計算出來了(在圖像校正中還沒有用到外參),這裡用到的是張正友相機标定算法。

stereoRectify()根據内參矩陣和畸變系數計算右相機相對于左相機的旋轉R和平移矩陣T,并将這個旋轉和平移矩陣分解成左、右相機各旋轉一半的旋轉R1,R2和平移矩陣T1,T2,這裡用到的是bouguet極線校正的方法。

initUndistortRectifyMap()和remap()對左右相機拍攝的圖像進行校正(在今後的文章中将會詳細介紹實作方法和步驟)。

       四、擷取了内參矩陣和畸變系數對圖像進行畸變校正時,就是解決圖像的畸變問題(徑向畸變是因為透鏡本身工藝的問題,切向畸變是由于安裝問題帶來的)。畸變校正的過程是這樣的,将源圖像像素坐标系通過内參矩陣轉化成相機坐标系(和圖像實體坐标系比較多了縮放和Z軸),通過畸變系數校正圖像的相機坐标,校正後通過内參矩陣将相機坐标系轉換成圖像像素坐标系,并根據源圖像坐标的像素值指派給新的圖像坐标(用插值的方法,将在後面的文章中叙述)。

       五、雙目平行校正,是針對圖像對應的相機坐标系進行的,那麼極線校正的時候應該注意就是在四中叙述的畸變校正過程中,在轉換到相機坐标系後,左右圖像對應的相機坐标系分别通過旋轉矩陣R1和R2進行平行極線校正。步驟如下:将源圖像像素坐标系通過内參矩陣轉化成相機坐标系(和圖像實體坐标系比較多了縮放和Z軸),通過旋轉矩陣R1和R2進行平行極線校正,然後通過畸變系數校正圖像的相機坐标,校正後通過内參矩陣将相機坐标系轉換成圖像像素坐标系,并根據源圖像坐标的像素值指派給新的圖像坐标

繼續閱讀