敖黎銘, 徐 曉, 李 熙
雙目視覺(jué)技術(shù)類(lèi)似于模擬人眼技術(shù),能夠較好地恢復(fù)出物體和場(chǎng)景的三維信息[1],但其運(yùn)算量大,限制了其在高精度快速圖像處理系統(tǒng)中的應(yīng)用[2]。在本項(xiàng)目組進(jìn)行的實(shí)際工程中,通過(guò)基于雙目的結(jié)構(gòu)光進(jìn)行高精度三維復(fù)原,因此,需要研究不同的軟、硬件方法[3]加速解算。
現(xiàn)在廣泛應(yīng)用的圖像處理系統(tǒng)根據(jù)圖像處理器的不同可以分為四種[4]:基于個(gè)人電腦(personal computer,PC)+采集卡的結(jié)構(gòu)、基于現(xiàn)場(chǎng)可編程門(mén)陣列(field programmable gate array,FPGA)的圖像處理系統(tǒng)、基于數(shù)字信號(hào)處理器(digital signal processor,DSP)的圖像處理系統(tǒng)和基于FPGA+DSP的圖像處理系統(tǒng)。其中基于PC +采集卡架構(gòu)擁有超高的處理速度,但便攜性不足,在某些場(chǎng)合并不適合應(yīng)用;基于FPGA的圖像處理系統(tǒng)由于過(guò)分要求針對(duì)特殊算法配置硬件結(jié)構(gòu),因此并不適合普遍的圖像處理情景;DSP是專(zhuān)門(mén)的數(shù)字信號(hào)處理器,算法開(kāi)發(fā)難度也比較低,但是單純的DSP既做功能控制,又做算法處理,會(huì)降低系統(tǒng)的算法處理效率[5]。
本文采用DM8168平臺(tái)將功能核集成在單片系統(tǒng)中[6,7],避免了單純的DSP同時(shí)進(jìn)行算法運(yùn)算和功能控制所導(dǎo)致的算法處理效率低的問(wèn)題,并采用了一系列優(yōu)化手段,尤其通過(guò)采用查表和級(jí)數(shù)展開(kāi)相結(jié)合的算法,大幅提高了高精度三維復(fù)原算法的運(yùn)算速度。
在實(shí)際應(yīng)用中,線激光垂直照射在物體表面,通過(guò)左右交叉放置相機(jī)拍攝得到2幅灰度圖像,通過(guò)兩幅圖像復(fù)原光條處的三維信息。首先分別對(duì)左右灰度圖進(jìn)行畸變校正,接著根據(jù)雙目單視面原理,將圖像像素坐標(biāo)轉(zhuǎn)換為角度坐標(biāo),轉(zhuǎn)換關(guān)系如圖1所示。本文以左相機(jī)為例對(duì)角度αL計(jì)算進(jìn)行優(yōu)化。
圖1 雙目相機(jī)等效模型
基于左右圖像灰度信息的特征匹配和匹配點(diǎn)的三維復(fù)原,具體匹配和三維復(fù)原的研究參考文獻(xiàn)[8]。
DM8168是一種多核異構(gòu)片上系統(tǒng),其集成的Cortex—A8處理器用于控制各個(gè)協(xié)處理器存儲(chǔ)、傳輸圖像等;集成的浮點(diǎn)C674xDSP處理器,用于實(shí)現(xiàn)用戶(hù)自定義算法[9]。在該平臺(tái)上所運(yùn)行的算法流程如圖2所示。
圖2 算法流程
在DM8168上采用了粗裁剪和細(xì)裁剪相結(jié)合的方法,將1 628×1 236轉(zhuǎn)換成1 628×40大小的圖像。以左圖為例,具體步驟為:
1)對(duì)1 628×1 236的圖像G(i,j)進(jìn)行二值化處理,得到黑白二值圖像B(i,j)
(1)
式中T為分割閾值,可預(yù)設(shè)或使用自適應(yīng)的方法確定。
2)尋找B(i,j)中白值(255)出現(xiàn)的次數(shù)在一定范圍內(nèi)(如1 628×10)的最大值,即找到光條主體位置,但考慮到光條照射物體時(shí)產(chǎn)生彎曲,以該最大值所處位置為中心,將灰度圖像G(i,j)裁剪為1 628×100大小的圖像Cut1_G(i,j),同時(shí)記下裁剪的起始列位置Left_Initial。
3)由于畸變校正與像素點(diǎn)在原圖G(i,j)中的位置相關(guān),因此,在得到裁剪的起始列位置Left_Initial后,便可直接對(duì)裁剪后的圖像Cut1_G(i,j)進(jìn)行畸變校正[10],得到畸變校正后的圖像Cut1_Co_G(i,j)。
4)提取光條。根據(jù)本文算法的特點(diǎn),在第一次裁剪并校正后的圖像Cut1_Co_G(i,j)的基礎(chǔ)上再一次進(jìn)行裁剪,得到圖像Cut2_G(i,k)
(2)
式中Tc為判斷是否為光條的閾值,可事先給定。同時(shí)在二維數(shù)組LeftReImageU[i][k]中存儲(chǔ)對(duì)應(yīng)行光條在原圖G(i,j)中的列坐標(biāo)。經(jīng)過(guò)2次裁剪后運(yùn)行時(shí)間較未裁剪減少了5.84 s,整個(gè)裁剪過(guò)程如圖3所示。
圖3 第二次裁剪示意
常規(guī)優(yōu)化包括2方面:1)指令級(jí)優(yōu)化。包括循環(huán)體展開(kāi)以便于軟件流水作業(yè),使用內(nèi)聯(lián)函數(shù)以減少函數(shù)調(diào)用,打開(kāi)編譯器優(yōu)化選項(xiàng),使用Const關(guān)鍵字以減少存儲(chǔ)器間的相關(guān)性等[11];2)算法級(jí)優(yōu)化。針對(duì)三角函數(shù)和根號(hào)運(yùn)算的優(yōu)化,由于DM8168沒(méi)有相應(yīng)的內(nèi)聯(lián)函數(shù),使用庫(kù)函數(shù)運(yùn)算較為緩慢,因此,針對(duì)三角函數(shù)和根號(hào)運(yùn)算的計(jì)算范圍使用簡(jiǎn)單的查表法。經(jīng)常規(guī)優(yōu)化后算法的運(yùn)行時(shí)間降為0.15 s。
圖1中坐標(biāo)轉(zhuǎn)換α計(jì)算較為復(fù)雜,進(jìn)一步優(yōu)化,以左圖為例,具體為
(3)
式中f為圖1中焦距LO的長(zhǎng)度,θ為左相機(jī)光軸與基線LR的夾角,ccx為主點(diǎn)的列坐標(biāo),ccy為主點(diǎn)的行坐標(biāo),以上參數(shù)均由相機(jī)標(biāo)定可得;x,y分別為某個(gè)像素點(diǎn)在圖片中行、列坐標(biāo)??紤]到該公式中除了x,y坐標(biāo)外的其他參數(shù)值在相機(jī)固定的情況下保持不變,因此,采用以部分空間換取時(shí)間的方法,通過(guò)級(jí)數(shù)展開(kāi)和查表法相結(jié)合代替直接計(jì)算,提高運(yùn)算效率。
具體評(píng)估公式如下
(4)
式中k1,k2為權(quán)重參數(shù),k1取0.8,k2取0.2;T0,V0分別為最適宜接受系統(tǒng)的計(jì)算所花費(fèi)的CPU時(shí)鐘周期數(shù)和表所占內(nèi)存大小;t,v分別為級(jí)數(shù)展開(kāi)后對(duì)運(yùn)算量和內(nèi)存大小的評(píng)估。V0取值為L(zhǎng)2cache大小,即256 kB,T0取值為1 000CPU時(shí)鐘周期。
對(duì)于時(shí)間t和表的大小v的評(píng)估采用如下辦法:1)將αL的計(jì)算公式通過(guò)二元函數(shù)的泰勒級(jí)數(shù)展開(kāi)分別展開(kāi)成本階、一階、二階3種情況,更高階的展開(kāi)由于項(xiàng)數(shù)的增多導(dǎo)致計(jì)算量增大,不予考慮,即可評(píng)估3種展開(kāi)情況下計(jì)算機(jī)計(jì)算所用的加載、加乘和跳轉(zhuǎn)次數(shù),結(jié)合DM8168開(kāi)發(fā)板的硬件結(jié)構(gòu)進(jìn)一步評(píng)估出具體所花費(fèi)的CPU時(shí)鐘周期數(shù);2)在3種展開(kāi)情況下分別尋求插值所引起最大誤差不超過(guò)某一精度要求時(shí)x,y的間隔,由此間隔便可算出此時(shí)表所占內(nèi)存大小。通過(guò)對(duì)3種情況的評(píng)估,找到使評(píng)估公式中的s值最小的點(diǎn)作為本文的運(yùn)算時(shí)間與內(nèi)存大小之間平衡結(jié)果。
式(3)展開(kāi)成本階、一階、二階后,其插值結(jié)果與真實(shí)結(jié)果的最大誤差值如圖4~圖6所示。
圖4 級(jí)數(shù)本階展開(kāi)后插值結(jié)果與真實(shí)值的最大α角誤差
圖5 級(jí)數(shù)一階展開(kāi)后,插值結(jié)果與真實(shí)值的最大α角誤差
圖6 級(jí)數(shù)二階展開(kāi)后插值結(jié)果與真實(shí)值的最大α角誤差
本文在計(jì)算機(jī)中用差分求出α角沿x方向和沿y方向上的變化基本一致,因此,對(duì)于行x和列y取間隔采用同步的方式。由上述圖中可以得出最大誤差值小于10-4的三個(gè)間隔分別為14,15,21。通過(guò)CCS查看匯編代碼發(fā)現(xiàn)展開(kāi)成本階后計(jì)算需要10次加載、15次加法運(yùn)算、9次乘法運(yùn)算,展開(kāi)成一階后計(jì)算需要7次加載、4次加法運(yùn)算、2次乘法運(yùn)算,展開(kāi)成二階后計(jì)算需要11次加載運(yùn)算、16次加法運(yùn)算、10次乘法運(yùn)算,而在DM8168中,對(duì)于float單精度型數(shù)據(jù),一次加載指令、加法指令、乘法指令的執(zhí)行分別需要5,7,7個(gè)CPU時(shí)鐘周期。將以上結(jié)果代入評(píng)估公式中計(jì)算得本階結(jié)果s0為0.21,一階結(jié)果s1為0.14,二階結(jié)果s2為0.28,由此可得展開(kāi)成一階,x,y的間隔取15制表其值最小。本文利用此優(yōu)化方法使得程序運(yùn)行時(shí)間減少到0.11 s,在常規(guī)優(yōu)化的基礎(chǔ)上降低了26.67 %的時(shí)間。
為了驗(yàn)證本算法優(yōu)化后的運(yùn)算速度,分別在DM8168嵌入式系統(tǒng)平臺(tái)(主芯片是TI公司的TMS320DM8168)和PC平臺(tái)(Inter(R)酷睿雙核CPU)上選擇不同形狀的光條進(jìn)行多次實(shí)驗(yàn)對(duì)比,統(tǒng)計(jì)算法運(yùn)行時(shí)間以及分析最后的重建效果。結(jié)果如圖7,表1和圖8所示。
圖7 不同光條在不同平臺(tái)的運(yùn)行結(jié)果
平臺(tái)平均運(yùn)行時(shí)間/s圖像大小重建效果PC端MATLAB R2010b(優(yōu)化后)2.51628×1236良好DM8168系統(tǒng)(未優(yōu)化)6.7591628×1236良好DM8168系統(tǒng)(優(yōu)化后)0.1141628×1236良好
圖8 三維重建結(jié)果
由表1可以看出,優(yōu)化后在運(yùn)行速度上,DM8168表現(xiàn)明顯優(yōu)于PC端MATLAB,二者的運(yùn)算速度相差近20倍,可見(jiàn)本文優(yōu)化方法有效。在輸入變量可預(yù)測(cè)的情況下,使用查表和級(jí)數(shù)展開(kāi)相結(jié)合的方法,可以使得包含三角函數(shù)和根號(hào)等的復(fù)雜算術(shù)運(yùn)算變得更為簡(jiǎn)單,減少了運(yùn)行開(kāi)銷(xiāo)。
在精度上,DM8168平臺(tái)與PC端基本相同,差別與本文在DM8168平臺(tái)中對(duì)圖像數(shù)據(jù)取值為float型有關(guān),使得圖像數(shù)據(jù)的有效位數(shù)在6位后與PC端不同,但并不影響本文的高精度三維重建效果。
本文以DM8168雙目三維高精度重建系統(tǒng)為平臺(tái),針對(duì)嵌入式DM8168系統(tǒng)對(duì)基于雙目的結(jié)構(gòu)光高精度三維復(fù)原算法進(jìn)行優(yōu)化,使得該算法能達(dá)到快速高精度三維重建效果。本文優(yōu)化方法不僅局限于本平臺(tái)算法中,可以應(yīng)用到其他需要移植優(yōu)化的圖像算法場(chǎng)合。從實(shí)用意義出發(fā),經(jīng)過(guò)本文中優(yōu)化方法,高精度三維復(fù)原算法雖然處理速度達(dá)到了0.11 s,但仍有改進(jìn)的空間,尤其是查表和級(jí)數(shù)展開(kāi)相結(jié)合的方法,對(duì)于復(fù)雜的算術(shù)運(yùn)算具有良好的優(yōu)化效果,但對(duì)于循環(huán)以及條件語(yǔ)句仍需要進(jìn)一步優(yōu)化,這將是下一步的研究?jī)?nèi)容。
參考文獻(xiàn):
[1] 梁 琨.基于雙目視覺(jué)的三維重建研究[D].西安:陜西科技大學(xué),2007.
[2] Shotton J,Fitzgibbon A,Cook M,et al.Real-time human pose recognition in parts from single depth images[J].Communications of the ACM,2013,56(1):116-124.
[3] Huang X,Gong L.Shortest path based planar graph cuts for bi-layer segmentation of binocular stereo video[C]∥2010 Asian Conference on Computer Vision,ACCV 2010 Workshops,Springer,Berlin Heidelberg,2010:82-91.
[4] 楊振永.基于TMS320DM8168的嵌入式高清圖像處理系統(tǒng)的關(guān)鍵技術(shù)研究[D].長(zhǎng)春:中國(guó)科學(xué)院研究生院(長(zhǎng)春光學(xué)精密機(jī)械與物理研究所),2013.
[5] 黃曉婷.基于DM8168雙核DSP的車(chē)型識(shí)別系統(tǒng)[D].南京:南京航空航天大學(xué),2015.
[6] 楊振永,王延杰,孫海江,等.基于TMS320DM8168的SOC高清視頻處理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].液晶與顯示,2013(5):764-769.
[7] 劉 冰,谷源濤.基于DM8168的視頻會(huì)議系統(tǒng)MCU設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2014(10):3399-3403.
[8] 王 珊,徐 曉.基于雙目單視面的三維重建[J].光學(xué)學(xué)報(bào),2017,37(5):207-215.
[9] 朱 海.基于DM8168的視頻監(jiān)控系統(tǒng)的實(shí)現(xiàn)[D].成都:電子科技大學(xué),2013.
[10] 吳火森.魚(yú)眼相機(jī)圖像處理及校正算法研究與實(shí)現(xiàn)[D].西安:西安電子科技大學(xué),2015.
[11] 魏帶娣,李 元,郭 浩,等.基于DSP的運(yùn)動(dòng)目標(biāo)檢測(cè)算法優(yōu)化[J].指揮控制與仿真,2014,36(1):66-70.