衛欽智,陳 松
(中國科學技術大學 國家示范性微電子學院,安徽 合肥 230026)
雙目立體視覺是一種重要的虛擬現實技術,通過模擬人類雙眼的成像原理,即由左右兩臺攝像機拍攝同一場景,得到左右兩幅圖像,在同一設備中顯示出來。
目前市場上的所有便攜設備,諸如手機、平板、筆記本電腦等,都配備了具有強大功能的普通或者廣角攝像頭,獲取更多信息的同時也帶來視頻圖像的不同程度的畸變,畸變的引入不符合人眼的視覺感官,也不利于對圖像進行特征提取、圖像識別、圖像分割等后續的處理。為了消除畸變,通常假設一個包含徑向和切向畸變的模型[1],利用該模型校正圖像。因此,圖像校正一般也作為圖像處理中的預處理操作。
一般,左右攝像機在實際中的擺放不完全滿足理想配置,導致獲得的左右圖像不僅含有畸變,還存在一定的垂直視差,不利于后續的立體匹配[2]或者三維重建,所以合理的雙目校正非常關鍵。基于FPGA的硬件雙目圖像幾何校正處理方式不僅效果理想,還可以滿足對實時性具有更高要求的場合。由于雙目圖像幾何校正模型具有較高的計算復雜度,傳統的硬件雙目圖像校正方式通常是基于查找表來實現雙目畸變圖和校正圖像之間的映射[3],避免了在硬件內部復雜的計算,但是會消耗大量的緩存去存儲原始的畸變圖像,不適用于高分辨率雙目圖像。
鑒于以往的幾何校正模型較高的計算復雜度,不適合硬件實現以及需要消耗大量緩存的缺點,本文設計了一種循環式緩存方式[4]存儲圖像和一種適合硬件實現的高效的雙目幾何校正模型。
圖像產生幾何畸變是指像素點在空間中發生位移,造成圖像局部的變形。造成幾何畸變的主要原因有光敏器件質量差、相機視場角度問題、視覺系統理論誤差等。對于雙目相機而言,還存在因左右相機空間位置差異和極線不平行造成的相同物體的成像點偏離理論位置,給雙目圖像匹配帶來誤差的問題。針對左右相機的空間位置變形,也需要對左右圖像進行立體校正,減少后續深度信息計算誤差。
如圖1所示,Fl和Fr為左右相機光心,它們的連線即為基線,基線與左右成像平面的交點分別為對極點el和er,目標點p在原始畸變圖中的位置分別為左圖中的l1和右圖中的r1,el和l1連線即為左極線,er和r1連線即為右極線,Rl和Rr為p點在校正圖中的位置。
經過雙目校正后得到的無畸變圖像,使得左、右兩幅圖無畸變,目標點在校正后的兩幅圖像中對齊無垂直差距,左右極線二維坐標系重合,便于對校正好的雙目圖像進行立體匹配等操作。

圖1 雙目校正示意圖
本文設計的雙目校正幾何模型主要是針對具有桶形畸變的廣角雙目圖像,使得校正后的圖像視頻呈現出更好的視覺效果,更加符合人類感官,便于對獲得的信息進行立體匹配、目標識別、對象跟蹤、圖像分割和圖像特征提取等后續處理。
圖2為雙目圖像幾何校正流程。相機標定法:用于標定單目相機的網格模板標定法,獲取畸變校正參數后進行畸變校正;基于MATLAB標定工具箱[4-5]的雙目相機標定法,得到外部標定參數進行雙目圖像立體校正。根據畸變模型和空間位置關系,利用雙線性插值[6-7]進行像素重建。

