王媛媛, 劉學(xué)成, 伍鳳娟
(西安科技大學(xué) 電氣與控制工程學(xué)院,陜西 西安 710054)
目前,國(guó)內(nèi)外主要的三維(3D)圖像數(shù)據(jù)采集技術(shù)有空間結(jié)構(gòu)光編碼技術(shù)、飛行時(shí)間(time of flight,TOF)法和雙目視覺(jué)法3種。其中,雙目視覺(jué)具有適應(yīng)室內(nèi)和室外,不怕陽(yáng)光干擾,適應(yīng)遠(yuǎn)距離采集景深數(shù)據(jù)等優(yōu)點(diǎn),但因計(jì)算量大,限制了其在低計(jì)算能力、低功耗和高實(shí)時(shí)性場(chǎng)合的應(yīng)用。近年來(lái),國(guó)內(nèi)外已提出了一些優(yōu)化的雙目視覺(jué)實(shí)現(xiàn)方法,大多基于高性能數(shù)字信號(hào)處理器(digital signal processor,DSP)、多核中央處理單元(central processing unit,CPU)并行或者直接進(jìn)行顯卡編程用統(tǒng)一計(jì)算設(shè)備架構(gòu)(compute unified device architecture,CUDA)進(jìn)行加速。隨著電子技術(shù)的發(fā)展,現(xiàn)場(chǎng)可編程門陣列(field programmable gate array,FPGA)在數(shù)字信號(hào)處理領(lǐng)域應(yīng)用愈加廣泛,其設(shè)計(jì)的靈活性和可并行執(zhí)行性,使得經(jīng)過(guò)并行優(yōu)化的算法應(yīng)用于FPGA中能夠成倍提升執(zhí)行效率[1,2]。
本文主要針對(duì)雙目視覺(jué)中的攝像機(jī)標(biāo)定方法、立體匹配算法以及三維重構(gòu)算法進(jìn)行研究,并利用FPGA作為計(jì)算平臺(tái),實(shí)現(xiàn)了場(chǎng)景深度信息的獲取,具有很好的三維顯示效果。
雙目視覺(jué)技術(shù)模擬人眼視覺(jué)系統(tǒng),依據(jù)計(jì)算機(jī)視覺(jué)相關(guān)的理論和技術(shù),利用雙目攝像頭采集同一場(chǎng)景不同位置的左右路圖像,對(duì)場(chǎng)景進(jìn)行三維重建[3,4]。1)由于攝像頭存在加工誤差,使得原始圖像存在微小畸變,因此,需要對(duì)圖像采用畸變校正和極線校正補(bǔ)償硬件誤差預(yù)處理,以及標(biāo)定攝像機(jī)。標(biāo)定方法采用雙目圖像預(yù)處理算法實(shí)現(xiàn)。2)當(dāng)要對(duì)兩相機(jī)圖像重疊部分的每個(gè)像素點(diǎn)均給出一個(gè)視差和距離時(shí),難以確定兩相機(jī)圖像上實(shí)際場(chǎng)景中的某個(gè)點(diǎn)在相機(jī)傳感器上的投影所對(duì)應(yīng)的像素,故需進(jìn)行立體匹配。在求得匹配像素后即可計(jì)算視差,結(jié)合雙目的外參即可對(duì)圖像中的像素點(diǎn)進(jìn)行距離計(jì)算。
雙目視覺(jué)系統(tǒng)圖像預(yù)處理部分有2個(gè)作用:去除圖像噪聲;校正圖像畸變。去噪采用中值濾波算法實(shí)現(xiàn);校正的處理實(shí)現(xiàn)單相機(jī)的畸變校正和雙目整體的水平對(duì)齊校正,為保證實(shí)時(shí)性同時(shí)減少資源占用,具體實(shí)現(xiàn)時(shí)兩個(gè)校正處理由一個(gè)模塊實(shí)現(xiàn)[5]。
1)中值濾波原理
中值濾波即將目標(biāo)像素點(diǎn)與其周圍相鄰的8個(gè)像素以亮度為依據(jù)排序,取序號(hào)為5的像素亮度值替換原目標(biāo)像素點(diǎn)的亮度值,及對(duì)圖像平滑處理,去除像素點(diǎn)原本的極大或極小值。中值濾波有利于降低暗環(huán)境下攝像頭自動(dòng)亮度增益功能產(chǎn)生的白噪聲或椒鹽噪聲。
2)雙目畸變校正和極線校正
使用OpenCV進(jìn)行單目相機(jī)標(biāo)定,計(jì)算出相機(jī)內(nèi)參數(shù):內(nèi)參矩陣(fx,fy,u0,v0)和畸變系數(shù)。校正徑向畸變和切向畸變公式為
r2=x2+y2
(1)
式中k1~k6為一到六階徑向畸變系數(shù),實(shí)際情況下取前三階即可滿足校正要求;p1和p2為切向畸變系數(shù)。
雙目極線校正又稱平行校正,主要用于將相機(jī)左右光軸完全平行和左右視圖的水平對(duì)齊處理。已知OpenCV立體校正后會(huì)輸出一個(gè)投影矩陣Pl、Pr和旋轉(zhuǎn)矩陣Rl、Rr,旋轉(zhuǎn)矩陣可以使兩幅圖像滿足極線約束,而投影矩陣可以使兩個(gè)平面映射到同一平面上[6]。
AD-Census算法來(lái)源于SAD和Census 2種算法的結(jié)合,在SAD和Census算法分別實(shí)現(xiàn)之后,將兩者結(jié)合僅需要在2種算法的代價(jià)聚合一步將兩者單獨(dú)的代價(jià)換為2個(gè)算法加權(quán)求和后的共同匹配代價(jià)[7~10]
C(p,d)=λCensusCCensus(p,d)+λADCAD(p,d)
(2)
為減少計(jì)算量同時(shí)也增加后期三維點(diǎn)云的準(zhǔn)確性,圖像三維點(diǎn)云處理中需要剔除錯(cuò)誤點(diǎn)云。在已知圖像點(diǎn)云距離范圍時(shí),可以簡(jiǎn)單排除掉超出范圍的點(diǎn)云,還可以使用濾波等算法剔除掉錯(cuò)誤點(diǎn)云[11,12]。
驗(yàn)證系統(tǒng)硬件包含攝像頭、FPGA開(kāi)發(fā)以及下位機(jī)。雙目攝像頭使用了2個(gè)OV7725 CMOS攝像頭,左右平行放置,攝像頭板通過(guò)40Pin 柔性印刷電路板(flexible printed circuit,FPC)排線與FPGA開(kāi)發(fā)板連接,攝像頭板的電源由FPGA開(kāi)發(fā)板的5V輸出提供。攝像頭分辨率為640像素×480像素(約30萬(wàn)像素),中心距為7.0 cm,輸出格式為RGB565,位寬為8 bit。在FPGA開(kāi)發(fā)板上使用硬件編程語(yǔ)言實(shí)現(xiàn)圖像預(yù)處理,在下位機(jī)上使用C語(yǔ)言實(shí)現(xiàn)立體匹配算法及點(diǎn)云處理。
2.1.1 中值濾波算法的實(shí)現(xiàn)
采用FPGA實(shí)現(xiàn)中值濾波,最關(guān)鍵的就是實(shí)現(xiàn)3×3單元的排序操作。但在排序?qū)ふ抑兄抵?,要先獲得3×3的像素塊。由于所用的CMOS攝像頭一次只輸出一個(gè)像素的RGB值且每一行從左到右,在列數(shù)上從上到下輸出。其仿真模塊如圖1所示。要想構(gòu)造3×3的像素塊,則必須將前兩列的像素進(jìn)行緩存。設(shè)計(jì)采用了2行Shift-RAM IP核實(shí)現(xiàn),每個(gè)Shift-RAM的緩存深度均為1行的像素?cái)?shù),即640。

