藍福明 楊宜民
(廣東工業大學自動化學院)
雙目立體視覺[1]作為計算機視覺領域中的一個重要分支,近年來取得了較快的發展。雙目立體視覺的主要任務之一就是從兩個攝像機分別捕獲的兩幅二維圖像信息出發,計算出三維空間中物體的相關幾何信息,并由此三維重建和識別物體。雙目立體視覺涉及的知識比較多,其中包括圖像采集和預處理、攝像機標定、立體匹配和三維重建等。而攝像機標定是雙目立體視覺中最關鍵、最復雜的部分。攝像機是雙目立體視覺系統獲取圖像信息的主要工具。通過實驗計算獲取攝像機內部和外部參數的過程稱為攝像機標定[2]。其中攝像機的幾何和光學參數,即為攝像機內部參數;攝像機相對于世界坐標系的方位,即為攝像機外部參數。
在現有的攝像機標定算法中,根據標定過程對標定物的要求不同,可將攝像機的標定分為傳統標定方法[3]、自標定方法[4]和基于主動視覺的標定方法[5]。傳統標定方法標定精度高,但對實驗環境要求較高,不易實現;自標定法靈活性強,對實驗環境要求低,容易實現,但其算法魯棒性差,精度水平無法與傳統的標定方法相比;基于主動視覺的標定法其算法簡單,魯棒性高,但是系統的成本高且實驗條件要求高,不適合運動參數未知或無法控制的場合。
在雙目立體視覺系統中,左右兩個攝像機均符合針孔成像模型[6]。雙目視覺的模型如圖1所示,左右攝像機的圖像點lp、rp與點P對應。

圖1 雙目視覺模型
從三維空間物體表面上點的幾何位置到該點在圖像上所對應點的位置之間的轉換關系如圖2所示。它是由攝像機成像幾何模型決定的,通過四個坐標系之間的相互轉化來實現,即

其中, dx和 dy表示像素點的大小; (u0, v0)為點 O1在圖像像素坐標系中的位置(即基準點);f為攝像機焦距,和v0只與攝像機的內部結構有關(即為內部參數);R為3×3階的正交單位矩陣,t為三維平移向量,R3×3和 t3×1完全由攝像機坐標系相對于世界坐標系的方位決定(即為外部參數)。其中可記內部參數矩陣A為:

圖2 坐標系間的相互轉化流程

根據文獻[7]中有關對式(3)的化簡求解,可得到一個與 sl和 sr無關的和的關系式,這就是極線約束。故由標定點在左右攝像機坐標系的坐標和,可得到雙目立體視覺攝像機外部參數的旋轉矩陣和平移向量
采用本文的方法標定雙目視覺攝像機分兩步:
1) 結合 OpenCV[8]編程實現對攝像機的內部參數在線標定;
2) 利用本質矩陣反解得到雙目立體視覺系統攝像機的外部參數。
用C語言并結合OpenCV函數編程分別對左右兩個攝像機的內部參數進行在線標定,以棋盤格作為標定模板,棋盤每小格的大小為20 mm×20 mm,格數為8×8格,角點(標定點)數為49個,見圖3。

圖3 標定模板
攝像機內部參數的標定過程可分為如下步驟:
1) 讀取一組用于標定實驗的圖像數據。使用采集函數QueryFrame()獲取視頻中的一幀圖片,反復調用此函數,共采取20幅光軸互不平行的圖像;
2) 找到標定點并初步得到標定點坐標值。將步驟 1)中采集到的每幅圖片數據分別代入到cvFindChessboardCorner()函數,找到棋盤格角點的位置,即為標定點;
3) 進一步精確得到標定點的亞像素級坐標值并保存。對步驟 2)中找到的角點坐標值再代入cvFindCornerSubPix()函數,進一步精確得到角點的亞像素級坐標值并保存;
4) 得到兩個攝像機內部參數矩陣。將步驟 3)中得到的亞像素角點坐標值代入cvCalibrateCamera2()函數,對兩個攝像頭分別進行內部參數標定,可得到左右兩個攝像機的內部參數矩陣分別為Al和Ar。
文獻[9]介紹了基礎矩陣F和本質矩陣E的基本推導。引入基礎矩陣F對式(3)進行簡化得:

當攝像機的內部參數 Ar和 Al已知時,由式(4)可得=0,其中E=RS,即為本質矩陣,E只與雙目立體視覺攝像機的外部參數有關。
由上述可知,兩臺攝像機的相對位置關系與本質矩陣幾乎是等價的。也就是說,給出了雙目視覺系統攝像機的外部參數R和t就等于給出了本質矩陣E;反之,若給出了本質矩陣E,則攝像機外部參數R和t也就確定了。由本質矩陣E的性質可知,它具有5個自由度且秩為2,根據矩陣分析知識可知其可以分解成一個滿秩的旋轉矩陣 R和一個平移反對稱矩陣T(由t中的元素構成),且分解為唯一的,最多相差一個常數比例因子λ。其中向量 t =(tx, ty, tz)T,矩陣T定義為
故可將攝像機外部參數的求解步驟分為如下:
1) 特解E0的求解