圖2 雙目校正結構流程圖
如果用f(x,y)來表示輸入的畸變圖像的灰度函數,同樣用g(x,y)來表示輸出的校正圖像的灰度函數,那么,輸入和輸出之間的空間點的對應關系就可以用數學方法來描述,其一般定義如下:
f(x′,y′)=g(x,y)=g[a(x,y),b(x,y)]
(1)
其中,x′=a(x,y),y′=b(x,y),x′、y′表示輸入的畸變像素點,x、y是輸出的校正圖像素點。為了描述相機的成像幾何關系,需要選定畸變校正模型并且對使用的雙目廣角相機進行標定,本文使用的標定方法有2種,分別為網格模板標定和基于MATLAB工具箱的黑白棋盤標定。
圖像映射通常被應用于縮放、平移、旋轉和拼接等多種圖像處理方式中[8]。圖像映射方式分為:向前映射和向后映射[9]。
向前映射:又稱像素移交映射,是一種由畸變圖像(輸入圖像)到校正圖像(輸出圖像)的映射方式。其在校正過程中可能出現映射超出索引維度,即由畸變圖像得到的校正圖像像素超出圖像分辨率維度,導致圖像像素丟失。
向后映射:向后映射是一種由校正圖像到畸變圖像映射,又稱圖像填充映射。已知輸出圖像像素(整點坐標)在原圖像中的坐標位置,通常是非整數坐標;利用畸變圖像中非整數坐標點周圍的整數坐標的像素的灰度值進行插值得到校正圖像中對應整數點的像素灰度值,一般不會導致像素浪費或丟失現象,實現時效率更高。因此,本文所采用的校正模型是基于向后映射的校正方式。圖3即為向后映射原理。

圖3 向后映射方式
畸變校正模型的選擇應該切合實際,需要考慮實現的效果和算法實現時的計算復雜度,更要考慮是否適合硬件實現及其資源消耗和實現效果。
校正模型實現時要準確對應所在坐標系。坐標系的變換順序為:相機坐標系→像素坐標系→圖像坐標系→像素坐標系,其中圖像坐標系用來實現畸變校正,輸入輸出對應圖像數據則是在像素坐標系中。
圖4給出了對應坐標系轉換關系,p為目標點,OcYcXcZc為相機坐標系,oxy是圖像坐標系,ouv是像素坐標系。

圖4 坐標系轉換關系圖
對于廣角相機產生的桶形畸變,其主要由徑向畸變和切向畸變組成。下面給出幾組適用于廣角相機的畸變校正模型:
(2)
公式(2)的模型考慮主要的桶形畸變中的徑向畸變量,復雜度大大降低,能達到基本校正效果,易于計算和實現,但是缺乏靈活性。
(3)
公式(3)模型精度高,效果理想,但是參數眾多,計算復雜度較高,硬件實現上沒有優勢,并且通常的桶形畸變以徑向畸變為主,即第一個括號內的值。故本文提出了一種更為適合硬件實現的畸變校正模型,見公式(4):
(4)
模型(4)參數數量適中,復雜度不高,適合硬件實現。
網格標定法,首先制作標準網格點圖,本文的網格點8×10的網格圖,由邊長為1 cm的正方形方格組成。
獲得網格點后,利用雙目相機拍攝對應網格點,得到畸變的網格圖,通過匹配標準網格和變形網格中的網格點,得到每個網格點的坐標偏移量,從而建立畸變圖和校正圖之間的幾何關系,求得畸變校正模型參數,圖5為對應網格標定流程。

圖5 網格標定流程圖
利用網格標定分別對模型(2)、(3)、(4)進行了驗證,模型(4)能有效去除畸變,并且適合硬件實現,同時,在4個校正參數中k1,k2,k3,k4不僅可以控制校正效果,還可以對圖像內容的損失作調整,因此選定了模型(4)作為畸變校正模型。
使用MATLAB標定工具箱對雙目相機進行標定,本文使用的是BOUGUET J Y發布的Calibration Toolbox for Matlab,與HEIKKILTI J和SILVEN O的四步標定法[10]也極為相似。其內部畸變模型與公式(3)大致相同,區別在于本文將坐標系轉換單獨處理。
本文主要是用標定工具箱的雙目標定確定外部參數,完成幾何校正模型中的立體校正環節。下面介紹本文雙目標定的實施過程:
(1)用雙目相機拍攝足量黑白棋盤圖,分別重命名為左圖像和右圖像;
(2)要標定雙目相機,首先要對單目相機內部參數進行標定,啟動單目標定程序,先讀入左圖的20幅圖依次進行標定,如圖6所示,將標定得到的結果分別命名保存,然后對右圖的20幅圖進行同樣操作,完成標定,得到左右2相機內部參數;

