聶紅梅,劉忠艷
基于OpenCV的攝像機標定研究*
聶紅梅,劉忠艷
(黑龍江科技大學(xué),哈爾濱150022)
根據(jù)攝像機標定原理,提出了一種基于OpenCV的攝像機標定技術(shù),并且借助于開源計算機視覺庫OpenCV在VS 2008開發(fā)平臺下完成標定。通過相關(guān)實驗證明了,利用OpenCV開發(fā)的攝像機標定程序具有標定結(jié)果精確、運算效率高、跨平臺移植性好等優(yōu)點,可以有效地應(yīng)用于需要計算機視覺系統(tǒng)的各個領(lǐng)域。
OpenCV視覺庫;攝像機標定;線性攝像機模型
人們通常用仿生物學(xué)方法來完成對自然界物體的重構(gòu),比如用各種成像系統(tǒng)替代人的視覺系統(tǒng),用計算機替代人的大腦完成三維重構(gòu)。用兩臺攝像機在不同視點下,同時捕獲圖像信息,通過攝像機標定矩陣進行運算,即可獲得三維空間坐標;將這些三維坐標信息綜合起來,在三維空間中建立物體模型,以此可以便更方便、更準確地對物體進行全方位觀察和操作。OpenCV是英特爾開發(fā)的開源計算機視覺庫,它由一系列C和C++函數(shù)構(gòu)成,能實現(xiàn)計算機視覺和圖像處理方面的很多通用算法,包括對象跟蹤、圖像處理、運動分析、模式識別、結(jié)構(gòu)分析、攝像機標定和三維重建等。OpenCV中的攝像機標定模塊為用戶提供了良好的接口,支持Windows、Linux平臺,提高了開發(fā)效率,增強了程序的移植性,完全可用在工程的實際開發(fā)中。
圖像坐標系:物體投射到二維平面形成圖像,建立坐標系統(tǒng),坐標系中某目標點的坐標用(Xu,Yu)表示;
攝像機坐標系:攝像機自身構(gòu)成一個物體圖像坐標系統(tǒng),坐標系中某目標點的坐標用(Xc,Yc,Zc)表示;
世界坐標系:對我們生活的三維物質(zhì)世界建立的坐標系,坐標系中某目標點的坐標用(Xw,Yw,Zw)表示。
在沒有任何的畸變的情況下,假設(shè)攝像成像是理想的針孔成像,針孔攝像機模型如圖1所示。圖1中O點為投影中心即為坐標系原點,O1點為光軸與成像平面的交點即為成像平面的中心點。
圖1 針孔攝像機
圖1 中的Q點坐標(Xc,Yc,Zc)是Q點在攝像機坐標系下的坐標。Q點坐標(Xw,Yw,Zw)是Q點在世界坐標系的坐標。q點坐標(Xu,Yu)是q點在圖像上的坐標。圖1中的 為投影中心到圖像平面的距離即焦距。
根據(jù)近似三角形原理,得出如下公式:
在現(xiàn)實制作攝像機過程中圖像中心O1不可能完全落在光軸上。設(shè)光軸落在平面坐標(X0,Y0)上,因此X0和Y0是O1的偏移量。因此式(1)、(2)變?yōu)椋?/p>
另外在現(xiàn)實制作攝像機的過程中像素傳感器無法加工成正方形,一般都是長方形,因此我們把像素傳感器的長和寬分別定義為x和y。因此有如下公式:
把式(3)和式(5)代入
把式(4)和式(6)代入
把式(7)、式(8)用齊次坐標表示為:
根據(jù)式(9)可完成圖像坐標和攝像機坐標之間的轉(zhuǎn)換。
至此,我們還需要完成攝像機坐標系向世界坐標系的轉(zhuǎn)換:
式(10)中R是3×3旋轉(zhuǎn)矩陣,T是3×1的平移矩陣:
式(11),式(12)中的α ,β,γ,Tx, Ty和Tz是攝像機外部參數(shù)。
攝像機為了快速成像必須增加光強,通常的做法是在攝像頭前加入透鏡。加入透鏡雖然解決了快速成像的問題,卻引入了圖像畸變。因此我們需要糾正由于附加鏡頭的引入而引起的畸變。
透鏡引起的畸變有兩種形式:徑向畸變和切向畸變。在成像傳感器平面中,每一個點可以用直角坐標系(x,y)表示;也可用極坐標系(r,t)表示,即矢量表示,其中r是矢量長度,t是矢量水平夾角,中心位于傳感器中心。徑向畸變就是矢量端點沿長度方向,即r方向發(fā)生的變化。切向畸變就是矢量端點沿切線方向即t方向發(fā)生的角度變化。徑向畸變在r=0時沒有發(fā)生畸變,因此我們在此周圍用泰勒級數(shù)展開的前幾項來定量描述,即:
對于切向畸變,我們引入了兩個參數(shù)p1,p2來描述
因此攝像機標定其實就是測量攝像機的內(nèi)外參數(shù)和
畸變參數(shù)。
OpenCV的攝像機標定采用平面棋盤格標定模板。通過自由移動攝像機或模板,在不同的角度抓取多張平面標定模板的圖片,來實現(xiàn)對攝像機的標定。黑白棋盤標定模板采用邊長為20mm,9行13列,共計96個角點的棋盤作為模板。抓取多張不同角度圖片采用最小二乘法進行標定計算。把多張標定圖片放入相同的目錄中,為標定程序讀入做好準備。標定流程如圖2所示。
圖2 標定流程
圖2 中所描述的標定流程如下:
(1)獲取標定圖像目錄文件列表。
(2)通過imread()加載圖像。該函數(shù)支持常用的文件格式。
(3)調(diào)用 cvFindChessboardCorners()尋找棋盤角點,函數(shù)尋找成功返回非0,失敗返回0。函數(shù)成功同時返回角點坐標。調(diào)用這個函數(shù)時,如果這個圖像是彩色圖像必須轉(zhuǎn)換成灰度圖像,如果圖像本身是灰度圖像則不必進行轉(zhuǎn)換。
(4)使用 cvCreateMemStorage()和 cvCreateSeq()創(chuàng)建存儲角點坐標序列。
(5)調(diào)用cvFindCornerSubPix()進一步得到角點亞像素級坐標值,并使用cvSeqPush保存所得到的亞像素級坐標值到坐標序列中。
(6)將角點亞像素級坐標值和角點在世界坐標系下的坐標值代入cvCalibrateCamera2()中,得到攝像機內(nèi)外參數(shù)值和畸變參數(shù)。
(7)釋放函數(shù)分配的內(nèi)存空間,防止內(nèi)存泄漏。
程序在WindowsXP下使用VS2008進行編程、調(diào)試和測試。由于篇幅限制,變量定義和初始化從略。此處只給出關(guān)鍵代碼:
CvSize CBoardSize=cvSize(rCount,cCount);//標定板尺寸
if((srcimage=cvLoadImage(filename,1))==0) //加載圖片
continue;
//加載失敗,繼續(xù)加載下一幅圖片
cvCvtColor(srcimage,grayimage,CV_BGR2GRAY);
//把色彩圖像轉(zhuǎn)換成灰度圖像
CvPoint2D32f*pCorners=(CvPoint2D32f*)(rCount*
cCount*sizeof(CvPoint2D32f));
//存儲檢測到的角點
Int iCount;
//保存檢測到角點數(shù)
result=cvFindChessboardCorners(grayimage,CBoardSize,
pCorners,&iCount,CV_CALIB
_CB_ADAPTIVE_THRESH);
//獲取角點
for(int i=0;i<iCount;i++)
{
cvFindCornerSubPix(grayimage,pCorners,iCount,cvSize(11,11),cvSize(-1,-1),cvTermCriteria
(CV_TERMCRIT_EPS+CV_TERMCRIT_ITER,30,0.1));
//精確獲得每一個角點坐標
cvSeqPush(pSeq,pCorners);
//把獲得的坐標保存在序列中
}
cvCalibrateCamera2(pObj,pIP,pPC,iS,pIc,pDn,pRn,pTn,0);
//獲取矯正數(shù)據(jù)
其中,pObj是角點的世界坐標,pIP是角點的圖像坐標,pPC是不同圖片角點的數(shù)目,iS是圖像尺寸,pIc是獲得的攝像機內(nèi)矩陣,pDn是獲得的攝像機畸變系數(shù),pRn是獲得的攝像機旋轉(zhuǎn)向量,pTn是獲得的攝像機平移向量。
根據(jù)上述的標定原理編寫實驗程序,程序結(jié)果保存為文本文件。經(jīng)過多次調(diào)試的結(jié)果表明,該程序運行穩(wěn)定、準確,能成功尋找到焦點,標定一組20幅1280×1024像素的圖片,用時1.2s,能夠滿足實際需要。為了驗證數(shù)據(jù)的準確性,同時也使用了Matlab對這20幅圖片進行標定,以便進行對比。程序標定的攝像機參數(shù)和Matlab標定的攝像機參數(shù)對比見表1。
表1 攝像機參數(shù)對比
在表1中,由于 k3在Matlab中是忽略的參數(shù),這里也沒有給出。
目前在計算機視覺應(yīng)用領(lǐng)域中較為重要的研究是視覺測量和三維重建,而在這些研究中,都需要確定視覺圖像中的點與現(xiàn)實世界中對應(yīng)點的幾何位置關(guān)系。攝像機標定的目的,就是要建立三維世界坐標與二維圖像坐標之間的一種對應(yīng)關(guān)系。利用OpenCV開發(fā)的攝像機標定程序,具有標定結(jié)果精確、運算效率高、跨平臺移植性好等優(yōu)點,可以有效地應(yīng)用于需要計算機視覺系統(tǒng)參與工作的各個領(lǐng)域。
[1] 程建璞,項輝宇.基于OpenCV的車體覆蓋件視覺測量的攝像機標定[J].機械設(shè)計與制造,2010,(11):198-200.Cheng Jianpu,Xiang Huiyu.A Camera Calibration of Vision Measurement of Body Panel Based on OpenCV [J].Mechanical Designand Manufacturing,2010,11:198-200.
[2] 岡薩雷斯,伍茲,埃丁斯,等.數(shù)字圖像處理(Matlab版)[M].阮秋琦等,譯.北京:電子工業(yè)出版社,2005.Rafael C.Gonzalez,Richard E.Woods,Steven L.Eddins,et al..Digital Image Process(Matlab Vision)[M].Trans.Ruan Qiuqi,etal..Beijing:Electronic Industry Press,2005.
[3] 孫杰,朱世強,賴小波.一種高效的視覺導(dǎo)航攝像機標定方法[J].計算機工程,2010,(21):212-213.Sun Jie,Zhu Shiqiang,Lai Xiaobo.AMethod of Vision Based Navigation Camera and Effective Calibration[J].Computer Engineering,2010,36(21):212-213.
[4] 馬頌德,張正友.計算機視覺一計算理論與算法基礎(chǔ)[M].北京:科學(xué)出版社,1998.Ma Songde,Zhang Zhengyou.Computer Vision Algorithms and Theoryof Computation Basis[M].Beijing:Science Press,1998.
[5] 袁金剛,張艷寧,鄭江濱,等.運動捕獲系統(tǒng)中多攝像機布局優(yōu)化方法[J].微處理機.2009,(3):90-94.Yuan Jingang,Zhang Yanning,Zheng Jiangbin,et al..Multi-camera Layout Optimization Method for Motion CaptureSystem[J].Microprocessors,2009,(3):90-94.
[6] 周敬利,徐欣磊,韓云鋒.基于DSP的網(wǎng)絡(luò)攝像機硬件設(shè)計和仿真[J].微處理機,2008,(4):151-154.Zhou Jingli,Xu Xinlei,Han Yunfeng.The Designand Simulation of IPCamera Based on DSP[J].Microprocessors,2008,(4):151-154.
[7] 馮亮,謝勁松,李根,等.攝像機標定的原理與方法綜述[J].機械工程師.2016(1):18-20.FengLiang,XieJinsong,LiGen,etal..Reviewof CameraCalibration Principles and Methods[J].Mechanical Engineer,2016(1):18-20.
[8] 江祥奎,紀旭.基于OpenCV和Matlab的攝像機標定系統(tǒng)設(shè)計與實現(xiàn)[J].計算機與數(shù)字工程,2015(8):1516-1518+1535.Jiang Xiangkui,Ji Xu.Design and Implementation of Camera Calibration System Based on OpenCV and Matlab[J].Computer and Digital Engineering,2015 (8):1516-1518+1535.
Research on Camera Calibration Based on OpenCV
According to the principle of camera calibration,it puts forward a calibration technique based on OpenCV camera,and with the help of open-source computer vision library,OpenCV completes the calibration in VS 2008 development platform.The experiment proves that the calibration procedure based on OpenCV camera has the following advantages:high calibration accuracy,high computation efficiency and good cross platform portability,which can be effectively applied in the field of computer vision system.
OpenCV;Camera calibration;Linear camera model
10.3969/j.issn.1002-2279.2017.06.013
B
1002-2279-(2017)06-0058-04
黑龍江省教育廳科學(xué)技術(shù)研究項目(項目名稱:基于多視幾何的三維數(shù)字掃描系統(tǒng)關(guān)鍵技術(shù)研究,編號:12523051)
聶紅梅(1979-),女,黑龍江省通河縣人,講師,碩士,主研方向:計算機科學(xué)與技術(shù)。
2017-10-17