相机标定实用方案
相機(jī)標(biāo)定實用方案
相機(jī)標(biāo)定就是確定相機(jī)內(nèi)參和外參的過程,其結(jié)果精度會直接影響視覺系統(tǒng)后續(xù)工作的準(zhǔn)確性。
一.OPENCV方法
在opencv中提供了一組函數(shù)用于實現(xiàn)相機(jī)的標(biāo)定,標(biāo)定返回的值包括:相機(jī)內(nèi)參矩陣(fx
fy xc yc)、相機(jī)外參矩陣(R t)以及畸變矩陣。
標(biāo)定的步驟如下:
-
準(zhǔn)備棋盤格,棋盤格圖片可以自行打印,以下使用107方格的棋盤格,交點則為96,棋盤格的大小1mm,即 gridsize=1
-
拍照,拍照的原則是多角度,根據(jù)理論至少要兩種角度的拍照,實際中通常會拍20張左右;
-
使用opencv提供的角點檢測函數(shù)findChessboardCorners找到棋盤格中的角點,并將每幅圖片的角點值存放到list中,同時將棋盤格的角點的三維坐標(biāo)存放到另一個list。
-
使用calibrateCamera函數(shù)獲取內(nèi)存矩陣、畸變矩陣、旋轉(zhuǎn)矩陣以及轉(zhuǎn)移矩陣。
5.使用undistort函數(shù)將畸變的圖像進(jìn)行校正并查看校正后的圖片效果。
下面我們用另外的方法,詳細(xì)介紹流程。
二.坐標(biāo)系
相機(jī)標(biāo)定涉及到了四大坐標(biāo)系,分別為:
像素坐標(biāo)系
圖像物理坐標(biāo)系
相機(jī)坐標(biāo)系
世界坐標(biāo)系
為了進(jìn)行相機(jī)標(biāo)定,必須已知世界坐標(biāo)系中足夠多的三維空間點坐標(biāo),找到這些空間點在圖像中投影點的二維圖像坐標(biāo),并建立對應(yīng)關(guān)系。世界坐標(biāo)系中某個給定點投影到圖像坐標(biāo)系中被分為兩個步驟:
機(jī)器視覺中常用的有兩種不同類型的鏡頭:普通鏡頭和遠(yuǎn)心鏡頭。使用普通鏡頭時,世界坐標(biāo)系到圖像坐標(biāo)系為透視投影;使用遠(yuǎn)心鏡頭時為平行投影。
三.相機(jī)標(biāo)定方法分類
相機(jī)標(biāo)定方法有:傳統(tǒng)相機(jī)標(biāo)定法、主動視覺相機(jī)標(biāo)定法、相機(jī)自標(biāo)定法。
-
Tsai兩步法是先線性求得相機(jī)參數(shù),之后考慮畸變因素,得到初始的參數(shù)值,通過非線性優(yōu)化得到最終的相機(jī)參數(shù)。Tsai兩步法速度較快,但僅考慮徑向畸變,當(dāng)相機(jī)畸變嚴(yán)重時,該方法不適用。
-
張氏標(biāo)定法使用二維方格組成的標(biāo)定板進(jìn)行標(biāo)定,采集標(biāo)定板不同位姿圖片,提取圖片中角點像素坐標(biāo),通過單應(yīng)矩陣計算出相機(jī)的內(nèi)外參數(shù)初始值,利用非線性最小二乘法估計畸變系數(shù),最后使用極大似然估計法優(yōu)化參數(shù)。該方法操作簡單,而且精度較高,可以滿足大部分場合。詳細(xì)原理見《從零開始學(xué)習(xí)「張氏相機(jī)標(biāo)定法」(一)成像幾何模型》。
-
基于主動視覺的相機(jī)標(biāo)定法是通過主動系統(tǒng)控制相機(jī)做特定運動,利用控制平臺控制相機(jī)發(fā)生特定的移動拍攝多組圖像,依據(jù)圖像信息和已知位移變化來求解相機(jī)內(nèi)外參數(shù)。這種標(biāo)定方法需要配備精準(zhǔn)的控制平臺,因此成本較高。
-
分層逐步標(biāo)定法是先對圖像的序列做射影重建,在重建的基礎(chǔ)上進(jìn)行放射標(biāo)定和歐式標(biāo)定,通過非線性優(yōu)化算法求得相機(jī)內(nèi)外參數(shù)。由于初始參數(shù)是模糊值,優(yōu)化算法收斂性不確定。
-
基于Kruppa的自標(biāo)定法是通過二次曲線建立關(guān)于相機(jī)內(nèi)參矩陣的約束方程,至少使用3對圖像來標(biāo)定相機(jī)。圖像序列長度會影響標(biāo)定算法的穩(wěn)定性,無法保證射影空間中的無窮遠(yuǎn)平面。
四.MATLAB相機(jī)標(biāo)定應(yīng)用程序
MATLAB自帶相機(jī)標(biāo)定應(yīng)用程序,有camera calibrator和stereo camera calibrator兩類相機(jī)標(biāo)定應(yīng)用程序。其操作簡單、直觀,能夠獲得相機(jī)的內(nèi)、外參數(shù)以及畸變參數(shù)等。
其中,camera calibrator用于單目相機(jī)標(biāo)定;stereo camera calibrator用于雙目相機(jī)標(biāo)定。兩者操作方式相同,唯一區(qū)別在于stereo camera calibrator添加圖片時會彈出添加兩個相機(jī)圖片的操作框。
五.標(biāo)定板準(zhǔn)備(實驗室經(jīng)費有限,只能自己制作)
平面標(biāo)定板具有以下幾個優(yōu)點:
-
易于操作;
-
尺寸可以制作的非常精確;
-
非常方便應(yīng)用在背光照明應(yīng)用中,只需要使用透明材料制作放置標(biāo)志點的底盤即可。
使用MATLAB編程進(jìn)行棋盤標(biāo)定板的制作,將圖片打印后固定在一塊平板上。程序如下:
J = (checkerboard(300,3,4)>0.5); %生成黑白棋盤圖像
figure, imshow(J) %顯示黑白棋盤圖像
imwrite(J,‘plate.jpg’);%保存黑白棋盤圖像
效果如圖:(感覺有點寒酸呀,“但這不重要”,沒條件自己創(chuàng)造)
六.Camera Calibrator應(yīng)用程序
camera
calibrator操作界面如下:
對于標(biāo)定圖像數(shù)量,位姿越多,標(biāo)定結(jié)果也會越精確,建議在10到20幅之間。按照上圖中的1、2、3進(jìn)行相機(jī)標(biāo)定操作。我們可以選擇徑向畸變系數(shù)以及是否計算切向畸變和傾斜,通過優(yōu)化選項可以設(shè)置內(nèi)參矩陣以及徑向畸變參數(shù)的輸出形式。
1.添加標(biāo)定圖像后顯示界面如下圖:
2.相機(jī)標(biāo)定后顯示界面會顯示相機(jī)與標(biāo)定板之間的位置關(guān)系。
3.相機(jī)參數(shù)輸出camera calibrator應(yīng)用程序相機(jī)標(biāo)定參數(shù)輸出如圖所示:
高亮:MATLAB相機(jī)標(biāo)定結(jié)果中的內(nèi)參矩陣默認(rèn)格式為,其中,、分別為u軸和v軸的有效焦距;’ 為u軸和v軸的不垂直因子,一般令s=0;(u0,v0)是光學(xué)中心。注意事項:
-
制作棋盤格標(biāo)定板時,黑色方格與白色方格尺寸需要相同,所有方格尺寸一致;
-
采集標(biāo)定板圖像時,應(yīng)采集多幅不同位姿的標(biāo)定板圖像,采集圖像數(shù)量不應(yīng)太少,建議10~20幅為宜;
-
采集圖像時,相機(jī)的焦距不能調(diào)節(jié),否則會改變相機(jī)的內(nèi)參數(shù),導(dǎo)致標(biāo)定失敗;
-
MATLAB相機(jī)標(biāo)定程序能夠自動計算重投影誤差,重投影誤差越小表示相機(jī)標(biāo)定的精度越高。
七.相機(jī)標(biāo)定參數(shù)的準(zhǔn)確度
相機(jī)標(biāo)定過程中如果標(biāo)定板放置不適當(dāng)?shù)脑拰?dǎo)致相機(jī)參數(shù)中某個參數(shù)或某些參數(shù)不能得到唯一值。為了得到高準(zhǔn)確度的相機(jī)參數(shù)必須避免這種情況的發(fā)生。除了這個影響外,影響相機(jī)參數(shù)準(zhǔn)確度的主要因素就是用于進(jìn)行相機(jī)標(biāo)定的圖像數(shù)量。下面顯示了用于相機(jī)標(biāo)定的圖像數(shù)量對參數(shù)的影響。
從圖中可以看出相機(jī)參數(shù)的準(zhǔn)確度隨使用圖像數(shù)量的增加而明顯增加。為什么使用相當(dāng)多的標(biāo)定圖像可以提高相機(jī)標(biāo)定精度?這主要是因為相機(jī)參數(shù)之間存在不容忽視的相關(guān)性,這些參數(shù)只能通過多次無關(guān)測量進(jìn)行求解。為了得到更準(zhǔn)確的相機(jī)參數(shù),我們需要這樣做:
-
標(biāo)定板在圖像中最好能夠覆蓋整個視野(覆蓋圖像的每個角落可以使得徑向畸變系數(shù)更準(zhǔn)確);
-
標(biāo)定板覆蓋較大的深度范圍(將標(biāo)定板繞它的x軸和y軸旋轉(zhuǎn)或者放置在不同距離的位置上)。
總結(jié)
- 上一篇: 摄像头的主要参数
- 下一篇: 空间点像素索引(一)