馮云迪,王學(xué)淵,鄒傳云
(1.西南科技大學(xué) 信息工程學(xué)院,綿陽 621000;2.特殊環(huán)境機(jī)器人技術(shù)四川省重點(diǎn)實(shí)驗(yàn)室,綿陽 621000)
在視頻測量(Video measurement)中,通常利用像素位移的結(jié)果來提取場景中對象的運(yùn)動(dòng)特征[1]。光流是描述視頻序列中連續(xù)兩幀之間像素相對位移的矢量場,光流法是估計(jì)該矢量場的方法[2],因此可以通過光流法獲得對象的運(yùn)動(dòng)特征。目前光流法已應(yīng)用于目標(biāo)識(shí)別(在文獻(xiàn)[3]中,根據(jù)像素的運(yùn)動(dòng)流對像素分類,將諸如汽車之類的剛體與人進(jìn)行區(qū)分)、獲得運(yùn)動(dòng)目標(biāo)掩模[4]等領(lǐng)域。此外,光流法在風(fēng)洞試驗(yàn)?zāi)P捅砻娴娜帜ψ铚y量[5]中也是必不可少的。
目前為了提高HS光流法[6]的實(shí)時(shí)性,研究人員一方面對算法進(jìn)行改進(jìn)[7,8],另一方面利用硬件平臺(tái)對其加速[9~12],但對于高分辨率圖像均難以達(dá)到實(shí)時(shí)光流計(jì)算的效果。HS光流法采用二維卷積計(jì)算像素點(diǎn)各方向的梯度值,通過計(jì)算整幀圖像所有像素點(diǎn)獲得光流場會(huì)面臨以下問題:1)二維卷積操作存在數(shù)據(jù)的重復(fù)讀取與計(jì)算,浪費(fèi)大量時(shí)間;2)每次的光流計(jì)算會(huì)包含受光照變化影響而產(chǎn)生虛假更改的像素點(diǎn),徒增無關(guān)計(jì)算量。
為此,提出了一種高分辨率圖像的實(shí)時(shí)光流計(jì)算方案:1)基于動(dòng)態(tài)灰度閾值的圖像序列處理策略,對連續(xù)兩幀圖像之間改變的像素灰度值,設(shè)定自適應(yīng)的閾值,剔除掉受光照變化影響的像素點(diǎn),進(jìn)而提升算法的計(jì)算效率;2)增量更新的數(shù)值求導(dǎo)方法,減少重復(fù)計(jì)算,節(jié)約梯度計(jì)算階段的時(shí)間開銷;3)基于GPU的圖像并行存儲(chǔ)檢索結(jié)構(gòu)與共享內(nèi)存優(yōu)化策略,減少數(shù)據(jù)傳輸耗時(shí),提高數(shù)據(jù)訪問速度。
根據(jù)文獻(xiàn)[6]中的討論,可知HS光流法通過以下方式獲得光流:
基于HS光流法的計(jì)算可以分為4個(gè)階段:圖像預(yù)處理階段P1、梯度計(jì)算階段P2(Ix、Iy、It)、平滑過程P3以及迭代計(jì)算階段P4(如式(1)、式(2)所示)。其中梯度計(jì)算階段P2使用卷積操作獲取圖像的一階梯度,其計(jì)算公式如下:
式中列索引i對應(yīng)于圖像中的y方向,行索引j對應(yīng)于圖像中的x方向,而k沿時(shí)間t方向,索引示意圖如圖1所示。
圖1 索引示意圖
另一方面,P3中用于計(jì)算u和v的拉普拉斯算子的公式如下:
為了實(shí)現(xiàn)對高分辨率圖像的實(shí)時(shí)光流計(jì)算,本文提出的加速方案分為三個(gè)部分:1)通過剔除受光照影響產(chǎn)生虛假更改的像素點(diǎn),減少無關(guān)計(jì)算量的動(dòng)態(tài)灰度閾值策略;2)減少重復(fù)計(jì)算的增量更新的數(shù)值求導(dǎo)方法;3)減少數(shù)據(jù)傳輸耗時(shí),提高數(shù)據(jù)訪問速度的圖像數(shù)據(jù)并行檢索結(jié)構(gòu)和共享內(nèi)存優(yōu)化策略。
在真實(shí)場景中,通常只有部分像素在幀與幀之間是真實(shí)變化,另外一部分像素會(huì)因不可避免的光照變化產(chǎn)生虛假更改。如果僅處理真實(shí)變化的像素,則可以減少許多計(jì)算。因此,本文提出在HS光流算法中引入一個(gè)自適應(yīng)參數(shù):動(dòng)態(tài)灰度閾值T。T作為判斷像素點(diǎn)是否進(jìn)行光流計(jì)算的依據(jù),如果連續(xù)兩幀之間對應(yīng)像素點(diǎn)的灰度值更改大于或等于T,則對其進(jìn)行解算;否則不執(zhí)行任何操作。T會(huì)隨著每組圖像進(jìn)行自適應(yīng)改變。
在進(jìn)行光流計(jì)算的過程中,若T=0,則會(huì)處理所有像素點(diǎn)。通過增大T可以減少待處理的像素點(diǎn),減少算法運(yùn)行時(shí)間。但T過高,又會(huì)導(dǎo)致光流計(jì)算結(jié)果不準(zhǔn)確,抹去真實(shí)的場景變化。因此如何設(shè)置合適的T,在剔除虛假更改的同時(shí)不影響目標(biāo)區(qū)域解算結(jié)果顯得尤為重要。文獻(xiàn)[13,14]中的閾值算法對圖像內(nèi)容或環(huán)境依賴性作出了不同假設(shè),導(dǎo)致普適性較差。為此,提出利用圖像的灰度平均值來設(shè)置T。如果亮度恒定,連續(xù)兩幀圖像的灰度平均值相等,但當(dāng)光照變化時(shí),連續(xù)兩幀圖像之間的灰度均值會(huì)不同,這種由光照變化引起的差異便可以用來設(shè)置T。通過對整張圖像進(jìn)行灰度平均獲取,其計(jì)算公式如式(8)所示:
式中n×m表示圖像的大小,I表示灰度值,i和j是像素坐標(biāo)(i,j=1K,2K,3K…,K=1,2,3,…N)。
動(dòng)態(tài)灰度閾值T通過計(jì)算連續(xù)兩幀圖像的灰度均值之差的絕對值得到,如式(9)所示:
在梯度計(jì)算階段(P2),單幀圖像上各像素點(diǎn)的計(jì)算過程其實(shí)質(zhì)為二維卷積操作,此操作存在重復(fù)計(jì)算,增加了不必要的時(shí)間開銷。為此,提出增量更新的數(shù)值求導(dǎo)方法,將二維卷積分解為兩個(gè)一維卷積,避免重復(fù)計(jì)算,加快求導(dǎo)速度。
若待求像素點(diǎn)坐標(biāo)為(i,j),灰度值為I(i,j)。利用式(3)求解其Ix,在單幀圖像上的計(jì)算過程為I(i,j+1)-I(i,j)+I(i+1,j+1)-I(i+1,j),會(huì)計(jì)算一次I(i,j+1)-I(i+1,j),如圖2中虛線框所示;當(dāng)待求點(diǎn)為(i+1,j),會(huì)重復(fù)計(jì)算一次I(i+1,j+1)-I(i+1,j);當(dāng)待求像素點(diǎn)位于其它坐標(biāo)時(shí),以此類推。
圖2 Ix計(jì)算示意圖
因此,將求解Ix的二維卷積分為兩個(gè)部分:1)按照y方向?qū)γ恳恍械南袼攸c(diǎn)依次進(jìn)行一維水平卷積I(i,j+1)-I(i,j),卷積結(jié)果替換原坐標(biāo)上的灰度值;2)待水平卷積結(jié)束后再按照x方向?qū)γ恳涣械南袼攸c(diǎn)依次進(jìn)行一維垂直卷積I(i+1,j)-I(i,j),最終卷積結(jié)果與原二維卷積結(jié)果相同。
同理,利用式(4)計(jì)算像素點(diǎn)的Iy,重復(fù)部分如圖3中虛線框所示。因此,將求解Iy的二維卷積分為兩個(gè)部分:1)按照x方向?qū)γ恳涣械南袼攸c(diǎn)依次進(jìn)行一維垂直卷積I(i+1,j)-I(i,j),卷積結(jié)果替換原坐標(biāo)上的灰度值;2)待垂直卷積結(jié)束后再按照y方向?qū)γ恳恍械南袼攸c(diǎn)依次進(jìn)行一維水平卷積I(i,j+1)-I(i,j),最終卷積結(jié)果與原二維卷積結(jié)果相同。由于It的卷積模板系數(shù)均為1,所以根據(jù)Ix或Iy分解方式進(jìn)行計(jì)算均可。
圖3 Iy計(jì)算示意圖
若圖像大小為M×N,按照原二維卷積的方式進(jìn)行一階求導(dǎo),計(jì)算次數(shù)為M×N×3,而將二維卷積用兩個(gè)一維卷積替代之后,在得到相同結(jié)果的條件下,計(jì)算次數(shù)為M×N×2??梢钥闯?,轉(zhuǎn)換之后計(jì)算量減少,能有效減少梯度計(jì)算階段(P2)的時(shí)間開銷。
為了提高光流計(jì)算過程在GPU上的并行能力,設(shè)計(jì)圖像并行檢索結(jié)構(gòu)減少數(shù)據(jù)傳輸耗時(shí),同時(shí)利用共享內(nèi)存提高數(shù)據(jù)訪問速度,以達(dá)到實(shí)時(shí)光流計(jì)算的效果。
2.3.1 基于GPU的圖像數(shù)據(jù)并行存儲(chǔ)檢索結(jié)構(gòu)
圖像數(shù)據(jù)并行存儲(chǔ)檢索結(jié)構(gòu)的作用是減少數(shù)據(jù)傳輸耗時(shí),提高實(shí)時(shí)性,其結(jié)構(gòu)如圖4所示。
圖4 圖像數(shù)據(jù)并行存儲(chǔ)檢索結(jié)構(gòu)
圖5 光流解算流水并行結(jié)構(gòu)
圖4中原始圖像數(shù)據(jù)緩存塊Host為上位機(jī)內(nèi)存,灰度數(shù)據(jù)緩存Dev為GPU內(nèi)存。送往圖像預(yù)處理模塊的原始圖像數(shù)據(jù)以及送往光流解算模塊的灰度數(shù)據(jù)均采用乒乓操作完成,以此為基礎(chǔ)利用了多條CUDA(Compute Unified Device Architecture)流進(jìn)行并行光流計(jì)算(CUDAStream_0表示第一條CUDA流),也由此形成了整個(gè)解算過程的流水并行。
分析表1可得:1)每個(gè)序列的圖像分辨率相同,而原HS光流法計(jì)算所有像素點(diǎn),所以它處理不同實(shí)驗(yàn)環(huán)境但分辨率相同的圖像序列時(shí)間開銷相同;2)基于動(dòng)態(tài)灰度閾值的光流法由于實(shí)驗(yàn)環(huán)境的不同導(dǎo)致剔除受光照影響的像素點(diǎn)數(shù)量不同,進(jìn)而不同實(shí)驗(yàn)環(huán)境下處理單組圖像的時(shí)間開銷略有差異;3)基于動(dòng)態(tài)灰度閾值的光流法計(jì)算效率較原HS光流法效率平均提升122.81%。
表1 單組圖像的光流計(jì)算耗時(shí)
該實(shí)驗(yàn)表明:在風(fēng)速和吹風(fēng)角度不同的風(fēng)洞環(huán)境中,動(dòng)態(tài)灰度閾值策略均能有效剔除因受光照變化影響而產(chǎn)生虛假更改的像素點(diǎn),提升HS光流法的計(jì)算效率。
在上位機(jī)進(jìn)行增量更新的數(shù)值求導(dǎo)實(shí)驗(yàn),求導(dǎo)計(jì)算的時(shí)間開銷僅與像素點(diǎn)數(shù)量有關(guān)。本實(shí)驗(yàn)通過對一圖像序列(分辨率:1106×1984,2000組)進(jìn)行3次空間降采樣,新增3種分辨率的圖像序列,如表2所示。不同分辨率下傳統(tǒng)數(shù)值求導(dǎo)方法與增量更新數(shù)值求導(dǎo)方法的單組圖像處理平均耗時(shí)如下:
表2 不同分辨率下的效率提升
分析表2可得:對于不同分辨率的圖像,增量更新的數(shù)值求導(dǎo)方法較傳統(tǒng)方法效率提升分別為:16.41%、17.60%、17.82%、18.57%。該實(shí)驗(yàn)表明:增量更新的數(shù)值求導(dǎo)方法較傳統(tǒng)方法效率提升明顯,其效率隨圖像分辨率增加而提高。
本節(jié)實(shí)驗(yàn)方法:1)在GPU和上位機(jī)(CPU)實(shí)現(xiàn)的光流算法結(jié)合了小節(jié)2.1動(dòng)態(tài)灰度閾值策略與小節(jié)2.2增量更新的數(shù)值求導(dǎo)方法;2)在GPU實(shí)現(xiàn)的算法會(huì)采用小節(jié)2.3中的圖像數(shù)據(jù)并行存儲(chǔ)檢索結(jié)構(gòu)與共享內(nèi)存優(yōu)化策略;
圖12(a)為采集圖像實(shí)時(shí)顯示。為了能可視化對比GPU與CPU的光流計(jì)算結(jié)果,利用它們的結(jié)果繪制了流線圖與云圖,并疊加顯示。顯示效果如圖12(b)、圖12(c)所示,其中流線箭頭方向指明實(shí)驗(yàn)中目標(biāo)運(yùn)動(dòng)方向,越亮的區(qū)域表示速度越大。
圖12 圖像的實(shí)時(shí)顯示及其光流計(jì)算結(jié)果
章節(jié)1將整個(gè)光流解算過程分為了4個(gè)階段。CPU重算與GPU實(shí)時(shí)計(jì)算的不同階段時(shí)間開銷如表3所示,相機(jī)幀率為80fps,分辨率為1728×2352。
表3 算法不同階段的時(shí)間開銷(單組圖像)
分析圖12可得:GPU實(shí)時(shí)解算結(jié)果與CPU重算結(jié)果一致。AAE(Average Angular Error)[15]用于判斷結(jié)果的準(zhǔn)確性,它越小說明CPU與GPU的結(jié)果越接近。經(jīng)統(tǒng)計(jì),GPU的計(jì)算結(jié)果相對于CPU的計(jì)算結(jié)果,其AAE為0,說明GPU的計(jì)算精度與CPU一樣。
分析表3可得,對于分辨率為1728×2352的圖像:1)利用共享內(nèi)存的平滑過程(P3)加速效果最好;2)迭代計(jì)算階段(P4)的加速效果不明顯的原因是由于其計(jì)算復(fù)雜度高且反復(fù)訪問內(nèi)存;3)基于實(shí)時(shí)光流計(jì)算方案的光流法處理單組圖像平均耗時(shí)12.43781ms。
該實(shí)驗(yàn)表明:對分辨率為1728×2352的圖像,本文提出的實(shí)時(shí)光流計(jì)算方案實(shí)時(shí)處理速度達(dá)到80幀/秒。
本文通過動(dòng)態(tài)灰度閾值策略剔除受光照影響的像素點(diǎn),縮減了光流計(jì)算的數(shù)據(jù)量;利用增量更新的數(shù)值求導(dǎo)方法減少了梯度計(jì)算階段的時(shí)間開銷;使用圖像并行存儲(chǔ)檢索結(jié)構(gòu)以及共享內(nèi)存優(yōu)化策略,減少了數(shù)據(jù)傳輸耗時(shí),提高了數(shù)據(jù)訪問速度。風(fēng)洞實(shí)驗(yàn)表明:動(dòng)態(tài)灰度閾值策略能有效剔除因受光照變化影響而產(chǎn)生虛假更改的像素點(diǎn),提升HS光流法的計(jì)算效率。增量更新的數(shù)值求導(dǎo)實(shí)驗(yàn)表明:增量更新的數(shù)值求導(dǎo)較傳統(tǒng)求導(dǎo)效率提升分別為16.41%、17.60%、17.82%以及18.57%,效率隨著圖像分辨率增加而提高。光流并行計(jì)算實(shí)驗(yàn)表明:該方案可實(shí)現(xiàn)高分辨率圖像的實(shí)時(shí)光流計(jì)算,對于分辨率為1728×2352的圖像,處理速度達(dá)到80幀/秒。此外,隨著視頻測量中圖像分辨率的提高,提出的實(shí)時(shí)光流計(jì)算方案在目標(biāo)識(shí)別等領(lǐng)域具有廣泛的應(yīng)用價(jià)值。