天天看點

最詳細、最完整的相機标定講解

最詳細、最完整的相機标定講解

未經部落客允許不得轉載https://blog.csdn.net/a083614/article/details/78579163

最近做項目要用到标定,因為是小白,很多東西都不懂,于是查了一堆的部落格,但沒有一個部落格能讓我完全能看明白整個過程,絕大多數都講的不全面,是以自己總結了一篇部落格,給自己理一下思路,也能夠幫助大家。(張正友标定的詳細求解還未完全搞明白,後面再加)

參考部落格:

相機标定(Camera calibration)原理、步驟

(http://blog.csdn.net/lql0716/article/details/71973318?locationNum=8&fps=1)

相機标定内容詳解 (轉載自祥的部落格)

(http://blog.csdn.net/humanking7/article/details/44756073)

張正友标定介紹

(http://blog.csdn.net/heroacool/article/details/50286677)

[圖像]錄影機标定(2) 張正友标定推導詳解

(http://blog.csdn.net/humanking7/article/details/44756235)

MATLAB–相機标定教程

(http://blog.csdn.net/heroacool/article/details/51023921)

在圖像測量過程以及機器視覺應用中,為确定空間物體表面某點的三維幾何位置與其在圖像中對應點之間的互相關系,必須建立相機成像的幾何模型,這些幾何模型參數就是相機參數。在大多數條件下這些參數必須通過實驗與計算才能得到,這個求解參數(内參、外參、畸變參數)的過程就稱之為相機标定(或錄影機标定)。無論是在圖像測量或者機器視覺應用中,相機參數的标定都是非常關鍵的環節,其标定結果的精度及算法的穩定性直接影響相機工作産生結果的準确性。是以,做好相機标定是做好後續工作的前提,提高标定精度是科研工作的重點所在。

畸變(distortion)是對直線投影(rectilinear projection)的一種偏移。簡單來說直線投影是場景内的一條直線投影到圖檔上也保持為一條直線。畸變簡單來說就是一條直線投影到圖檔上不能保持為一條直線了,這是一種光學畸變(optical aberration),可能由于錄影機鏡頭的原因。

相機的畸變和内參是相機本身的固有特性,标定一次即可一直使用。但由于相機本身并非理想的小孔成像模型以及計算誤差,采用不同的圖檔進行标定時得到的結果都有差異。一般重投影誤差很小的話,标定結果均可用。

在視覺測量中,需要進行的一個重要預備工作是定義四個坐标系的意義,即 錄影機坐标系 、 圖像實體坐标系、圖像像素坐标系 和 世界坐标系(參考坐标系) 。

最詳細、最完整的相機标定講解

此時有

最詳細、最完整的相機标定講解

2.一般情況,兩軸不互相垂直

最詳細、最完整的相機标定講解
最詳細、最完整的相機标定講解

寫成矩陣形式為:

最詳細、最完整的相機标定講解
最詳細、最完整的相機标定講解

(根據小孔成像原理,圖像坐标系應在相機坐标系的另一邊,為倒立反向成像,但為友善了解和計算,故投影至同側。)

根據三角形相似性原理得:

最詳細、最完整的相機标定講解
最詳細、最完整的相機标定講解

###四、合并公式

最詳細、最完整的相機标定講解
最詳細、最完整的相機标定講解

其中

最詳細、最完整的相機标定講解

畸變一般可以分為:徑向畸變、切向畸變

ps:畸變是相機本身的固有特性,和相機内參相同,标定一次之後即可。

徑向畸變來自于透鏡形狀。 切向畸變來自于整個錄影機的組裝過程。

畸變還有其他類型的畸變,但是沒有徑向畸變、切向畸變顯著,是以忽略不計。

最詳細、最完整的相機标定講解

徑向畸變(桶形畸變和枕形畸變):

實際錄影機的透鏡總是在成像儀的邊緣産生顯著的畸變,這種現象來源于“筒形”或“魚眼”的影響。

如下圖,光線在原理透鏡中心的地方比靠近中心的地方更加彎曲。對于常用的普通透鏡來說,這種現象更加嚴重。筒形畸變在便宜的網絡錄影機中非常厲害,但在高端錄影機中不明顯,因為這些透鏡系統做了很多消除徑向畸變的工作。

最詳細、最完整的相機标定講解

對于徑向畸變,成像儀中心(光學中心)的畸變為0,随着向邊緣移動,畸變越來越嚴重。

對于徑向畸變可以通過下面的泰勒級數展開式進行校正:

最詳細、最完整的相機标定講解

這裡的x、y是圖像中的畸變後的位置坐标,通過校正得到真實坐标。r是該點距成像中心的距離。

切向畸變(薄透鏡畸變和離心畸變):

切向畸變是由于透鏡制造上的缺陷使得透鏡本身與圖像平面不平行而産生的。

最詳細、最完整的相機标定講解

切向畸變可以通過如下公式來矯正:

最詳細、最完整的相機标定講解

徑向畸變模型:

xc= xd (1+k1r^2 +k2r^4 +k3r^6+⋯)

yc= yd (1+k1r^2 +k2r^4 +k3r^6+⋯)

切向畸變模型:

xc= 2p1xdyd+p2 (r^2 +2xd^2 )

yc= 2p2xdyd+p1 (r^2 +2yd^2 )

可得:

xc= xd (1+k1r^2 +k2r^4 )+2p1xdyd+p2 (r^2 +2xd^2 )

yc= yd (1+k1r^2 +k2r^4 )+2p2xdyd+p1 (r^2 +2yd^2 )

xd,yd為圖像中的點(存在畸變),xc,yc是畸變校正後的點。

由公式可得畸變有k1,k2,k3,p1,p2五個參數,對于品質比較好的相機來說,切向畸變很小,可忽略,徑向畸變系數k3也可忽略,隻計算k1,k2兩個參數。張正友标定中就預設為p1,p2為0。

最簡單的相機标定為線性标定,即不考慮相機的畸變而隻考慮空間坐标轉換。

每個坐标點有X,Y兩個變量,可列兩個方程,相機内參有5個未知數,外參平移和旋轉各3個,共有11個變量,是以至少需要6個特征點來求解。

當鏡頭畸變明顯時必須考慮畸變,一般較為便宜的網絡攝像頭畸變特别大,而價格較貴的工業攝像頭則畸變很小,因為其中已經嵌入了許多消除畸變的程式。這時線性模型轉化為非線性模型,需要通過非線性标定方法求解。有最速下降法,遺傳算法,高斯牛頓法和神經網絡算法等。

(張正友标定隻考慮了徑向畸變,沒有考慮切向畸變)

由上面的坐标轉換可得:

最詳細、最完整的相機标定講解

H即為單應性矩陣

最詳細、最完整的相機标定講解

H為3x3矩陣,并且有一個元素作為齊次坐标,則有8個未知元素,一組坐标對應兩個方程,則至少需要四組對應的點即可算出單應性矩陣H。

最詳細、最完整的相機标定講解

因為R旋轉矩陣為正交矩陣,存在:

最詳細、最完整的相機标定講解

代入H可得求出兩組A和H的公式:

最詳細、最完整的相機标定講解

矩陣A包含5個元素,需要3組H方可解出A的唯一封閉解,是以在标定時需拍攝3組以上的圖檔。由A可計算出相應的外參矩陣。在上述計算中,忽略了相機畸變的影響。對内外參應用最小二乘方法估計實際存在的徑向畸變的畸變系數(忽略切向畸變),最後通過極大似然法進行優化,得到精度較高的解。

相機标定步驟:

1、列印一張棋盤格,把它貼在一個平面上,作為标定物。 2、通過調整标定物或錄影機的方向,為标定物拍攝一些不同方向的照片。 3、從照片中提取棋盤格角點。 4、估算理想無畸變的情況下,五個内參和六個外參。 5、應用最小二乘法估算實際存在徑向畸變下的畸變系數。 6、極大似然法,優化估計,提升估計精度。

1、應用程式中找到Camera Calibration

最詳細、最完整的相機标定講解

2、添加标定闆拍攝圖檔(按Ctrl可一次添加多張)

最詳細、最完整的相機标定講解

3、輸入棋盤格每格的尺寸大小

最詳細、最完整的相機标定講解

4、顯示已檢測出的棋盤格,點選Calibration,開始标定。

最詳細、最完整的相機标定講解

5、得到标定結果(平均誤差小于0.5即可認為結果可靠,這個地方我還不是很清楚)

最詳細、最完整的相機标定講解

6、可檢視标定結果和程式

最詳細、最完整的相機标定講解
最詳細、最完整的相機标定講解
最詳細、最完整的相機标定講解

1、循環讀取圖檔

2、使用findChessboardCorners函數檢測角點(需提前輸入角點數)。

最詳細、最完整的相機标定講解

3、使用find4QuadCornerSubpix函數對角點進行亞像素精确化

4、可用drawChessboardCorners将角點顯示。

5、根據角點數和尺寸建立一個理想的棋盤格(用point向量存儲所有理論上的角點坐标)。

6、通過calibrateCamera函數由理想坐标和實際圖像坐标進行标定,可得到标定結果。

7、由projectPoints函數計算反向投影誤差。

最詳細、最完整的相機标定講解

matlab标定的内參經過轉置與VS标定的内參基本一緻。

每一幅圖像都有一個外參矩陣,它的作用是:通過将棋盤格上坐标系上的角點坐标(x,y,0,1)(計算過程中設定參考坐标系在棋盤格上左上方角點,Z軸垂直棋盤格平面,是以z為0,1表示齊次坐标)左乘外參矩陣再左乘内參矩陣可以得到該外參矩陣對應圖像中的相應角點坐标。VS的标定結果經過代入點進行上述計算得到的坐标與圖像基本一緻,但matlab的結果不同直接代入并不相同。原因在于兩種方法标定的結果表示形式不同,兩種方法結果中外參矩陣的平移向量相同,但旋轉矩陣結果不一緻,原因還在思考中。ps:平時事情比較多,更新比較慢。

ps:如上圖opencv标定結果中内參矩陣裡的2168和2174并不是焦距,而是焦距/每個像素大小,否則數量級不會這麼大,焦距一般隻有幾毫米或幾十毫米。剛看到國内的碩士論文裡有人寫錯了。

最詳細、最完整的相機标定講解
最詳細、最完整的相機标定講解
最詳細、最完整的相機标定講解
最詳細、最完整的相機标定講解
最詳細、最完整的相機标定講解
最詳細、最完整的相機标定講解
最詳細、最完整的相機标定講解
最詳細、最完整的相機标定講解
最詳細、最完整的相機标定講解
最詳細、最完整的相機标定講解
最詳細、最完整的相機标定講解
最詳細、最完整的相機标定講解
最詳細、最完整的相機标定講解
最詳細、最完整的相機标定講解
最詳細、最完整的相機标定講解
最詳細、最完整的相機标定講解
最詳細、最完整的相機标定講解
最詳細、最完整的相機标定講解
最詳細、最完整的相機标定講解
最詳細、最完整的相機标定講解
最詳細、最完整的相機标定講解
最詳細、最完整的相機标定講解
最詳細、最完整的相機标定講解
最詳細、最完整的相機标定講解
最詳細、最完整的相機标定講解
最詳細、最完整的相機标定講解
最詳細、最完整的相機标定講解
最詳細、最完整的相機标定講解
最詳細、最完整的相機标定講解
最詳細、最完整的相機标定講解
最詳細、最完整的相機标定講解
最詳細、最完整的相機标定講解

繼續閱讀