圖6 待標定的左右棋盤圖
(3)啟動雙目立體標定,加載左右相機內部標定參數,進行立體標定得到外部標定參數旋轉矩陣om和平移矩陣T,om、T都是3維列向量。
圖7給出了模擬的雙目相機的空間位置關系圖,可以用公式(5)的立體校正模型表示。根據左右相機之間位置關系得到右圖像相對于左圖像的新的坐標。
XR=R*XL+T
(5)
其中,XL,XR是左右圖像對應的三維坐標,R由om經羅德里格斯變換得到。

圖7 模擬的雙目相機位置關系
本文提出的雙目圖像硬件電路設計架構如圖8所示。

圖8 雙目圖像校正電路硬件架構圖
本文所提出的硬件架構,采用同步時鐘設計,具體步驟如下:
(1)使用隨機存取存儲器作為緩存設備,控制左右圖像的像素數據的寫入、讀出,并且基于隨機存取存儲器設計line-buffer控制模塊;
(2)計算幾何校正模型,將計算結果輸出至line-buffer模塊讀取像素信息,同時,將插值參數輸出至像素重建模塊;
(3)根據插值參數和來自line-buffer模塊的像素信息,利用雙線性插值進行像素重建硬件電路結構設計。
圖9所示是line-buffer控制模塊電路結構,左右圖像具有相同結構的line-buffer。line-buffer由指定數量隨機存取存儲器RAM組成,然后進行分組,每組由相同數量的RAM組成。RAM數量與圖像畸變大小有直接關系,畸變越大所需要的RAM就越多,本文采用的廣角相機具有一定幅度畸變,故需要一定數量的RAM用來緩存部分圖像數據信息。
寫入和讀出的控制模塊均相同,讀數據的信號是根據line-buffer得到來自畸變圖像和校正圖像之間對應像素的空間位置關系來決定。
本文幾何校正模型包括單目畸變校正模型和立體校正模型。左右圖像的單目畸變校正模型相同。首先將標定得到的畸變校正參數和外部參數做定點化處理,作為參數內置于硬件電路中,其中畸變校正參數k1、k2、k3、k4分別對應para_x0、para_x1、para_y0、para_y1。

圖9 line-buffer電路結構圖
圖10和圖11分別給出了幾何校正中單目畸變校正模型和立體校正模型的電路結構。畸變校正模型為6級流水線設計。將公式(4)展開,先處理3級流水線的乘法樹結構,然后處理3級流水線的加法樹結構,輸出畸變圖像與校正圖像之間的行里對應關系,整數部分給到line-buffer模塊作為讀信號去讀取相應數據,小數部分給到像素重建模塊作為插值參數。立體校正主要的作用在于做空間坐標變換,使得左右圖像坐標平行對齊,在硬件設計中根據實際情況做二維圖像坐標的變換即可。

圖10 畸變校正模型電路結構圖

圖11 立體校正電路結構
本模塊是基于雙線性插值設計的電路結構,雙線性插值原理如圖12所示。

圖12 雙線性插值原理圖
假設p點為所求像素,設f(x)為求對應點像素值的函數,其中x2-x1=1,y2-y1=1。
(6)
(7)
(8)
如圖13所示,左圖和右圖的像素重建模塊結構相同。電路結構采用2級流水線設計,對來自line-buffer模塊的4個圖像像素數據和來自幾何校正模型的插值參數重新插值計算校正后的像素。
本文使用的是分辨率為1 280×960的130°雙目廣角相機,雙目相機基線長為8.0 cm,焦距為2.6 mm。
實驗軟件版本為Xilinx Vivado2017.1,實驗平臺為Xilinx 7z020開發板,頻率為85 MHz。主要的資源消耗見表1,圖14 給出了雙目圖像左右原圖像和校正圖像對比結果。

表1 資源消耗表

圖13 像素重建電路結構圖

圖14 雙目校正左右原圖與校正圖對比
本文在研究前人關于雙目視覺校正的基礎上,設計了一種高效雙目圖像幾何校正硬件架構,效果較好,適合硬件實現。
對于具有較大畸變的雙目相機能夠完成雙目幾何校正,完成校正后圖像邊界不會出現大面積的黑色區域或像素缺失,將所有缺失都轉換到右圖像下邊界或者右邊界區域,利于后續的圖像裁剪,且分辨率損失較小,實現效果較好。