杜冬梅,田昆鵬,姜 磊,王小研
(1.河南理工大學(xué) 電氣工程與自動化學(xué)院,河南 焦作 453000; 2.江蘇大學(xué) 生物工程研究院,江蘇 南京 212000;3.中國平煤神馬集團 勘探工程處,河南 平頂山 467000)
在機器視覺應(yīng)用中,常常從攝像機獲取的圖像信息出發(fā)計算三維空間物體的幾何信息,并由此識別和提取物體的特征,而物體三維信息與圖像的對應(yīng)關(guān)系是由攝像機成像的幾何模型決定的,這些幾何模型參數(shù)就是攝像機參數(shù),通過實驗和計算得到的攝像機參數(shù)的過程就是攝像機標(biāo)定.攝像機標(biāo)定作為機器視覺最基礎(chǔ)的部分,已形成了很多方法,理論研究也已經(jīng)很成熟,當(dāng)前研究的重點就是針對實際應(yīng)用問題找到簡便、快速、準(zhǔn)確的標(biāo)定方法[1-3].
本研究所用的Matlab標(biāo)定工具箱可以在Windows系統(tǒng)、Linux系統(tǒng)和Unix系統(tǒng)下使用,而且不需要任何最優(yōu)化工具箱.用戶接口方便靈活,在攝像機標(biāo)定時使用非常簡單[4].
圖1 攝像機標(biāo)定坐標(biāo)系
設(shè)P(Xw,Yw,Zw)是一個點的世界坐標(biāo),P(Xc,Yc,Zc)是該點在攝像機坐標(biāo)系下的坐標(biāo),P(x,y)是該點在圖像平面坐標(biāo)系中的物理坐標(biāo),P(u,v)是該點在圖像平面坐標(biāo)系中的像素坐標(biāo),如圖1所示.
攝像機模型的選擇直接影響后面的標(biāo)定結(jié)果,常用的針孔模型忽略了透鏡厚度和畸變[5]的存在,所以不能很好地反映攝像機的實際情況.在OpenCv[6]的攝像機標(biāo)定算法中,考慮了攝像機模型的徑向和切向畸變,引入的Tsai攝像機模型更接近透鏡的實際.在該攝像機模型中[7-9],將空間目標(biāo)點P在世界坐標(biāo)系中的坐標(biāo)值P(Xw,Yw,Zw)變換為攝像機坐標(biāo)中坐標(biāo)P(Xc,Yc,Zc):
(1)
其中,R為一個R3×3旋轉(zhuǎn)矩陣,t為一個R3×1平移向量.把攝像機坐標(biāo)系中的坐標(biāo)P(Xc,Yc,Zc)在針孔攝像機模型中進行規(guī)范化處理,得到圖像平面坐標(biāo)系中的物理坐標(biāo)P(x,y):
(2)
考慮透鏡的徑向畸變和切向畸變,圖像平面坐標(biāo)系中物理坐標(biāo)P(xp,yp)為
(3)
其中,k1和k2是徑向畸變系數(shù),p1和p2是切向畸變系數(shù),r2=x2+y2.再把圖像平面坐標(biāo)系中物理坐標(biāo)P(xp,yp)轉(zhuǎn)換為像素坐標(biāo)P(u,v):
(4)
其中,fx=f·s/△x,fy=f/△y,(u0,v0)是基準(zhǔn)點(通常在圖像的中心),f為攝像機的有效焦距,s為比例因子,△x為計算機圖像在水平方向(x方向)上相鄰兩像素之間的有效距離(mm/pixel),△y為計算機圖像在垂直方向(y方向)上相鄰兩像素之間的有效距離(mm/pixel).
上述結(jié)果用齊次坐標(biāo)等價表示為
s·p=M1M2P,
(5)
其中,p=(u,v,1)T為圖像像素點的齊次坐標(biāo),P=(X,Y,Z,1)T為空間點的齊次坐標(biāo),M1為攝像機的內(nèi)參矩陣,M2為外參矩陣,這樣就得到了一個圖像點和空間點之間的投影關(guān)系.
自制平面標(biāo)定模板,設(shè)定模板中正方形小格子的寬度和數(shù)目.在該實驗中,采用8×8的平面標(biāo)定模板,模板的小正方形格子的邊長為16 mm,攝像機輸出平面的分辨率為640×480.
運行Matlab將TOOLBOX-calib文件夾添加到Matlab工作路徑中,讀取所拍攝的20張在不同姿態(tài)下的標(biāo)定模板圖像,利用攝像機標(biāo)定工具箱進行標(biāo)定.
運行主函數(shù)calib_gui, 顯示選擇模式窗口.在該窗口中選擇標(biāo)準(zhǔn)模式,當(dāng)遇到OUT OF MEMORY 錯誤時,可以選擇標(biāo)準(zhǔn)模式和內(nèi)存節(jié)電模式,兩種模式操作可以完全兼容,也可以進行內(nèi)部轉(zhuǎn)換.點擊模式窗口的standard將出現(xiàn)工具箱的標(biāo)定窗口,接下來就可以進行攝像機標(biāo)定了.首先,在標(biāo)定工具箱中點擊Read images讀入所有標(biāo)定的圖像,然后點擊Extract grid corners進行角點提取,圖2為其中任一標(biāo)定模板的角點提取示意圖,圖3為校正后的圖像,標(biāo)定前后角點位置與誤差見表 1.
圖2 未校正的圖像
圖3 校正后的圖像
表1 校正前后角點坐標(biāo)比較
從圖2中可以看到預(yù)測的網(wǎng)格的角點與實際的網(wǎng)格的角點相差很大,原因是圖像失真了.為了幫助系統(tǒng)準(zhǔn)確地找到角點的位置,輸入一個校正的系數(shù)Kc=0.3,其值在-1和1之間,經(jīng)過多次的校正得到圖3所示的圖像,經(jīng)計算比較接近實際值則進行角點亞像素提取,如圖4所示,實驗結(jié)果如表2所示.
表2 攝像機參數(shù)表
圖4 成功提取亞像素角點
從實驗結(jié)果可以看出,此標(biāo)定方法界面友好、操作方便、簡單易懂、設(shè)置靈活,不需要復(fù)雜設(shè)備且可視化效果好,具有較高的精度和魯棒性.綜上所述,基于Matlab標(biāo)定工具箱的攝像機標(biāo)定具有較好的應(yīng)用前景.但是當(dāng)標(biāo)定的圖像大量失真時,再進行校正,程序可能無法自動計算出在網(wǎng)格的正方形個數(shù),在這種情況下就必須用手動方式輸入,會比較繁瑣,所以如何自動校正大量失真圖像是下一步研究的方向.
參考文獻:
[1] 馬頌德,張正友.計算機視覺——計算理論與算法基礎(chǔ)[M].北京:科學(xué)出版社,2003.
[2] 邱茂林,馬頌德,李毅.計算機視覺中攝像機定標(biāo)綜述[J].自動化學(xué)報,2000,26(1):43-55.
[3] 張廣軍.機器視覺[M].北京:科學(xué)出版社,2004.
[4] 余成波.數(shù)字圖像處理及Matlab實現(xiàn)[M].重慶:重慶大學(xué)出版社,2003.
[5] 田原,楊浩,劉四陽.CCD攝像機鏡頭薄棱鏡畸變研究[J].東北電力大學(xué)學(xué)報,2008,13(2):321-336.
[6] 高文娟,李健.基于Opencv的攝像機標(biāo)定問題研究[J].計算機與數(shù)字工程,2008,36(12)128-130.
[7] Zhang Z Y. A flexible new technique for camera calibration[J].IEEE Transactions on Pattern Analysis and Machine Intelligence,2000,22(11):1330-1334.
[8] Jean-Yves Bouguet Camera Calibration Toolbox for Matlab [EB/OL].http://www.vision.caltech.edu/bouguetj/calib_doc,2004.
[9] 靳志光,衛(wèi)建東,張冠宇,等.基于LCD的相機標(biāo)定新方法[J].遙感應(yīng)用,2008(1):87-90.