圖1 中值濾波模塊仿真波形

圖2 實(shí)際拍攝效果
圖2為單獨(dú)使用FPGA實(shí)現(xiàn)雙攝像頭采集圖像在液晶屏上的顯示效果。可以看出:加上中值濾波算法的圖像較未加中值濾波的圖像清晰度更高,噪聲更小。
2.1.2 雙目校正模塊整體實(shí)現(xiàn)
采用投影矩陣的參數(shù)對(duì)原始坐標(biāo)進(jìn)行第一次變換,將原始坐標(biāo)轉(zhuǎn)換到以投影矩陣中焦點(diǎn)坐標(biāo)為原點(diǎn)的坐標(biāo);第二次變換將像素點(diǎn)映射到三維空間并進(jìn)行旋轉(zhuǎn);第三次變換對(duì)徑向畸變校正(校正的畸變參數(shù)中切向畸變參數(shù)為0,故不進(jìn)行切向畸變校正);采用原始的相機(jī)內(nèi)參矩陣將坐標(biāo)映射到原圖的像素坐標(biāo),分別用兩個(gè)與原圖同尺寸的矩陣存儲(chǔ)用于重映射的坐標(biāo)。即可通過(guò)重映射等操作由原圖生成校正后的圖像。
本文采用實(shí)時(shí)計(jì)算重映射坐標(biāo)值,將基于ROM的坐標(biāo)讀取改為基于重映射坐標(biāo)計(jì)算模塊的坐標(biāo)發(fā)生,具體方法如圖3所示,可以實(shí)現(xiàn)較少的資源占用,圖4為雙目校正前后效果。

