文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.2017.05.017
中文引用格式: 彭習(xí)武,張濤. 基于Vivado HLS的邊緣檢測硬件加速應(yīng)用[J].電子技術(shù)應(yīng)用,2017,43(5):70-73.
英文引用格式: Peng Xiwu,Zhang Tao. Edge detection hardware acceleration based on Vivado HLS[J].Application of Electronic Technique,2017,43(5):70-73.
0 引言
在計(jì)算機(jī)視覺和圖像處理領(lǐng)域中,圖像邊緣檢測技術(shù)起著重要的作用,其效果好壞直接影響整個(gè)系統(tǒng)的性能。由于圖像的邊緣蘊(yùn)含了豐富的內(nèi)在信息,是進(jìn)行圖像分割、特征值提取的重要依據(jù)。邊緣檢測不僅能減少處理數(shù)據(jù),又能保留圖像中物體的形狀信息,是實(shí)時(shí)圖像處理中的重要內(nèi)容之一[1]。
在現(xiàn)階段,主要采用軟件方式或者FPGA硬件方式來實(shí)現(xiàn)邊緣檢測。文獻(xiàn)[2]-[4]采用軟件方法實(shí)現(xiàn)圖像的邊緣檢測,雖然邊緣檢測的效果得到了改善,但是不能在延時(shí)和數(shù)據(jù)帶寬方面做出改善。文獻(xiàn)[5]-[7]采用FPGA方法實(shí)現(xiàn)圖像的邊緣檢測,此硬件方法雖然改善了邊緣檢測的延時(shí)長和數(shù)據(jù)帶寬受限的不足,但是由于FPGA硬件設(shè)計(jì)的復(fù)雜性會(huì)導(dǎo)致整個(gè)電路開發(fā)周期變長。
本文采用Xilinx公司的Vivado HLS將邊緣檢測的軟件代碼轉(zhuǎn)化為RTL硬件電路。這樣不僅解決了軟件方法所帶給系統(tǒng)延時(shí)長和數(shù)據(jù)帶寬窄的缺點(diǎn),而且避免了FPGA硬件電路設(shè)計(jì)周期長的不足。
1 邊緣檢測算法設(shè)計(jì)
基于Sobel算子的邊緣檢測具有算法簡單、實(shí)現(xiàn)方便等優(yōu)勢(shì),但在處理圖像時(shí)會(huì)存在對(duì)噪聲敏感和邊緣界限模糊等不足,所以需要在Sobel算法的基礎(chǔ)上進(jìn)行優(yōu)化。優(yōu)化后的邊緣檢測由中值濾波、膨脹濾波、邊緣檢測模塊和腐蝕濾波模塊構(gòu)成,如圖1所示。在圖像輸入后,首先中值濾波器對(duì)輸入圖像進(jìn)行平滑圖像噪聲處理,然后由膨脹濾波器求出圖像的局部最大值,再由邊緣檢測模塊來提取圖像的邊緣信息,最后由腐蝕濾波器消除圖像中的“斑點(diǎn)”噪聲,從而得到最佳的圖像邊緣。
2 邊緣檢測軟硬件協(xié)同設(shè)計(jì)
邊緣檢測的軟硬件協(xié)同設(shè)計(jì)主要包括軟件應(yīng)用設(shè)計(jì)、硬件加速設(shè)計(jì)和SoC應(yīng)用設(shè)計(jì)。
2.1 軟硬件協(xié)作開發(fā)流程
軟件應(yīng)用設(shè)計(jì)是將邊緣檢測的功能用OpenCV函數(shù)或者自定義功能函數(shù)實(shí)現(xiàn);硬件加速設(shè)計(jì)將軟件代碼轉(zhuǎn)換為RTL電路,其中不可綜合的函數(shù)或者語句需用Vivado HLS支持的函數(shù)替換;SoC應(yīng)用設(shè)計(jì)將Vivado HLS輸出的RTL電路應(yīng)用到實(shí)際的SoC系統(tǒng)[8]。圖2是邊緣檢測硬件加速流程圖。
如圖2所示,首先完成軟件應(yīng)用的開發(fā),然后將Vivado HLS不能綜合的OpenCV函數(shù)鏈替換成HLS視頻庫函數(shù)鏈,最后封裝成IP在FPGA中調(diào)用。
2.2 邊緣檢測軟硬件協(xié)作實(shí)現(xiàn)
在軟件實(shí)現(xiàn)階段使用OpenCV函數(shù)庫或者自定義的C語言函數(shù)實(shí)現(xiàn)邊緣檢測算法,但Vivado HLS不能綜合所有的軟件代碼。當(dāng)軟件代碼中存在Vivado HLS不能綜合的函數(shù)時(shí)就需要將這些函數(shù)展開或者替換,如定點(diǎn)運(yùn)算、片上的行緩存和窗口緩存來完成動(dòng)態(tài)的內(nèi)存分配、浮點(diǎn)和圖像在外部存儲(chǔ)器中存放和修改的操作。
硬件加速方案是在軟件應(yīng)用的基礎(chǔ)上實(shí)現(xiàn)的。在搭建SoC時(shí),使用的是芯片內(nèi)部的AXI互聯(lián)總線,其所支持的數(shù)據(jù)類型是AXI4 video stream。在設(shè)計(jì)邊緣檢測IP接口時(shí)需要將AXI4 video stream與Vivado HLS所支持的hls::Mat類型進(jìn)行相互轉(zhuǎn)換。數(shù)據(jù)的轉(zhuǎn)換模塊見圖2中AXIvideo2Mat和Mat2AXIvideo模塊。Vivado HLS將OpenCV函數(shù)鏈轉(zhuǎn)換成HLS視頻庫函數(shù)鏈。硬件加速階段包括邊緣檢測的仿真與優(yōu)化,只有在優(yōu)化和仿真通過之后才將RTL級(jí)電路封裝成IP核輸出。
3 系統(tǒng)搭建與IP核優(yōu)化
邊緣檢測的軟硬件協(xié)作應(yīng)用具有一定的局限性,只能在具備處理器和可編程邏輯陣列的SoC中應(yīng)用。本文是在Xilinx公司的zc7z020clg484-1系列芯片中進(jìn)行邊緣檢測的系統(tǒng)搭建與功能驗(yàn)證。
3.1 SoC系統(tǒng)設(shè)計(jì)
Vivado HLS將邊緣檢測IP輸出到Vivado的IP catalog,在SoC系統(tǒng)設(shè)計(jì)時(shí)調(diào)用邊緣檢測IP核即可。搭建的邊緣檢測SoC系統(tǒng)如圖3所示。
在圖3中,粗箭頭表示圖像數(shù)據(jù)流的路徑,細(xì)箭頭表示控制信號(hào)的方向。圖3所示的陰影部分為可裁剪系統(tǒng)(PS),白色區(qū)域?yàn)榭删幊踢壿?PL)。由于Vivado HLS不支持指針訪問幀緩存,需要用AXI VDMA來訪問幀數(shù)據(jù)。
視頻流經(jīng)過HDMI輸入到視頻輸入控制器,數(shù)據(jù)流通過AXI互聯(lián)總線存入到DDR3存儲(chǔ)器中,Cortex-A9通過AXI互聯(lián)總線控制AXI VDMA和邊緣檢測IP去存取圖像數(shù)據(jù),處理完的數(shù)據(jù)緩存到DDR3,最后 Cortex-A9將處理好的數(shù)據(jù)輸出到視頻顯示控制器。硬件加速是將Cortex-A9處理的運(yùn)算轉(zhuǎn)移到PL去完成,這樣會(huì)減少處理器的負(fù)載。
3.2 HLS模塊優(yōu)化
Vivado HLS有兩種優(yōu)化方式,一種是在Directive控制欄設(shè)置優(yōu)化變量和參數(shù),另一種方法是在代碼中使用#pragma命令來定義變量實(shí)現(xiàn)類型和結(jié)構(gòu)。根據(jù)系統(tǒng)的需求對(duì)邊緣檢測進(jìn)行串行和并行實(shí)現(xiàn)策略。
3.2.1 串行實(shí)現(xiàn)方案
串行實(shí)現(xiàn)是保持軟件代碼的順序執(zhí)行結(jié)構(gòu),邊緣檢測模塊按照順序串行執(zhí)行。當(dāng)硬件電路工作在100 MHz頻率時(shí),處理像素為(1 080×1 092)的圖像速率為0.7幀/s。通過表1可知Sobel子模塊消耗了1 142 ms,導(dǎo)致了整個(gè)邊緣檢測功能塊的速率降低。當(dāng)邊緣檢測IP的數(shù)據(jù)的寬度為16 bit、像素深度為8 bit時(shí),邊緣檢測的處理速率為825.5 KB/s。
3.2.2 并行實(shí)現(xiàn)方案
并行實(shí)現(xiàn)是將for循環(huán)打平、替換數(shù)組和增加流水線操作來實(shí)現(xiàn)并行執(zhí)行。與串行實(shí)現(xiàn)對(duì)比可知,在速率方面提高68.5倍左右,在100 MHz的頻率下,處理像素為(1 080×1 092)的圖像速率為48幀/s。當(dāng)邊緣檢測IP的數(shù)據(jù)的寬度為16 bit、像素深度為8 bit時(shí),邊緣檢測的處理速率為56 609.28 KB/s。
通過以上兩種實(shí)現(xiàn)可知,并行比串行實(shí)現(xiàn)的處理速率速度提高了68.5倍左右,與處理時(shí)間相對(duì)應(yīng)的數(shù)據(jù)吞吐率也提高了68.5倍。當(dāng)數(shù)據(jù)帶寬不滿足要求時(shí),可以通過修改軟件代碼中變量的位寬來增加IP數(shù)據(jù)端口的寬度,從而提高數(shù)據(jù)吞吐量。
硬件電路所使用的資源往往也是算法考慮的因素之一。表2是兩種實(shí)現(xiàn)策略所需要的硬件資源。
在資源使用方面,并行比串行實(shí)現(xiàn)所使用的資源多,占整個(gè)芯片的資源分別為BRAM_18K為10%,DSP48E為0,F(xiàn)F為3%,LUT為10%??芍Y源滿足設(shè)計(jì)要求。
4 結(jié)果分析
通過三組公路真實(shí)場景來驗(yàn)證本文邊緣檢測的效果。第一組是在白天拍攝的公路場景,見圖4,圖4(a)為輸入的原始圖像,圖4(b)為OpenCV邊緣檢測的結(jié)果,圖4(c)為硬件加速邊緣檢測結(jié)果。第二組是在晚間拍攝的公路場景(曝光效果差),見圖5,圖5(a)為輸入的原始圖像,圖5(b)為OpenCV邊緣檢測的結(jié)果,圖5(c)為硬件加速邊緣檢測結(jié)果。第三組是在晚間拍攝的公路場景,見圖6,圖6(a)為輸入的原始圖像,圖6(b)為OpenCV邊緣檢測的結(jié)果,圖6(c)為硬件加速邊緣檢測結(jié)果。
對(duì)圖4、圖5和圖6從橫縱兩個(gè)角度來分析硬件加速邊緣檢測的效果。橫向分析,與OpenCV邊緣檢測結(jié)果比較可知,硬件加速方案輸出邊緣圖像線條更加的明顯,在圖5曝光效果差的情況下OpenCV存在邊緣漏檢測的情形,而硬件加速方案則不存在漏檢的情況;縱向分析,在白天拍攝的場景邊緣檢測的結(jié)果要比晚上輸出的效果好些,在晚上拍攝的場景曝光好的邊緣檢測效果要比曝光差輸出的效果好。
對(duì)三組場景下的硬件加速邊緣檢測效果分析可知,硬件加速邊緣檢測明效果顯優(yōu)于OpenCV邊緣檢測,同時(shí)在相機(jī)曝光效果差或者外界環(huán)境復(fù)雜的情況下,硬件加速邊緣檢測都能進(jìn)行有效邊緣檢測。
5 結(jié)論
針對(duì)傳統(tǒng)OpenCV圖像處理存在延時(shí)長和數(shù)據(jù)帶寬受限的缺點(diǎn),采用硬件加速可以彌此不足。采用Vivado HLS在軟件應(yīng)用的基礎(chǔ)上進(jìn)一步實(shí)現(xiàn)硬件電路設(shè)計(jì),大大縮短了系統(tǒng)的開發(fā)周期。本文不僅提出邊緣檢測的硬件加速方案,同時(shí)提出了在數(shù)據(jù)處理量大和處理速度快的應(yīng)用中可以通過軟硬件結(jié)合來提供系統(tǒng)設(shè)計(jì)的方案。
參考文獻(xiàn)
[1] 關(guān)新平,趙立興,唐英干.圖像去噪混合濾波方法[J].中國圖象圖形學(xué)報(bào),2005,10(3):332-337.
[2] 蔣婷,譚躍剛,劉泉.基于SOBEL算子的圖像清晰度評(píng)價(jià)函數(shù)研究[J].計(jì)算機(jī)與數(shù)字工程,2008(8):129-131,191.
[3] 靳鵬飛.一種改進(jìn)的Sobel圖像邊緣檢測算法[J].應(yīng)用光學(xué),2008(4):625-628.
[4] 白俊江,洪春勇.基于Sobel的邊緣檢測方法[J].電腦知識(shí)與技術(shù),2009(21):5847-5849.
[5] 李錦明,閆曉俊,江旭東,等.Sobel圖像邊沿檢測算法的優(yōu)化設(shè)計(jì)與實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2016,42(3):71-73.
[6] 楊新華,寇為剛.基于FPGA的Sobel算子圖像邊緣檢測算法[J].儀表技術(shù)與傳感器,2013(1):102-104.
[7] 寧賽男,朱明,孫宏海,等.一種改進(jìn)的Sobel自適應(yīng)邊緣檢測的FPGA實(shí)現(xiàn)[J].液晶與顯示,2014(3):395-402.
[8] 郭豐收.Xilinx FPGA/Zynq設(shè)計(jì)中使用HLS實(shí)現(xiàn)OpenCV的開發(fā)流程[J].電子產(chǎn)品世界,2014(2-3):50-52.
作者信息:
彭習(xí)武,張 濤
(武漢科技大學(xué) 信息科學(xué)與工程學(xué)院,湖北 武漢430081)