劉東明+劉超+牟海維
文章編號: 10055630(2014)03020805
收稿日期: 20140121
基金項(xiàng)目: 國家自然科學(xué)基金資助項(xiàng)目(51374072、51101027);黑龍江省新世紀(jì)優(yōu)秀人才支持計(jì)劃項(xiàng)目(1253NCET002)
作者簡介: 劉東明(1981),男,碩士,主要從事傳感測試技術(shù)的研究。
通訊作者: 劉超(1978),男,教授,博士,主要從事傳感測試技術(shù)及磁驅(qū)動(dòng)形狀記憶合金薄膜等方面的研究。
摘要: 在FPGA平臺上實(shí)現(xiàn)基于光流法的視頻運(yùn)動(dòng)目標(biāo)跟蹤系統(tǒng),采用LucasKanade算法進(jìn)行光流場的計(jì)算,在圖像預(yù)處理階段提出使用三維高斯濾波代替?zhèn)鹘y(tǒng)二維高斯濾波,引入相鄰像素點(diǎn)在時(shí)間軸方向的相關(guān)性,增強(qiáng)圖像的濾波效果。在3D導(dǎo)數(shù)計(jì)算階段提出在求導(dǎo)方向的正交面上進(jìn)行平滑濾波,并采用匹配的導(dǎo)數(shù)和平滑參數(shù),提高光流場計(jì)算精度。在FPGA平臺上設(shè)計(jì)多級主流水線加子流水線結(jié)構(gòu),設(shè)計(jì)了四端口RAM進(jìn)行圖像緩存,優(yōu)化了最小二乘矩陣單元和浮點(diǎn)數(shù)運(yùn)算單元,實(shí)現(xiàn)了實(shí)時(shí)視頻運(yùn)動(dòng)目標(biāo)跟蹤。
關(guān)鍵詞: LucasKanade算法; 平滑濾波器; FPGA; 四端口RAM
中圖分類號: TN 253; TP 212.14文獻(xiàn)標(biāo)志碼: Adoi: 10.3969/j.issn.10055630.2014.03.005
The optimization of the LucasKanade algorithm based on FPGA
LIU Dongming, LIU Chao, MU Haiwei
(College of Electronic Science, Northeast Petroleum University, Daqing 163318, China)
Abstract: Video motion tracking based on optical flow is implemented on the FPGA, and we calculate the optical flow taking advantage of the LucasKanade algorithm. In the stage of the image preprocessing, we propose that threedimensional Gaussian filter is used to replace the conventional twodimensional Gaussian filter and the correlation of the adjacent pixels is introduced, which improves the effect of the image filter. In the stage of 3D derivative calculation, we implement the smoothing filter on the orthogonal plane of derivative directional, and use the matching derivative parameter and smoothing parameter, so the accuracy of the optical flow is improved. Based on the FPGA platform, we design multistage pipelined architecture that includes several subpipeline, the fourport RAM unit that can achieve images cache, and optimize the leastsquare matrices and the float unit, which achieves the realtime video motion tracking.
Key words: LucasKanade algorithm; smoothing filter; FPGA; fourports RAM
引言光流法是實(shí)現(xiàn)運(yùn)動(dòng)目標(biāo)跟蹤的一種有效方法,光流法的優(yōu)勢在于沒有圖像背景的歷史信息情況下,可以對獨(dú)立運(yùn)動(dòng)目標(biāo)進(jìn)行跟蹤,而且在動(dòng)態(tài)背景情況下同樣適用。但光流法易受噪聲影響,而且運(yùn)算量大,因此在硬件實(shí)現(xiàn)上,存在著計(jì)算精度和系統(tǒng)資源占用之間的矛盾。FPGA是一種資源配置靈活,不限制流水線級數(shù),可實(shí)現(xiàn)全并行處理的一種器件,非常適合作為視頻運(yùn)動(dòng)目標(biāo)跟蹤系統(tǒng)的硬件平臺[12]。本文采用LK(LucasKanade)算法在FPGA平臺上實(shí)現(xiàn)光流場的計(jì)算,提出了三維高斯平滑濾波方法,改善圖像噪聲抑制效果,改進(jìn)了傳統(tǒng)3D導(dǎo)數(shù)計(jì)算方法,采用非高斯匹配導(dǎo)數(shù)濾波器,提高了光流場的計(jì)算精度。硬件方面,在FPGA平臺上設(shè)計(jì)了超級流水線結(jié)構(gòu)和四端口圖像緩存單元,實(shí)現(xiàn)了對30幀/s速度下640×480分辨率視頻的實(shí)時(shí)運(yùn)動(dòng)目標(biāo)跟蹤。1LK算法優(yōu)化LK算法是一種計(jì)算光流場的差分方法,也就是計(jì)算圖像在空間和時(shí)間坐標(biāo)上的偏導(dǎo)數(shù)。假設(shè)I(x,y,t)為(x,y)點(diǎn)在t時(shí)刻的灰度值,像素點(diǎn)的對應(yīng)速度為v=[vx,vy],為滿足光流約束方程,需使下式最?。?]:ε=∑x∈ΩW2(x)[I(x,y,t)?v+It(x,y,t)]2(1)其中,W(x)代表一個(gè)窗函數(shù)。上式的結(jié)果為v=[ATW2A]-1ATW2b,其中,A=[I(x1),…,I(xn)]T,W=diag[W(x1),…,W(xn)],b=-[It(x1),…,It(xn)]T進(jìn)一步推導(dǎo)得:ATW2A=∑W2I2x∑W2IxIy
∑W2IxIy∑W2I2y(2)
ATW2b=-∑W2IxIt
∑W2IyIt(3)光學(xué)儀器第36卷
第3期劉東明,等:基于FPGA的LucasKanade算法優(yōu)化
根據(jù)LK算法公式,光流場的計(jì)算包括三個(gè)步驟:一是圖像預(yù)處理,即通過高斯平滑濾波來降低圖像噪聲,并使相鄰像素之間產(chǎn)生較高的相關(guān)性;二是3D導(dǎo)數(shù)計(jì)算,即通過合適的核(濾波模板)進(jìn)行3D導(dǎo)數(shù)濾波,計(jì)算3D導(dǎo)數(shù);三是計(jì)算最小二乘矩陣,得到各個(gè)像素點(diǎn)在x軸和y軸的速度分量。(1)圖像預(yù)處理算法優(yōu)化傳統(tǒng)的圖像預(yù)處理一般是對圖像進(jìn)行二維高斯平滑濾波,但是視頻是一系列時(shí)間上連續(xù)的圖像,各個(gè)像素點(diǎn)之間除了空間關(guān)系外還存在時(shí)間上的關(guān)聯(lián)性。因此,本文提出在傳統(tǒng)二維高斯濾波基礎(chǔ)上增加時(shí)間軸濾波,構(gòu)成了三維高斯濾波。根據(jù)高斯濾波模板的旋轉(zhuǎn)對稱性,這種擴(kuò)展是可行的。以寬度為5的高斯濾波模板[1,4,6,4,1]/16為例,為了減少計(jì)算量,首先對連續(xù)5幀圖像進(jìn)行一維時(shí)間軸濾波,得到一幀圖像,再進(jìn)行傳統(tǒng)二維5×5空間濾波。圖1(a)為使用5×5二維高斯濾波模板的濾波效果,作為對比圖1(b)為使用5×5×5三維高斯濾波模板的濾波效果,可看出后者的模糊效果明顯好于前者。三維高斯濾波有效地降低了噪聲,提高了相鄰像素之間的相關(guān)性。
圖1圖像濾波效果
Fig.1The effect of image filter
(2)3D導(dǎo)數(shù)算法優(yōu)化3D導(dǎo)數(shù)的計(jì)算關(guān)系到光流場的計(jì)算精度,3D導(dǎo)數(shù)就是通過導(dǎo)數(shù)濾波器分別計(jì)算圖像在x軸、y軸和t軸的導(dǎo)數(shù)Ix、Iy和It。傳統(tǒng)圖像求導(dǎo)方法比較簡單,即導(dǎo)數(shù)核直接與圖像進(jìn)行卷積,例如可使用導(dǎo)數(shù)核[-1 1],分別在求導(dǎo)方向上與圖像進(jìn)行卷積。這種對圖像求導(dǎo)的傳統(tǒng)方法導(dǎo)致光流場計(jì)算結(jié)果不準(zhǔn)確,圖2(a)是這種方法下光流場的計(jì)算效果,可以看出速度的方向錯(cuò)誤率較高,另外像素點(diǎn)速度大小也出現(xiàn)了較多的錯(cuò)誤。為改善光流計(jì)算精度,本文提出將Sobel算子思想應(yīng)用到3D導(dǎo)數(shù)計(jì)算中。Sobel算子垂直卷積核[4]表達(dá)式為-101
-202
-101=121T-101(4)根據(jù)式(4)可知Sobel算子的核心是在x軸方向求導(dǎo)的同時(shí)在y軸方向平滑濾波,將這種思想擴(kuò)展到3D導(dǎo)數(shù)計(jì)算中,即在某一方向上求導(dǎo)時(shí),在其他兩個(gè)方向上進(jìn)行與之匹配的平滑濾波。例如求x軸方向的導(dǎo)數(shù)Ix,需要在y軸和t軸進(jìn)行平滑濾波。另外濾波模板并沒有選擇高斯模板,而是采用了Simoncelli提出的非高斯匹配濾波模板[5],其中:導(dǎo)數(shù)濾波核 [-0.109 604,-0.276 691,0,0.276 691,0.109 604]平滑濾波核 [0.037 659,0.249 153,0.426 375,0.249 153,0.037 659]圖2(b)是經(jīng)過優(yōu)化的非高斯匹配3D濾波下光流場的計(jì)算結(jié)果,與傳統(tǒng)方法相比,光流場速度大小的精確度和速度方向的一致性得到了明顯改善。
圖2光流場計(jì)算結(jié)果
Fig.2The results of optical flow
2FPGA流水線結(jié)構(gòu)設(shè)計(jì)FPGA不限制流水線級數(shù),可實(shí)現(xiàn)全并行計(jì)算,非常適合做高速實(shí)時(shí)視頻處理。在FPGA平臺(DE2)上實(shí)現(xiàn)LK算法的視頻實(shí)時(shí)處理的關(guān)鍵在于流水線結(jié)構(gòu)的合理設(shè)計(jì),LK算法流水線結(jié)構(gòu)如圖3所示。
圖3LK算法流水線結(jié)構(gòu)框圖
Fig.3The pipelined architecture of LK algorithm
FPGA平臺上,LK算法分為五個(gè)步驟:(1)三維高斯平滑濾波,攝像頭輸出的視頻圖像中經(jīng)常伴有噪聲,經(jīng)過前面仿真可知,采用三維高斯濾波能起到良好的濾波效果,經(jīng)試驗(yàn)采用3×3×3高斯模板即可滿足后續(xù)計(jì)算光流場的精度要求。(2)時(shí)間FIR濾波,3D導(dǎo)數(shù)計(jì)算中有兩個(gè)步驟需要進(jìn)行時(shí)間軸FIR濾波:一是計(jì)算時(shí)間軸導(dǎo)數(shù)It,二是計(jì)算空間導(dǎo)數(shù)Ix和Iy時(shí),需要在時(shí)間軸進(jìn)行平滑濾波。將這兩個(gè)步驟結(jié)合起來,可一步完成,降低了FPGA資源占用率。(3)空間FIR濾波,同樣分為兩種情況:一是計(jì)算It時(shí)在xy平面上進(jìn)行平滑濾波,二是計(jì)算導(dǎo)數(shù)Ix和Iy。(4)最小二乘矩陣,用于計(jì)算光流速度公式中的Ix?Ix、Iy?Iy、Ix?Iy、Ix?It和Iy?It。(5)浮點(diǎn)運(yùn)算單元,通過上述結(jié)果求得光流場。整體上LK算法的流水線結(jié)構(gòu)分為五級,每級流水線內(nèi)部也包含了優(yōu)化的子流水線結(jié)構(gòu),圖中標(biāo)出了各級中包含的子流水線數(shù)量。圖像在時(shí)間軸方向的濾波需要幀間處理,因此采用SDRAM作為圖像緩存。步驟(1)中時(shí)間軸的平滑濾波與步驟(2)中時(shí)間軸FIR濾波結(jié)構(gòu)相同,只是濾波核不同。由于時(shí)間軸濾波后圖像數(shù)據(jù)量大大減少,僅一幀數(shù)據(jù),因此在這兩個(gè)步驟中均采用了先時(shí)間后空間的濾波順序。圖4四端口RAM實(shí)現(xiàn)框圖
Fig.4 The realization diagram of fourport RAM unit3時(shí)間濾波算法的實(shí)現(xiàn)根據(jù)實(shí)際測試選用3×3×3高斯平滑濾波模板完全可滿足后續(xù)計(jì)算的精度要求,為實(shí)現(xiàn)3幀圖像之間的運(yùn)算,需要對3幀圖像進(jìn)行緩存并同時(shí)讀取。為此編寫一個(gè)四端口RAM來完成圖像在時(shí)間軸的濾波算法,如圖4為其實(shí)現(xiàn)框圖。四端口RAM實(shí)際是將SDRAM存儲器劃分為3個(gè)Bank,每個(gè)Bank緩存一幀圖像,并配合內(nèi)存管理單元MMU實(shí)現(xiàn)的。MMU與SDRAM之間是以100 MHz的速度逐幀順序?qū)懭雸D像的,而MMU與時(shí)間軸濾波模塊間通過4個(gè)慢速的25 MHz端口連接,其中1個(gè)端口是圖像寫入,3個(gè)端口是圖像讀取。相對于100 MHz的帶寬來說,這四個(gè)慢速端口恰好可以同時(shí)完成寫入和讀取,滿足了時(shí)間軸濾波模塊同時(shí)讀取連續(xù)3幀視頻圖像的要求。根據(jù)LK算法總體流水線結(jié)構(gòu),三維高斯平滑濾波和時(shí)間FIR濾波中均用到了圖像的時(shí)間軸運(yùn)算,這兩種運(yùn)算的結(jié)構(gòu)相同,并且根據(jù)圖像數(shù)據(jù)的特點(diǎn),僅占用8位位寬。而SDRAM的數(shù)據(jù)總線為16位位寬,因此為了提高資源利用率,將SDRAM的高8位分配給三維高斯平滑濾波,低8位分配給時(shí)間FIR濾波,在FPGA邏輯單元和SDRAM空間占用不變的情況下,同時(shí)完成這兩步運(yùn)算。4速度矢量計(jì)算結(jié)構(gòu)優(yōu)化通過最小二乘矩陣和浮點(diǎn)數(shù)運(yùn)算單元可計(jì)算得到速度矢量。根據(jù)式(2)和式(3)構(gòu)造最小二乘矩陣,即利用導(dǎo)數(shù)Ix、Iy和It,計(jì)算∑W2I2x、∑W2I2y、∑W2IxIy、∑W2IxIt和∑W2IyIt。窗函數(shù)W的選擇有兩種方式,一是采用具有旋轉(zhuǎn)對稱性的高斯核[0.062 5,0.25,0.375,0.25,0.062 5][6],二是采用最簡單的平均值濾波方式[7]。方式二計(jì)算過程簡單,實(shí)驗(yàn)證明光流計(jì)算精確度僅次于方式一,但這種方式需要用到除法運(yùn)算,因此占用FPGA資源較多。而方式一經(jīng)過優(yōu)化,可完全避免乘除法運(yùn)算。采用方式一設(shè)計(jì)最小二乘矩陣實(shí)現(xiàn)框圖如圖5所示。將高斯核定點(diǎn)化為[1,4,6,4,1]/16,這個(gè)加權(quán)計(jì)算需要3次乘法、4次加法和1次除法運(yùn)算。乘除法運(yùn)算量較大,但是當(dāng)乘數(shù)或除數(shù)為2的N次方時(shí),可用移位操作來代替乘除法運(yùn)算,從而大幅度降低FPGA資源占用率。定點(diǎn)化高斯核中只有乘6運(yùn)算不滿足2的N次方,將乘6運(yùn)算拆分成兩級流水線乘2、乘4和一次加法運(yùn)算。經(jīng)過上述優(yōu)化,最小二乘矩陣的構(gòu)造僅需要加法運(yùn)算和移位操作,大大降低了FPGA圖5最小二乘矩陣實(shí)現(xiàn)框圖
Fig.5The realization diagram of leastsquare matrices資源占用率,提高了光流場的計(jì)算速度。將最小二乘矩陣結(jié)果帶入式(1)可計(jì)算得到最終的光流場速度。式(1)中包含矩陣求逆運(yùn)算,計(jì)算量大,為避免中間結(jié)果溢出必須采用浮點(diǎn)數(shù)運(yùn)算。浮點(diǎn)數(shù)運(yùn)算單元結(jié)構(gòu)如圖6所示,首先將上一步計(jì)算結(jié)果通過int to float模塊全部轉(zhuǎn)化為浮點(diǎn)數(shù),然后進(jìn)行浮點(diǎn)數(shù)基本數(shù)學(xué)運(yùn)算,最后再將結(jié)果通過float to int模塊轉(zhuǎn)化為定點(diǎn)數(shù)。除流水線結(jié)構(gòu)需自行設(shè)計(jì)外,所有的浮點(diǎn)數(shù)運(yùn)算都使用Quartus II軟件提供的IP核來完成。
圖6FPGA浮點(diǎn)計(jì)算單元框圖
Fig.6FPGA floating point calculation unit block diagram
5系統(tǒng)測試效果根據(jù)上述優(yōu)化方法在FPGA平臺上實(shí)現(xiàn)了基于LK算法的實(shí)時(shí)光流計(jì)算。在30幀/s的速度下,本系統(tǒng)可對640×480分辨率的視頻進(jìn)行實(shí)時(shí)處理,實(shí)現(xiàn)了對單個(gè)運(yùn)動(dòng)目標(biāo)進(jìn)行實(shí)時(shí)跟蹤的目的。高閾值下實(shí)際測試的效果圖見圖7(a);當(dāng)速度閾值降低時(shí),如圖7(b)所示,目標(biāo)跟蹤的靈敏度得到了提高,但物體的輪廓明顯變粗,可通過腐蝕和膨脹等圖像處理算法來得到清晰的目標(biāo)輪廓,也可進(jìn)一步運(yùn)算得到物體的形心,實(shí)現(xiàn)對目標(biāo)的軌跡進(jìn)行跟蹤。圖7實(shí)際測試效果圖
Fig.7The actual test rendering
6結(jié)論通過在圖像預(yù)處理階段增加時(shí)間軸濾波和在3D導(dǎo)數(shù)計(jì)算階段增加匹配濾波,并使用優(yōu)化的匹配濾波參數(shù),提高了LK算法的計(jì)算精度。在視頻的仿真中可明顯看出,經(jīng)過這些優(yōu)化,光流場的精度得到了提高,方向一致性良好。在FPGA硬件平臺上,通過對流水線結(jié)構(gòu)進(jìn)行充分的優(yōu)化,并設(shè)計(jì)了四端口RAM進(jìn)行圖像緩存,實(shí)現(xiàn)了對30幀/s下640×480分辨率的視頻實(shí)時(shí)處理,對運(yùn)動(dòng)目標(biāo)實(shí)現(xiàn)了高速精確的視頻跟蹤。由于SDRAM仍有很大剩余空間,FPGA也未使用于最高頻率,因此,在更換高速、高分辨率攝像頭的情況下,該系統(tǒng)的性能還可進(jìn)一步提升。參考文獻(xiàn):
[1]陳浙泊,林斌.動(dòng)態(tài)圖像處理系統(tǒng)的設(shè)計(jì)與研究[J].光學(xué)儀器,2003,25(6):3438.
[2]候宏錄,高偉平.500 fps圖像采集及實(shí)時(shí)顯示關(guān)鍵技術(shù)研究[J].光學(xué)儀器,2013,35(2):5257.
[3]劉松林,牛照東,陳曾平,等.基于加權(quán)LucasKanade算法的目標(biāo)跟蹤[J].光學(xué)工程,2011,38(8):6772.
[4]靳鵬飛.一種改進(jìn)的Sobel圖像邊緣檢測算法[J].應(yīng)用光學(xué),2008,29(4):625628.
[5]SIMONCELLI E P.Design of multidimensional derivative filters[C]∥Proceedings of the IEEE International Conference on Image Processing,Austin,1994,1:791793.
[6]潘金山,蘇志勛,王偉.運(yùn)動(dòng)細(xì)節(jié)估計(jì)的光流場方法[J].計(jì)算機(jī)輔助設(shè)計(jì)與圖形學(xué)學(xué)報(bào),2011,23(8):14331441.
[7]夏毓鵬,王昕,胡鋒.光流場算法中優(yōu)化圖像梯度數(shù)據(jù)可信度方法[J].計(jì)算機(jī)工程與應(yīng)用,2010,46(4):163165.
-202
-101=121T-101(4)根據(jù)式(4)可知Sobel算子的核心是在x軸方向求導(dǎo)的同時(shí)在y軸方向平滑濾波,將這種思想擴(kuò)展到3D導(dǎo)數(shù)計(jì)算中,即在某一方向上求導(dǎo)時(shí),在其他兩個(gè)方向上進(jìn)行與之匹配的平滑濾波。例如求x軸方向的導(dǎo)數(shù)Ix,需要在y軸和t軸進(jìn)行平滑濾波。另外濾波模板并沒有選擇高斯模板,而是采用了Simoncelli提出的非高斯匹配濾波模板[5],其中:導(dǎo)數(shù)濾波核 [-0.109 604,-0.276 691,0,0.276 691,0.109 604]平滑濾波核 [0.037 659,0.249 153,0.426 375,0.249 153,0.037 659]圖2(b)是經(jīng)過優(yōu)化的非高斯匹配3D濾波下光流場的計(jì)算結(jié)果,與傳統(tǒng)方法相比,光流場速度大小的精確度和速度方向的一致性得到了明顯改善。
圖2光流場計(jì)算結(jié)果
Fig.2The results of optical flow
2FPGA流水線結(jié)構(gòu)設(shè)計(jì)FPGA不限制流水線級數(shù),可實(shí)現(xiàn)全并行計(jì)算,非常適合做高速實(shí)時(shí)視頻處理。在FPGA平臺(DE2)上實(shí)現(xiàn)LK算法的視頻實(shí)時(shí)處理的關(guān)鍵在于流水線結(jié)構(gòu)的合理設(shè)計(jì),LK算法流水線結(jié)構(gòu)如圖3所示。
圖3LK算法流水線結(jié)構(gòu)框圖
Fig.3The pipelined architecture of LK algorithm
FPGA平臺上,LK算法分為五個(gè)步驟:(1)三維高斯平滑濾波,攝像頭輸出的視頻圖像中經(jīng)常伴有噪聲,經(jīng)過前面仿真可知,采用三維高斯濾波能起到良好的濾波效果,經(jīng)試驗(yàn)采用3×3×3高斯模板即可滿足后續(xù)計(jì)算光流場的精度要求。(2)時(shí)間FIR濾波,3D導(dǎo)數(shù)計(jì)算中有兩個(gè)步驟需要進(jìn)行時(shí)間軸FIR濾波:一是計(jì)算時(shí)間軸導(dǎo)數(shù)It,二是計(jì)算空間導(dǎo)數(shù)Ix和Iy時(shí),需要在時(shí)間軸進(jìn)行平滑濾波。將這兩個(gè)步驟結(jié)合起來,可一步完成,降低了FPGA資源占用率。(3)空間FIR濾波,同樣分為兩種情況:一是計(jì)算It時(shí)在xy平面上進(jìn)行平滑濾波,二是計(jì)算導(dǎo)數(shù)Ix和Iy。(4)最小二乘矩陣,用于計(jì)算光流速度公式中的Ix?Ix、Iy?Iy、Ix?Iy、Ix?It和Iy?It。(5)浮點(diǎn)運(yùn)算單元,通過上述結(jié)果求得光流場。整體上LK算法的流水線結(jié)構(gòu)分為五級,每級流水線內(nèi)部也包含了優(yōu)化的子流水線結(jié)構(gòu),圖中標(biāo)出了各級中包含的子流水線數(shù)量。圖像在時(shí)間軸方向的濾波需要幀間處理,因此采用SDRAM作為圖像緩存。步驟(1)中時(shí)間軸的平滑濾波與步驟(2)中時(shí)間軸FIR濾波結(jié)構(gòu)相同,只是濾波核不同。由于時(shí)間軸濾波后圖像數(shù)據(jù)量大大減少,僅一幀數(shù)據(jù),因此在這兩個(gè)步驟中均采用了先時(shí)間后空間的濾波順序。圖4四端口RAM實(shí)現(xiàn)框圖
Fig.4 The realization diagram of fourport RAM unit3時(shí)間濾波算法的實(shí)現(xiàn)根據(jù)實(shí)際測試選用3×3×3高斯平滑濾波模板完全可滿足后續(xù)計(jì)算的精度要求,為實(shí)現(xiàn)3幀圖像之間的運(yùn)算,需要對3幀圖像進(jìn)行緩存并同時(shí)讀取。為此編寫一個(gè)四端口RAM來完成圖像在時(shí)間軸的濾波算法,如圖4為其實(shí)現(xiàn)框圖。四端口RAM實(shí)際是將SDRAM存儲器劃分為3個(gè)Bank,每個(gè)Bank緩存一幀圖像,并配合內(nèi)存管理單元MMU實(shí)現(xiàn)的。MMU與SDRAM之間是以100 MHz的速度逐幀順序?qū)懭雸D像的,而MMU與時(shí)間軸濾波模塊間通過4個(gè)慢速的25 MHz端口連接,其中1個(gè)端口是圖像寫入,3個(gè)端口是圖像讀取。相對于100 MHz的帶寬來說,這四個(gè)慢速端口恰好可以同時(shí)完成寫入和讀取,滿足了時(shí)間軸濾波模塊同時(shí)讀取連續(xù)3幀視頻圖像的要求。根據(jù)LK算法總體流水線結(jié)構(gòu),三維高斯平滑濾波和時(shí)間FIR濾波中均用到了圖像的時(shí)間軸運(yùn)算,這兩種運(yùn)算的結(jié)構(gòu)相同,并且根據(jù)圖像數(shù)據(jù)的特點(diǎn),僅占用8位位寬。而SDRAM的數(shù)據(jù)總線為16位位寬,因此為了提高資源利用率,將SDRAM的高8位分配給三維高斯平滑濾波,低8位分配給時(shí)間FIR濾波,在FPGA邏輯單元和SDRAM空間占用不變的情況下,同時(shí)完成這兩步運(yùn)算。4速度矢量計(jì)算結(jié)構(gòu)優(yōu)化通過最小二乘矩陣和浮點(diǎn)數(shù)運(yùn)算單元可計(jì)算得到速度矢量。根據(jù)式(2)和式(3)構(gòu)造最小二乘矩陣,即利用導(dǎo)數(shù)Ix、Iy和It,計(jì)算∑W2I2x、∑W2I2y、∑W2IxIy、∑W2IxIt和∑W2IyIt。窗函數(shù)W的選擇有兩種方式,一是采用具有旋轉(zhuǎn)對稱性的高斯核[0.062 5,0.25,0.375,0.25,0.062 5][6],二是采用最簡單的平均值濾波方式[7]。方式二計(jì)算過程簡單,實(shí)驗(yàn)證明光流計(jì)算精確度僅次于方式一,但這種方式需要用到除法運(yùn)算,因此占用FPGA資源較多。而方式一經(jīng)過優(yōu)化,可完全避免乘除法運(yùn)算。采用方式一設(shè)計(jì)最小二乘矩陣實(shí)現(xiàn)框圖如圖5所示。將高斯核定點(diǎn)化為[1,4,6,4,1]/16,這個(gè)加權(quán)計(jì)算需要3次乘法、4次加法和1次除法運(yùn)算。乘除法運(yùn)算量較大,但是當(dāng)乘數(shù)或除數(shù)為2的N次方時(shí),可用移位操作來代替乘除法運(yùn)算,從而大幅度降低FPGA資源占用率。定點(diǎn)化高斯核中只有乘6運(yùn)算不滿足2的N次方,將乘6運(yùn)算拆分成兩級流水線乘2、乘4和一次加法運(yùn)算。經(jīng)過上述優(yōu)化,最小二乘矩陣的構(gòu)造僅需要加法運(yùn)算和移位操作,大大降低了FPGA圖5最小二乘矩陣實(shí)現(xiàn)框圖
Fig.5The realization diagram of leastsquare matrices資源占用率,提高了光流場的計(jì)算速度。將最小二乘矩陣結(jié)果帶入式(1)可計(jì)算得到最終的光流場速度。式(1)中包含矩陣求逆運(yùn)算,計(jì)算量大,為避免中間結(jié)果溢出必須采用浮點(diǎn)數(shù)運(yùn)算。浮點(diǎn)數(shù)運(yùn)算單元結(jié)構(gòu)如圖6所示,首先將上一步計(jì)算結(jié)果通過int to float模塊全部轉(zhuǎn)化為浮點(diǎn)數(shù),然后進(jìn)行浮點(diǎn)數(shù)基本數(shù)學(xué)運(yùn)算,最后再將結(jié)果通過float to int模塊轉(zhuǎn)化為定點(diǎn)數(shù)。除流水線結(jié)構(gòu)需自行設(shè)計(jì)外,所有的浮點(diǎn)數(shù)運(yùn)算都使用Quartus II軟件提供的IP核來完成。
圖6FPGA浮點(diǎn)計(jì)算單元框圖
Fig.6FPGA floating point calculation unit block diagram
5系統(tǒng)測試效果根據(jù)上述優(yōu)化方法在FPGA平臺上實(shí)現(xiàn)了基于LK算法的實(shí)時(shí)光流計(jì)算。在30幀/s的速度下,本系統(tǒng)可對640×480分辨率的視頻進(jìn)行實(shí)時(shí)處理,實(shí)現(xiàn)了對單個(gè)運(yùn)動(dòng)目標(biāo)進(jìn)行實(shí)時(shí)跟蹤的目的。高閾值下實(shí)際測試的效果圖見圖7(a);當(dāng)速度閾值降低時(shí),如圖7(b)所示,目標(biāo)跟蹤的靈敏度得到了提高,但物體的輪廓明顯變粗,可通過腐蝕和膨脹等圖像處理算法來得到清晰的目標(biāo)輪廓,也可進(jìn)一步運(yùn)算得到物體的形心,實(shí)現(xiàn)對目標(biāo)的軌跡進(jìn)行跟蹤。圖7實(shí)際測試效果圖
Fig.7The actual test rendering
6結(jié)論通過在圖像預(yù)處理階段增加時(shí)間軸濾波和在3D導(dǎo)數(shù)計(jì)算階段增加匹配濾波,并使用優(yōu)化的匹配濾波參數(shù),提高了LK算法的計(jì)算精度。在視頻的仿真中可明顯看出,經(jīng)過這些優(yōu)化,光流場的精度得到了提高,方向一致性良好。在FPGA硬件平臺上,通過對流水線結(jié)構(gòu)進(jìn)行充分的優(yōu)化,并設(shè)計(jì)了四端口RAM進(jìn)行圖像緩存,實(shí)現(xiàn)了對30幀/s下640×480分辨率的視頻實(shí)時(shí)處理,對運(yùn)動(dòng)目標(biāo)實(shí)現(xiàn)了高速精確的視頻跟蹤。由于SDRAM仍有很大剩余空間,FPGA也未使用于最高頻率,因此,在更換高速、高分辨率攝像頭的情況下,該系統(tǒng)的性能還可進(jìn)一步提升。參考文獻(xiàn):
[1]陳浙泊,林斌.動(dòng)態(tài)圖像處理系統(tǒng)的設(shè)計(jì)與研究[J].光學(xué)儀器,2003,25(6):3438.
[2]候宏錄,高偉平.500 fps圖像采集及實(shí)時(shí)顯示關(guān)鍵技術(shù)研究[J].光學(xué)儀器,2013,35(2):5257.
[3]劉松林,牛照東,陳曾平,等.基于加權(quán)LucasKanade算法的目標(biāo)跟蹤[J].光學(xué)工程,2011,38(8):6772.
[4]靳鵬飛.一種改進(jìn)的Sobel圖像邊緣檢測算法[J].應(yīng)用光學(xué),2008,29(4):625628.
[5]SIMONCELLI E P.Design of multidimensional derivative filters[C]∥Proceedings of the IEEE International Conference on Image Processing,Austin,1994,1:791793.
[6]潘金山,蘇志勛,王偉.運(yùn)動(dòng)細(xì)節(jié)估計(jì)的光流場方法[J].計(jì)算機(jī)輔助設(shè)計(jì)與圖形學(xué)學(xué)報(bào),2011,23(8):14331441.
[7]夏毓鵬,王昕,胡鋒.光流場算法中優(yōu)化圖像梯度數(shù)據(jù)可信度方法[J].計(jì)算機(jī)工程與應(yīng)用,2010,46(4):163165.
-202
-101=121T-101(4)根據(jù)式(4)可知Sobel算子的核心是在x軸方向求導(dǎo)的同時(shí)在y軸方向平滑濾波,將這種思想擴(kuò)展到3D導(dǎo)數(shù)計(jì)算中,即在某一方向上求導(dǎo)時(shí),在其他兩個(gè)方向上進(jìn)行與之匹配的平滑濾波。例如求x軸方向的導(dǎo)數(shù)Ix,需要在y軸和t軸進(jìn)行平滑濾波。另外濾波模板并沒有選擇高斯模板,而是采用了Simoncelli提出的非高斯匹配濾波模板[5],其中:導(dǎo)數(shù)濾波核 [-0.109 604,-0.276 691,0,0.276 691,0.109 604]平滑濾波核 [0.037 659,0.249 153,0.426 375,0.249 153,0.037 659]圖2(b)是經(jīng)過優(yōu)化的非高斯匹配3D濾波下光流場的計(jì)算結(jié)果,與傳統(tǒng)方法相比,光流場速度大小的精確度和速度方向的一致性得到了明顯改善。
圖2光流場計(jì)算結(jié)果
Fig.2The results of optical flow
2FPGA流水線結(jié)構(gòu)設(shè)計(jì)FPGA不限制流水線級數(shù),可實(shí)現(xiàn)全并行計(jì)算,非常適合做高速實(shí)時(shí)視頻處理。在FPGA平臺(DE2)上實(shí)現(xiàn)LK算法的視頻實(shí)時(shí)處理的關(guān)鍵在于流水線結(jié)構(gòu)的合理設(shè)計(jì),LK算法流水線結(jié)構(gòu)如圖3所示。
圖3LK算法流水線結(jié)構(gòu)框圖
Fig.3The pipelined architecture of LK algorithm
FPGA平臺上,LK算法分為五個(gè)步驟:(1)三維高斯平滑濾波,攝像頭輸出的視頻圖像中經(jīng)常伴有噪聲,經(jīng)過前面仿真可知,采用三維高斯濾波能起到良好的濾波效果,經(jīng)試驗(yàn)采用3×3×3高斯模板即可滿足后續(xù)計(jì)算光流場的精度要求。(2)時(shí)間FIR濾波,3D導(dǎo)數(shù)計(jì)算中有兩個(gè)步驟需要進(jìn)行時(shí)間軸FIR濾波:一是計(jì)算時(shí)間軸導(dǎo)數(shù)It,二是計(jì)算空間導(dǎo)數(shù)Ix和Iy時(shí),需要在時(shí)間軸進(jìn)行平滑濾波。將這兩個(gè)步驟結(jié)合起來,可一步完成,降低了FPGA資源占用率。(3)空間FIR濾波,同樣分為兩種情況:一是計(jì)算It時(shí)在xy平面上進(jìn)行平滑濾波,二是計(jì)算導(dǎo)數(shù)Ix和Iy。(4)最小二乘矩陣,用于計(jì)算光流速度公式中的Ix?Ix、Iy?Iy、Ix?Iy、Ix?It和Iy?It。(5)浮點(diǎn)運(yùn)算單元,通過上述結(jié)果求得光流場。整體上LK算法的流水線結(jié)構(gòu)分為五級,每級流水線內(nèi)部也包含了優(yōu)化的子流水線結(jié)構(gòu),圖中標(biāo)出了各級中包含的子流水線數(shù)量。圖像在時(shí)間軸方向的濾波需要幀間處理,因此采用SDRAM作為圖像緩存。步驟(1)中時(shí)間軸的平滑濾波與步驟(2)中時(shí)間軸FIR濾波結(jié)構(gòu)相同,只是濾波核不同。由于時(shí)間軸濾波后圖像數(shù)據(jù)量大大減少,僅一幀數(shù)據(jù),因此在這兩個(gè)步驟中均采用了先時(shí)間后空間的濾波順序。圖4四端口RAM實(shí)現(xiàn)框圖
Fig.4 The realization diagram of fourport RAM unit3時(shí)間濾波算法的實(shí)現(xiàn)根據(jù)實(shí)際測試選用3×3×3高斯平滑濾波模板完全可滿足后續(xù)計(jì)算的精度要求,為實(shí)現(xiàn)3幀圖像之間的運(yùn)算,需要對3幀圖像進(jìn)行緩存并同時(shí)讀取。為此編寫一個(gè)四端口RAM來完成圖像在時(shí)間軸的濾波算法,如圖4為其實(shí)現(xiàn)框圖。四端口RAM實(shí)際是將SDRAM存儲器劃分為3個(gè)Bank,每個(gè)Bank緩存一幀圖像,并配合內(nèi)存管理單元MMU實(shí)現(xiàn)的。MMU與SDRAM之間是以100 MHz的速度逐幀順序?qū)懭雸D像的,而MMU與時(shí)間軸濾波模塊間通過4個(gè)慢速的25 MHz端口連接,其中1個(gè)端口是圖像寫入,3個(gè)端口是圖像讀取。相對于100 MHz的帶寬來說,這四個(gè)慢速端口恰好可以同時(shí)完成寫入和讀取,滿足了時(shí)間軸濾波模塊同時(shí)讀取連續(xù)3幀視頻圖像的要求。根據(jù)LK算法總體流水線結(jié)構(gòu),三維高斯平滑濾波和時(shí)間FIR濾波中均用到了圖像的時(shí)間軸運(yùn)算,這兩種運(yùn)算的結(jié)構(gòu)相同,并且根據(jù)圖像數(shù)據(jù)的特點(diǎn),僅占用8位位寬。而SDRAM的數(shù)據(jù)總線為16位位寬,因此為了提高資源利用率,將SDRAM的高8位分配給三維高斯平滑濾波,低8位分配給時(shí)間FIR濾波,在FPGA邏輯單元和SDRAM空間占用不變的情況下,同時(shí)完成這兩步運(yùn)算。4速度矢量計(jì)算結(jié)構(gòu)優(yōu)化通過最小二乘矩陣和浮點(diǎn)數(shù)運(yùn)算單元可計(jì)算得到速度矢量。根據(jù)式(2)和式(3)構(gòu)造最小二乘矩陣,即利用導(dǎo)數(shù)Ix、Iy和It,計(jì)算∑W2I2x、∑W2I2y、∑W2IxIy、∑W2IxIt和∑W2IyIt。窗函數(shù)W的選擇有兩種方式,一是采用具有旋轉(zhuǎn)對稱性的高斯核[0.062 5,0.25,0.375,0.25,0.062 5][6],二是采用最簡單的平均值濾波方式[7]。方式二計(jì)算過程簡單,實(shí)驗(yàn)證明光流計(jì)算精確度僅次于方式一,但這種方式需要用到除法運(yùn)算,因此占用FPGA資源較多。而方式一經(jīng)過優(yōu)化,可完全避免乘除法運(yùn)算。采用方式一設(shè)計(jì)最小二乘矩陣實(shí)現(xiàn)框圖如圖5所示。將高斯核定點(diǎn)化為[1,4,6,4,1]/16,這個(gè)加權(quán)計(jì)算需要3次乘法、4次加法和1次除法運(yùn)算。乘除法運(yùn)算量較大,但是當(dāng)乘數(shù)或除數(shù)為2的N次方時(shí),可用移位操作來代替乘除法運(yùn)算,從而大幅度降低FPGA資源占用率。定點(diǎn)化高斯核中只有乘6運(yùn)算不滿足2的N次方,將乘6運(yùn)算拆分成兩級流水線乘2、乘4和一次加法運(yùn)算。經(jīng)過上述優(yōu)化,最小二乘矩陣的構(gòu)造僅需要加法運(yùn)算和移位操作,大大降低了FPGA圖5最小二乘矩陣實(shí)現(xiàn)框圖
Fig.5The realization diagram of leastsquare matrices資源占用率,提高了光流場的計(jì)算速度。將最小二乘矩陣結(jié)果帶入式(1)可計(jì)算得到最終的光流場速度。式(1)中包含矩陣求逆運(yùn)算,計(jì)算量大,為避免中間結(jié)果溢出必須采用浮點(diǎn)數(shù)運(yùn)算。浮點(diǎn)數(shù)運(yùn)算單元結(jié)構(gòu)如圖6所示,首先將上一步計(jì)算結(jié)果通過int to float模塊全部轉(zhuǎn)化為浮點(diǎn)數(shù),然后進(jìn)行浮點(diǎn)數(shù)基本數(shù)學(xué)運(yùn)算,最后再將結(jié)果通過float to int模塊轉(zhuǎn)化為定點(diǎn)數(shù)。除流水線結(jié)構(gòu)需自行設(shè)計(jì)外,所有的浮點(diǎn)數(shù)運(yùn)算都使用Quartus II軟件提供的IP核來完成。
圖6FPGA浮點(diǎn)計(jì)算單元框圖
Fig.6FPGA floating point calculation unit block diagram
5系統(tǒng)測試效果根據(jù)上述優(yōu)化方法在FPGA平臺上實(shí)現(xiàn)了基于LK算法的實(shí)時(shí)光流計(jì)算。在30幀/s的速度下,本系統(tǒng)可對640×480分辨率的視頻進(jìn)行實(shí)時(shí)處理,實(shí)現(xiàn)了對單個(gè)運(yùn)動(dòng)目標(biāo)進(jìn)行實(shí)時(shí)跟蹤的目的。高閾值下實(shí)際測試的效果圖見圖7(a);當(dāng)速度閾值降低時(shí),如圖7(b)所示,目標(biāo)跟蹤的靈敏度得到了提高,但物體的輪廓明顯變粗,可通過腐蝕和膨脹等圖像處理算法來得到清晰的目標(biāo)輪廓,也可進(jìn)一步運(yùn)算得到物體的形心,實(shí)現(xiàn)對目標(biāo)的軌跡進(jìn)行跟蹤。圖7實(shí)際測試效果圖
Fig.7The actual test rendering
6結(jié)論通過在圖像預(yù)處理階段增加時(shí)間軸濾波和在3D導(dǎo)數(shù)計(jì)算階段增加匹配濾波,并使用優(yōu)化的匹配濾波參數(shù),提高了LK算法的計(jì)算精度。在視頻的仿真中可明顯看出,經(jīng)過這些優(yōu)化,光流場的精度得到了提高,方向一致性良好。在FPGA硬件平臺上,通過對流水線結(jié)構(gòu)進(jìn)行充分的優(yōu)化,并設(shè)計(jì)了四端口RAM進(jìn)行圖像緩存,實(shí)現(xiàn)了對30幀/s下640×480分辨率的視頻實(shí)時(shí)處理,對運(yùn)動(dòng)目標(biāo)實(shí)現(xiàn)了高速精確的視頻跟蹤。由于SDRAM仍有很大剩余空間,FPGA也未使用于最高頻率,因此,在更換高速、高分辨率攝像頭的情況下,該系統(tǒng)的性能還可進(jìn)一步提升。參考文獻(xiàn):
[1]陳浙泊,林斌.動(dòng)態(tài)圖像處理系統(tǒng)的設(shè)計(jì)與研究[J].光學(xué)儀器,2003,25(6):3438.
[2]候宏錄,高偉平.500 fps圖像采集及實(shí)時(shí)顯示關(guān)鍵技術(shù)研究[J].光學(xué)儀器,2013,35(2):5257.
[3]劉松林,牛照東,陳曾平,等.基于加權(quán)LucasKanade算法的目標(biāo)跟蹤[J].光學(xué)工程,2011,38(8):6772.
[4]靳鵬飛.一種改進(jìn)的Sobel圖像邊緣檢測算法[J].應(yīng)用光學(xué),2008,29(4):625628.
[5]SIMONCELLI E P.Design of multidimensional derivative filters[C]∥Proceedings of the IEEE International Conference on Image Processing,Austin,1994,1:791793.
[6]潘金山,蘇志勛,王偉.運(yùn)動(dòng)細(xì)節(jié)估計(jì)的光流場方法[J].計(jì)算機(jī)輔助設(shè)計(jì)與圖形學(xué)學(xué)報(bào),2011,23(8):14331441.
[7]夏毓鵬,王昕,胡鋒.光流場算法中優(yōu)化圖像梯度數(shù)據(jù)可信度方法[J].計(jì)算機(jī)工程與應(yīng)用,2010,46(4):163165.