其中 a11,a21,…,a33為本質矩陣E的9個要求解的未知數元素。式(5)為齊次線性方程組,故需要9個不同的匹配點的坐標即可求解出9個未知數元素。依據線性代數理論可知,|E| =0,則方程組有無窮解,故若找到該方程組的一個特解E0,那么其通解的形式是,其中λ為一待定常數。令 a33= 1 ,代入式(5)化簡可得:

則方程組變為非齊次的,故存在唯一的解,可用最小二乘法求得方程組的解。
將標定模板上的N(8≤N≤49)個標定點對應的左右圖像像素坐標點(即由2.1的步驟3)中角點的亞像素級坐標值)的齊次坐標(i=1,…,N)代入式(6)得: AX= -b,其中A是一個N×8的系數矩陣,是一個8×1的解向量,b是元素全為1的N×1的向量,則方程組的解為,即可求特解E0。
2) 求解常數λ
λ值為世界坐標系中兩標定點之間的距離與攝像機坐標系下對應兩點之間的距離的比值。其中世界坐標系中兩標定點之間的距離,可由標定模板中兩角點之間的距離求得,而攝像機坐標系下對應兩點之間的距離,可由2.1的步驟3)得到的亞像素級坐標值角點中對應兩點之間的距離求得。
3) 攝像機外部參數R和t的求解
實驗采用Logitech C160型攝像頭2個,圖像分辨率為640×480像素。根據上述標定原理和步驟,在Windows XP平臺下利用Visual Studio 2008開發一個基于OpenCV 2.2的攝像頭內部參數標定和外部參數矩陣求解標定程序。實驗時將攝像頭固定好,保證在標定過程中兩攝像頭之間無相對位移,測得兩攝像頭之間的基線b=18.3 cm。
按照2.1中的步驟標定出兩個攝像頭的內部參數矩陣分別為:

按照2.2中的步驟,通過編程實現對矩陣的運算求解得到雙目視覺中攝像頭的外部參數為:


由以上的數據可以看出,左右攝像頭的焦距基本相同,且每個攝像頭的 fx和 fy也相近;攝像頭拍攝的圖像分辨率為640×480,同時內部參數矩陣所反映的光心點坐標也基本在點(320,240)附近;另外在實驗時兩攝像頭要盡量平行對齊,從攝像頭外部參數的旋轉矩陣R可知該矩陣比較接近三階單位矩陣;這些都基本符合預期的標定結果。但為了更加合理準確地衡量標定誤差,還需要利用標定結果進行重投影誤差計算。假設 (u1i, v1i)為角點檢測得到的亞像素級圖像坐標,( u2i, v2i)為實際三維坐標重投影計算得到的圖像坐標。利用式(7)計算重投影誤差(其中n為成功找到角點的總個數),通過計算得到的左攝像頭的重投影誤差為0.407486,右攝像頭的重投影誤差為0.397516,誤差級別均小于一個像素級。

利用OpenCV及矩陣求解運算開發的攝像機標定程序具有標定結果精確、運行效率高等特性,此外利用C語言編程的跨平臺移植性也較好。而在實際應用場合,標定結果的精確與否將直接影響系統后續工作的相關測量精度,故還應結合實際要求,在標定精度和算法魯棒性方面做進一步的研究,未來的重點應放在有關標定方法各個步驟的優化方面。
[1] 黨樂.基于雙目立體視覺的三維重建方法研究[D].西安:長安大學,2009.
[2] 邱茂林,馬頌德,李毅.計算機視覺中攝像機定標綜述[J].自動化學報,2000,26(1):43-55.
[3] 于泓.攝像機標定算法研究[D].濟南:山東大學,2006.
[4] 孟曉橋,胡占義.攝像機自標定方法的研究與進展[J].自動化學報,2003(1):110-122.
[5] 胡占義,吳福朝.基于主動視覺攝像機標定方法[J],計算機學報,2002,25(11):1149-1156.
[6] 王興昌.基于雙目立體視覺的三維重建技術研究[D].合肥:安徽大學,2012.
[7] 張廣軍.機器視覺[M].北京:科學出版社,2005:110-112.
[8] Bradski G , Kaehler A .學習OpenCV(中文版)[M].于仕琪,劉瑞禎,譯.北京:清華大學出版社,2009.
[9] Sonka M, Hlavac V, Boyle R. Image Processing, Analysis and Machine Vision (2nd Edition) [M]. New York: Thomson Press,2002:460-469.