文獻(xiàn)標(biāo)識碼: A
DOI:10.16157/j.issn.0258-7998.2016.11.010
中文引用格式: 劉聲,韓俊剛,,韓帥. 引導(dǎo)濾波的軟硬件協(xié)同加速器設(shè)計(jì)與實(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]、圖像去噪,、圖像增強(qiáng),、級聯(lián)采樣等方面有很好的處理效果。
但是,,隨著處理圖像的尺寸不斷擴(kuò)大,,基于CPU處理的引導(dǎo)濾波算法越來越不能滿足人們的需求,因此,,王新磊等[5]用CUDA實(shí)現(xiàn)了引導(dǎo)濾波GPU加速,。為使引導(dǎo)濾波能在嵌入式領(lǐng)域達(dá)到實(shí)時處理,本文提出了基于FPGA對引導(dǎo)濾波實(shí)現(xiàn)加速的方法,。
1 引導(dǎo)濾波算法介紹
引導(dǎo)濾波理論的基礎(chǔ)是局部線性模型,。該模型認(rèn)為:任意函數(shù)上的任意一點(diǎn)與該點(diǎn)鄰近部分的點(diǎn)可以看成是線性關(guān)系,一個復(fù)雜的函數(shù)可以用很多局部線性函數(shù)來表示,。若需要求出該函數(shù)上某一點(diǎn)的值,,只需求出所有包含該點(diǎn)的線性函數(shù)的值,并求出這些線性函數(shù)值的平均值,,這個平均值就是該函數(shù)上所求點(diǎn)的值,。
2 引導(dǎo)濾波加速器設(shè)計(jì)
2.1 實(shí)驗(yàn)環(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è)計(jì)
本文將單通道的圖像數(shù)據(jù)存儲在PS端的外部存儲中,,之后讀取數(shù)據(jù)到內(nèi)存中,。為了獲取最大的運(yùn)算性能,在引導(dǎo)濾波函數(shù)調(diào)用前分配好算法需要的圖像緩沖空間,將內(nèi)存空間指針以參數(shù)形式傳遞給引導(dǎo)濾波函數(shù),,供其使用,,之后PS端調(diào)用引導(dǎo)濾波函數(shù)。本文將引導(dǎo)濾波算法分為兩部分,,其中一部分是將對算法有較大影響的函數(shù)用硬件加速,,硬件加速部分將數(shù)據(jù)傳到PL端,PL端將其用硬件邏輯電路實(shí)現(xiàn),,對實(shí)現(xiàn)的硬件再通過流水線,、并行處理和算法重構(gòu)等優(yōu)化方法對算法進(jìn)行優(yōu)化。處理完數(shù)據(jù)后,,再將數(shù)據(jù)寫回到PS端,。最終PS端將處理好的圖像存儲在外部存儲中。算法結(jié)構(gòu)設(shè)計(jì)如圖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]進(jìn)行傳輸,。
2.3.2 流水線優(yōu)化
為了增加程序的并發(fā)性,,流水線優(yōu)化可以使當(dāng)前操作沒有完成之前就開始執(zhí)行下一個操作,。環(huán)境SDSoC的PIPELINE[8,,10]優(yōu)化指令可以對函數(shù)及循環(huán)進(jìn)行優(yōu)化。下面分別對函數(shù)的流水線和循環(huán)的流水線優(yōu)化進(jìn)行說明,。
(1)函數(shù)的流水線操作
從圖2可以看出,,func函數(shù)需要3個時鐘完成一組操作,。若進(jìn)行兩組操作,在沒有進(jìn)行流水線優(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)來對圖像像素進(jì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ù)的同步方式進(jìn)行控制,。硬件開始工作后,PS端的async指令會交還CPU的控制權(quán),,繼續(xù)執(zhí)行PS端的任務(wù),,實(shí)現(xiàn)軟硬件函數(shù)并行處理。通過這種方法,,可以增加系統(tǒng)的并行性,,提高算法的效率。wait命令用來同步數(shù)據(jù),,使得下一個函數(shù)能夠成功應(yīng)用上一個硬件函數(shù)的輸出結(jié)果,,防止程序死鎖。
3 實(shí)驗(yàn)結(jié)果分析
本文輸入單通道的.bmp格式文件為待處理圖像,,模板大小選擇3×3,,引導(dǎo)圖像和待處理圖像為同一張圖像,實(shí)驗(yàn)效果如圖4所示,。
其中,,圖4(a)為待處理圖像和引導(dǎo)圖像,圖4(b)為經(jīng)過軟硬件協(xié)同加速器實(shí)現(xiàn)的引導(dǎo)濾波效果圖,,圖4(c)為在PC上用OpenCV庫純軟件實(shí)現(xiàn)的引導(dǎo)濾波效果圖,。通過對比可看出,經(jīng)過軟硬件協(xié)同加速器實(shí)現(xiàn)的引導(dǎo)濾波和在PC上純軟件實(shí)現(xiàn)的引導(dǎo)濾波在效果上基本相同,。
為了比較本文提出的軟硬件協(xié)同加速器的加速效果,,分別測出了在PS端對不同大小圖像實(shí)現(xiàn)引導(dǎo)濾波算法的幀率值和軟硬件協(xié)同加速器對不同大小圖像實(shí)現(xiàn)引導(dǎo)濾波算法的頻率值。實(shí)驗(yàn)數(shù)據(jù)如表1所示,。
4 結(jié)束語
本文實(shí)現(xiàn)了引導(dǎo)濾波的軟硬件協(xié)同加速器,,并利用開發(fā)環(huán)境SDSoC所提供的優(yōu)化指令對硬件進(jìn)行了性能優(yōu)化。與CUDA實(shí)現(xiàn)的引導(dǎo)濾波相比,,性能雖有所不及,,但加速效果明顯,并在低功耗及開發(fā)周期上優(yōu)勢大于CUDA,。本文提出的軟硬件協(xié)同加速器可直接用于內(nèi)置CPU和FPGA的嵌入式系統(tǒng)中,,縮短了嵌入式工程師開發(fā)周期,提高了系統(tǒng)整體性能,。
參考文獻(xiàn)
[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].計(jì)算機(jī)工程,2016,,42(1):265-271.
[4] 漆琳智,,張超,吳向陽.引導(dǎo)濾波的單幅圖像前景精確提取[J].杭州電子科技大學(xué)學(xué)報,,2013,,33(5).
[5] 王新磊,何凱,,王曉文.引導(dǎo)濾波算法的CUDA加速實(shí)現(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.