圖3 雙目校正模塊框圖

圖4 雙目校正前后效果對(duì)比
通過(guò)C++編程配合OpenMP并行庫(kù)實(shí)現(xiàn)AD-Census算法,在下位機(jī)上處理。圖5為設(shè)計(jì)的雙目深度攝像頭實(shí)際效果。可知:對(duì)擋板、黑色衣物等無(wú)法計(jì)算出有效的深度信息,而對(duì)于紋理較明顯的桌椅邊緣等區(qū)域有明顯的視差數(shù)據(jù)。該視差圖效果不佳的原因主要有2點(diǎn):1)AD-Census中,對(duì)于不同分辨率的相機(jī)、不同距離的目標(biāo)物要達(dá)到較好的視差效果均需要調(diào)試參數(shù)。如SAD窗口大小,滑動(dòng)窗搜索的范圍以及代價(jià)聚合時(shí)SAD和Census的權(quán)重;2)攝像頭本身質(zhì)量一般,即便經(jīng)過(guò)校正仍存在輕微的以圖像中心為圓心的橢圓形光暈。

圖5 AD-Census算法實(shí)際效果
通過(guò)AD-Census計(jì)算之后可以得到一幅深度為16位的視差圖,視差值與實(shí)際場(chǎng)景中的像素點(diǎn)和攝像頭的距離相對(duì)應(yīng),測(cè)試均在實(shí)驗(yàn)室內(nèi)進(jìn)行,能夠確定最大場(chǎng)景距離,且SAD部分具有最大視差設(shè)置,其決定了最小距離,同時(shí)測(cè)試時(shí)一般避免使雙目攝像頭距待掃描的場(chǎng)景過(guò)近,即可確定一個(gè)最小距離。用確定的最大距離和最小距離結(jié)合雙目標(biāo)定中的攝像頭外參Q即可得到要保留的最大視差和最小視差,隨后將視差圖上不在設(shè)定范圍內(nèi)點(diǎn)的視差設(shè)置為0,即可剔除大部分錯(cuò)誤點(diǎn)。點(diǎn)云處理庫(kù)(point cloud library,PCL)中提供了點(diǎn)云的一些基本處理方法,可以比較容易地實(shí)現(xiàn)三維點(diǎn)云地處理,PCL中的Statistical Outlier Removal函數(shù)可以移除點(diǎn)云中的離群點(diǎn),使用VoxelGrid體素格濾波器可以將一個(gè)立方體格內(nèi)的點(diǎn)云合為一個(gè)點(diǎn)[13]。圖6為點(diǎn)云濾波與下采樣效果,可見(jiàn):經(jīng)過(guò)濾波后,點(diǎn)云的形態(tài)可以保留但點(diǎn)數(shù)大幅減少,為后期形態(tài)上的處理、拼接等操作提供了更多的方便。

