文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.2016.11.010
中文引用格式: 劉聲,,韓俊剛,,韓帥. 引導(dǎo)濾波的軟硬件協(xié)同加速器設(shè)計與實現(xiàn)[J].電子技術(shù)應(yīng)用,2016,,42(11):44-45,,48.
英文引用格式: Liu Sheng,Han Jungang,,Han Shuai. The accelerator design and implementation using hardware/software co-design for guided filter[J].Application of Electronic Technique,,2016,42(11):44-45,,48.
0 引言
2010年HE K M等人提出了引導(dǎo)濾波(Guided Filter)[1]算法,。該算法與雙邊濾波最大的相似之處就是同樣具有保持邊緣的特性,,不同之處在于它還克服了去偽影的影響。該算法被大量用于圖像處理領(lǐng)域中,,在去雨雪[2],、去霧[3]、前景提取[4],、圖像去噪,、圖像增強、級聯(lián)采樣等方面有很好的處理效果,。
但是,,隨著處理圖像的尺寸不斷擴大,基于CPU處理的引導(dǎo)濾波算法越來越不能滿足人們的需求,,因此,,王新磊等[5]用CUDA實現(xiàn)了引導(dǎo)濾波GPU加速。為使引導(dǎo)濾波能在嵌入式領(lǐng)域達到實時處理,,本文提出了基于FPGA對引導(dǎo)濾波實現(xiàn)加速的方法,。
1 引導(dǎo)濾波算法介紹
引導(dǎo)濾波理論的基礎(chǔ)是局部線性模型,。該模型認為:任意函數(shù)上的任意一點與該點鄰近部分的點可以看成是線性關(guān)系,一個復(fù)雜的函數(shù)可以用很多局部線性函數(shù)來表示,。若需要求出該函數(shù)上某一點的值,,只需求出所有包含該點的線性函數(shù)的值,,并求出這些線性函數(shù)值的平均值,,這個平均值就是該函數(shù)上所求點的值。
2 引導(dǎo)濾波加速器設(shè)計
2.1 實驗環(huán)境介紹
本文采用Zynq-7000系列的Zedboard開發(fā)板[6]作為硬件開發(fā)環(huán)境,,其PS端提供了ARM Cortex-A9處理器,、512 MB DDR3內(nèi)存空間和外部存儲接口。其PL端的XC7Z020 CLG481-1 EEP芯片提供了可編程邏輯陣列單元,,為硬件加速提供了豐富的邏輯資源,。本文采用SDSoC[7]作為軟件開發(fā)環(huán)境,它是基于Zynq-7000全可編程芯片在嵌入式系統(tǒng)中的IDE(Integrated Development Environment),。
2.2 算法結(jié)構(gòu)設(shè)計
本文將單通道的圖像數(shù)據(jù)存儲在PS端的外部存儲中,,之后讀取數(shù)據(jù)到內(nèi)存中。為了獲取最大的運算性能,,在引導(dǎo)濾波函數(shù)調(diào)用前分配好算法需要的圖像緩沖空間,,將內(nèi)存空間指針以參數(shù)形式傳遞給引導(dǎo)濾波函數(shù),供其使用,,之后PS端調(diào)用引導(dǎo)濾波函數(shù),。本文將引導(dǎo)濾波算法分為兩部分,其中一部分是將對算法有較大影響的函數(shù)用硬件加速,,硬件加速部分將數(shù)據(jù)傳到PL端,,PL端將其用硬件邏輯電路實現(xiàn),對實現(xiàn)的硬件再通過流水線,、并行處理和算法重構(gòu)等優(yōu)化方法對算法進行優(yōu)化,。處理完數(shù)據(jù)后,再將數(shù)據(jù)寫回到PS端,。最終PS端將處理好的圖像存儲在外部存儲中,。算法結(jié)構(gòu)設(shè)計如圖1所示。
2.3 優(yōu)化方法
2.3.1 流數(shù)據(jù)傳輸
為了獲取PS端和PL端的最大傳輸性能,,本文使用SDSoC開發(fā)環(huán)境中的sds_alloc函數(shù)[8]在PS端申請連續(xù)的物理地址作為圖像緩沖區(qū),,并在硬件函數(shù)聲明前插入指導(dǎo)編譯器的參數(shù)#pragma SDS dada zero_copy(imgIn[0:rows*cols])和#pragma SDS data access_pattern(imgIn[0:rows*cols])命令來將圖像數(shù)據(jù)轉(zhuǎn)化為流數(shù)據(jù)[8]進行傳輸。
2.3.2 流水線優(yōu)化
為了增加程序的并發(fā)性,,流水線優(yōu)化可以使當前操作沒有完成之前就開始執(zhí)行下一個操作,。環(huán)境SDSoC的PIPELINE[8,10]優(yōu)化指令可以對函數(shù)及循環(huán)進行優(yōu)化,。下面分別對函數(shù)的流水線和循環(huán)的流水線優(yōu)化進行說明,。
(1)函數(shù)的流水線操作
從圖2可以看出,,func函數(shù)需要3個時鐘完成一組操作。若進行兩組操作,,在沒有進行流水線優(yōu)化的情況下,,每次操作順序執(zhí)行,最后一次輸出需要6個時鐘,;而經(jīng)過流水線優(yōu)化的func函數(shù),,每經(jīng)過1個時鐘就可以讀取下一組數(shù)據(jù),兩組操作完成后只需要4個時鐘周期就能夠輸出結(jié)果,。由此可見,,流水線優(yōu)化可以提高函數(shù)的并發(fā)性,增加算法的效率,。
(2)循環(huán)的流水線優(yōu)化
從圖3可看出,,用循環(huán)來對圖像像素進行處理,假設(shè)每個像素處理時間為30個時鐘周期,,若處理圖像大小為512×512,,則未流水線優(yōu)化前,需要的總時鐘個數(shù)為7 864 320個時鐘周期,;流水線優(yōu)化后,,需要的總時鐘個數(shù)為262 174個時鐘周期,性能有了近30倍的提升,。
2.3.3 并行處理
SDSoC環(huán)境提供了async和wait指令,,使得程序員能夠?qū)τ布瘮?shù)的同步方式進行控制。硬件開始工作后,,PS端的async指令會交還CPU的控制權(quán),,繼續(xù)執(zhí)行PS端的任務(wù),實現(xiàn)軟硬件函數(shù)并行處理,。通過這種方法,,可以增加系統(tǒng)的并行性,提高算法的效率,。wait命令用來同步數(shù)據(jù),,使得下一個函數(shù)能夠成功應(yīng)用上一個硬件函數(shù)的輸出結(jié)果,防止程序死鎖,。
3 實驗結(jié)果分析
本文輸入單通道的.bmp格式文件為待處理圖像,,模板大小選擇3×3,引導(dǎo)圖像和待處理圖像為同一張圖像,,實驗效果如圖4所示,。
其中,圖4(a)為待處理圖像和引導(dǎo)圖像,,圖4(b)為經(jīng)過軟硬件協(xié)同加速器實現(xiàn)的引導(dǎo)濾波效果圖,,圖4(c)為在PC上用OpenCV庫純軟件實現(xiàn)的引導(dǎo)濾波效果圖,。通過對比可看出,經(jīng)過軟硬件協(xié)同加速器實現(xiàn)的引導(dǎo)濾波和在PC上純軟件實現(xiàn)的引導(dǎo)濾波在效果上基本相同,。
為了比較本文提出的軟硬件協(xié)同加速器的加速效果,,分別測出了在PS端對不同大小圖像實現(xiàn)引導(dǎo)濾波算法的幀率值和軟硬件協(xié)同加速器對不同大小圖像實現(xiàn)引導(dǎo)濾波算法的頻率值。實驗數(shù)據(jù)如表1所示,。
4 結(jié)束語
本文實現(xiàn)了引導(dǎo)濾波的軟硬件協(xié)同加速器,,并利用開發(fā)環(huán)境SDSoC所提供的優(yōu)化指令對硬件進行了性能優(yōu)化。與CUDA實現(xiàn)的引導(dǎo)濾波相比,,性能雖有所不及,,但加速效果明顯,,并在低功耗及開發(fā)周期上優(yōu)勢大于CUDA,。本文提出的軟硬件協(xié)同加速器可直接用于內(nèi)置CPU和FPGA的嵌入式系統(tǒng)中,縮短了嵌入式工程師開發(fā)周期,,提高了系統(tǒng)整體性能,。
參考文獻
[1] HE K M,SUN J,,TANG X O.Guided image filtering[C].Proceddings of the 11th European Conference on Computer Vision.Heraklion,,Crete,Greece:Lecture Notes in computer Science,,2010:1-14.
[2] 鄭賢輝.單幅圖像去雨雪的算法研究[D].廈門:廈門大學(xué),,2014.
[3] 楊燕,白海平,,王帆.基于引導(dǎo)濾波的單幅圖像自適應(yīng)去霧算法[J].計算機工程,,2016,42(1):265-271.
[4] 漆琳智,,張超,,吳向陽.引導(dǎo)濾波的單幅圖像前景精確提取[J].杭州電子科技大學(xué)學(xué)報,2013,,33(5).
[5] 王新磊,,何凱,王曉文.引導(dǎo)濾波算法的CUDA加速實現(xiàn)[J].吉林大學(xué)學(xué)報,,2016,,34(1).
[6] Xilinx.Zynq architecture[Z].2016.
[7] Xilinx.SDSoC development environment[Z].2016.
[8] Xilinx.SDSoC environment user guide[Z].2016.
[9] CHATI H D,MUHLBAUER F,,BRAUN T,,et al.Hardward/software co-design of a key point detector on FPGA[C].IEEE Computer Society,2007:355-356.
[10] Xilinx.Vivado design suite user guide:High-level synthesis[EB/OL].[2016-02].http:www.xilinx.com.