|
最近做項目要用到標定,因為是小白,很多東西都不懂,于是查了一堆的博客,但沒有一個博客能讓我完全能看明白整個過程,絕大多數(shù)都講的不全面,因此自己總結(jié)了一篇博客,給自己理一下思路,也能夠幫助大家。(張正友標定的詳細求解還未完全搞明白,后面再加) 參考博客: 相機標定內(nèi)容詳解 (轉(zhuǎn)載自祥的博客) 張正友標定介紹 [圖像]攝像機標定(2) 張正友標定推導(dǎo)詳解 MATLAB–相機標定教程 在圖像測量過程以及機器視覺應(yīng)用中,為確定空間物體表面某點的三維幾何位置與其在圖像中對應(yīng)點之間的相互關(guān)系,必須建立相機成像的幾何模型,這些幾何模型參數(shù)就是相機參數(shù)。在大多數(shù)條件下這些參數(shù)必須通過實驗與計算才能得到,這個求解參數(shù)(內(nèi)參、外參、畸變參數(shù))的過程就稱之為相機標定(或攝像機標定)。無論是在圖像測量或者機器視覺應(yīng)用中,相機參數(shù)的標定都是非常關(guān)鍵的環(huán)節(jié),其標定結(jié)果的精度及算法的穩(wěn)定性直接影響相機工作產(chǎn)生結(jié)果的準確性。因此,做好相機標定是做好后續(xù)工作的前提,提高標定精度是科研工作的重點所在。 畸變(distortion)是對直線投影(rectilinear projection)的一種偏移。簡單來說直線投影是場景內(nèi)的一條直線投影到圖片上也保持為一條直線?;兒唵蝸碚f就是一條直線投影到圖片上不能保持為一條直線了,這是一種光學(xué)畸變(optical aberration),可能由于攝像機鏡頭的原因。 相機的畸變和內(nèi)參是相機本身的固有特性,標定一次即可一直使用。但由于相機本身并非理想的小孔成像模型以及計算誤差,采用不同的圖片進行標定時得到的結(jié)果都有差異。一般重投影誤差很小的話,標定結(jié)果均可用。 坐標轉(zhuǎn)換基礎(chǔ)在視覺測量中,需要進行的一個重要預(yù)備工作是定義四個坐標系的意義,即 攝像機坐標系 、 圖像物理坐標系、圖像像素坐標系 和 世界坐標系(參考坐標系) 。 一、圖像坐標系(x,y)至像素坐標系(u,v)1.兩坐標軸互相垂直此時有 2.一般情況,兩軸不互相垂直 此時有 寫成矩陣形式為: 二、相機坐標系(Xc,Yc,Zc)至圖像坐標系(x,y)(根據(jù)小孔成像原理,圖像坐標系應(yīng)在相機坐標系的另一邊,為倒立反向成像,但為方便理解和計算,故投影至同側(cè)。) 根據(jù)三角形相似性原理得: 三、世界坐標系(Xw,Yw,Zw)至相機坐標系(Xc,Yc,Zc)###四、合并公式
畸變畸變一般可以分為:徑向畸變、切向畸變
畸變還有其他類型的畸變,但是沒有徑向畸變、切向畸變顯著,所以忽略不計。
徑向畸變(桶形畸變和枕形畸變): 對于徑向畸變,成像儀中心(光學(xué)中心)的畸變?yōu)?,隨著向邊緣移動,畸變越來越嚴重。 切向畸變(薄透鏡畸變和離心畸變): 切向畸變是由于透鏡制造上的缺陷使得透鏡本身與圖像平面不平行而產(chǎn)生的。 切向畸變可以通過如下公式來矯正:
opencv畸變模型徑向畸變模型: xc= xd (1+k1r^2 +k2r^4 +k3r^6+?) 切向畸變模型: xc= 2p1xdyd+p2 (r^2 +2xd^2 ) 可得: xc= xd (1+k1r^2 +k2r^4 )+2p1xdyd+p2 (r^2 +2xd^2 ) xd,yd為圖像中的點(存在畸變),xc,yc是畸變校正后的點。 標定方法1、傳統(tǒng)相機標定最簡單的相機標定為線性標定,即不考慮相機的畸變而只考慮空間坐標轉(zhuǎn)換。 2、非線性標定當鏡頭畸變明顯時必須考慮畸變,一般較為便宜的網(wǎng)絡(luò)攝像頭畸變特別大,而價格較貴的工業(yè)攝像頭則畸變很小,因為其中已經(jīng)嵌入了許多消除畸變的程序。這時線性模型轉(zhuǎn)化為非線性模型,需要通過非線性標定方法求解。有最速下降法,遺傳算法,高斯牛頓法和神經(jīng)網(wǎng)絡(luò)算法等。 3、張正友標定介紹(張正友標定只考慮了徑向畸變,沒有考慮切向畸變) 由上面的坐標轉(zhuǎn)換可得:
H為3x3矩陣,并且有一個元素作為齊次坐標,則有8個未知元素,一組坐標對應(yīng)兩個方程,則至少需要四組對應(yīng)的點即可算出單應(yīng)性矩陣H。 矩陣A包含5個元素,需要3組H方可解出A的唯一封閉解,因此在標定時需拍攝3組以上的圖片。由A可計算出相應(yīng)的外參矩陣。在上述計算中,忽略了相機畸變的影響。對內(nèi)外參應(yīng)用最小二乘方法估計實際存在的徑向畸變的畸變系數(shù)(忽略切向畸變),最后通過極大似然法進行優(yōu)化,得到精度較高的解。 標定過程相機標定步驟:
Matlab工具箱標定:1、應(yīng)用程序中找到Camera Calibration
2、添加標定板拍攝圖片(按Ctrl可一次添加多張)
3、輸入棋盤格每格的尺寸大小
4、顯示已檢測出的棋盤格,點擊Calibration,開始標定。
5、得到標定結(jié)果(平均誤差小于0.5即可認為結(jié)果可靠,這個地方我還不是很清楚)
6、可查看標定結(jié)果和程序
opencv標定1、循環(huán)讀取圖片 標定結(jié)果:matlab標定的內(nèi)參經(jīng)過轉(zhuǎn)置與VS標定的內(nèi)參基本一致。 ps:如上圖opencv標定結(jié)果中內(nèi)參矩陣里的2168和2174并不是焦距,而是焦距/每個像素大小,否則數(shù)量級不會這么大,焦距一般只有幾毫米或幾十毫米。剛看到國內(nèi)的碩士論文里有人寫錯了。 |
|
|
來自: 昵稱67837330 > 《機器視覺》