圖6 點(diǎn)云濾波與下采樣效果
本文主要以FPGA開(kāi)發(fā)板和下位機(jī)為硬件平臺(tái),用Verilog HDL實(shí)現(xiàn)雙目圖像預(yù)處理算法,下位機(jī)CUDA編程實(shí)現(xiàn)立體匹配和點(diǎn)云處理算法。論述了雙目系統(tǒng)相關(guān)理論原理、雙目圖像預(yù)處理模塊基于FPGA平臺(tái)的設(shè)計(jì)實(shí)現(xiàn)、AD-Census算法的原理以及點(diǎn)云的三維濾波、多點(diǎn)云拼接相關(guān)原理和實(shí)現(xiàn)方法。最終可以實(shí)現(xiàn)以7幀/s的速度計(jì)算640×480大小的深度圖,經(jīng)過(guò)上位機(jī)進(jìn)一步處理,可以將270°范圍內(nèi)以1.8°為間隔的150幅深度圖轉(zhuǎn)換為點(diǎn)云,并拼接出270°左右視野內(nèi)的三維場(chǎng)景。
參考文獻(xiàn):
[1] Smisek J,Jancosek M,Pajdla T.3D with Kinect[J].Advances in Computer Vision & Pattern Recognition,2013,21(5):1154-1160.
[2] 王文強(qiáng).基于FPGA的雙目視覺(jué)系統(tǒng)研究[D].北京:清華大學(xué),2015:12-30.
[3] 張永平.嵌入式雙目視覺(jué)系統(tǒng)和三維重建技術(shù)研究[D].杭州:杭州電子科技大學(xué),2011:10-25.
[4] 王 欣,袁 坤,于 曉,等.基于運(yùn)動(dòng)恢復(fù)的雙目視覺(jué)三維重建系統(tǒng)設(shè)計(jì)[J].光學(xué)精密工程,2014,22(5):1380-1386.
[5] 布拉德斯基,克 勤.學(xué)習(xí)OpenCV:中文版[M].于仕琪,劉瑞禎,譯.北京:清華大學(xué)出版社,2009:10-25.
[6] 姜宏志,趙慧潔,梁宵月,等.基于極線校正的快速相位立體匹配[J].光學(xué)精密工程,2011,19(10):2520-2525.
[7] Isakova N,Basak S,S?nmez A C.FPGA design and implementation of a real-time stereo vision system[C]∥International Symposium on Innovations in Intelligent Systems and Applications,IEEE,2012:1-5.
[8] 雷 磊,鄭江濱,宋雪梅.基于改進(jìn)Census變換的立體匹配算法[J].計(jì)算機(jī)應(yīng)用研究,2013,30(10):3185-3188.
[9] Nadia Baha,Hakim Touzene,Slimane Larabi.FPGA implementation for stereo matching algorithm [C]∥Science and Information Conference,2013:448-454.
[10] 馬頌德,張正友.計(jì)算機(jī)視覺(jué):計(jì)算理論與算法基礎(chǔ)[M].北京:科學(xué)出版社,1998:34-40.
[11] 劉廣飛,周文暉,戴國(guó)駿.基于FPGA的雙目視覺(jué)同步采集系統(tǒng)[J].杭州電子科技大學(xué)學(xué)報(bào),2011,31(3):22-25.
[12] 王 森,楊克儉.基于雙線性插值的圖像縮放算法的研究與實(shí)現(xiàn)[J].自動(dòng)化技術(shù)與應(yīng)用,2008,27(7):44-45.
[13] 姚頑強(qiáng),藺小虎,馬 飛,等.基于改進(jìn)坐標(biāo)增量的點(diǎn)云數(shù)據(jù)壓縮算法[J].西安科技大學(xué)學(xué)報(bào),2016(6):849-856.