《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 基于Vivado HLS的Canny算法實(shí)時(shí)加速設(shè)計(jì)
基于Vivado HLS的Canny算法實(shí)時(shí)加速設(shè)計(jì)
2018年電子技術(shù)應(yīng)用第9期
譚檢成1,2,吳定祥2,3,李明鑫1,2,唐立軍1,2
1.長沙理工大學(xué) 物理與電子科學(xué)學(xué)院,湖南 長沙410114; 2.近地空間電磁環(huán)境監(jiān)測(cè)與建模湖南省普通高校重點(diǎn)實(shí)驗(yàn)室,湖南 長沙 410114; 3.長沙億旭智能科技有限公司,湖南 長沙410004
摘要: 針對(duì)Canny邊緣檢測(cè)算法在實(shí)時(shí)圖像處理過程中運(yùn)算耗時(shí)長、數(shù)據(jù)運(yùn)算量大的缺點(diǎn),研究了利用Vivado HLS實(shí)現(xiàn)Canny邊緣檢測(cè)算法的硬件加速方法。該方法由FPGA的邏輯資源生成算法對(duì)應(yīng)的RTL級(jí)硬件電路,實(shí)現(xiàn)算法硬件加速。實(shí)驗(yàn)結(jié)果表明,該方法能快速實(shí)時(shí)檢測(cè)圖像邊緣,有效降低FPGA設(shè)計(jì)圖像算法的難度,可以應(yīng)用到實(shí)時(shí)視頻圖像處理中。
中圖分類號(hào): TN911.73
文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.180429
中文引用格式: 譚檢成,吳定祥,李明鑫,等. 基于Vivado HLS的Canny算法實(shí)時(shí)加速設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2018,44(9):59-62,66.
英文引用格式: Tan Jiancheng,Wu Dingxiang,Li Mingxin,et al. Real-time acceleration design of Canny algorithm based on Vivado HLS[J]. Application of Electronic Technique,2018,44(9):59-62,66.
Real-time acceleration design of Canny algorithm based on Vivado HLS
Tan Jiancheng1,2,Wu Dingxiang2,3,Li Mingxin1,2,Tang Lijun1,2
1.School of Physics and Electronic Sciences,Changsha University of Science & Technology,Changsha 410114,China; 2.Hunan Province Higher Education Key Laboratory of Modeling and Monitoring on the Near-Earth Electromagnetic Environments, Changsha 410114,China; 3.Changsha Billion Set Intelligent Technology Co.,Ltd.,Changsha 410004,China
Abstract: On the shortcomings of Canny edge detection algorithm in the real-time image processing time-consuming and large amount of data for computation, the hardware acceleration method of Canny edge detection algorithm using Vivado HLS is proposed. The method, implemented hardware acceleration, generates the RTL level hardware circuit corresponding to the algorithm of the FPGA logic resources. The results show that the method can quickly detect the edge of the image and effectively reduce the difficulty of FPGA design image algorithm, which can be applied to the real-time video image processing.
Key words : image processing;Vivado HLS;edge detection; hardware acceleration

0 引言

    邊緣檢測(cè)是圖像特征提取、目標(biāo)識(shí)別的基礎(chǔ),圖像邊緣提取的好壞直接影響后續(xù)處理的難易度和準(zhǔn)確度。在眾多邊緣提取算法中,Canny邊緣提取算法由于其良好的檢測(cè)效果在圖像處理中得到廣泛應(yīng)用。而現(xiàn)階段的工業(yè)視覺檢測(cè)中,圖像處理多為PC平臺(tái)或者ARM平臺(tái),在這些平臺(tái)下,Canny邊緣檢測(cè)由于計(jì)算量大、耗時(shí)長,對(duì)平臺(tái)本身性能要求也很高。FPGA憑借高速并行性的特性,在進(jìn)行圖像處理時(shí)能很好地保證系統(tǒng)的實(shí)時(shí)性,因此越來越多開發(fā)人員使用FPGA進(jìn)行圖像處理[1-3]。但在現(xiàn)有的文獻(xiàn)中,有些受FPGA的歷史功能設(shè)計(jì)局限,過多地關(guān)注FPGA底層設(shè)計(jì),有些采用中值濾波、改進(jìn)高斯濾波模板進(jìn)行Canny邊緣檢測(cè),設(shè)計(jì)周期較長,硬件加速效果不明顯。武漢科技大學(xué)彭習(xí)武等采用了Xilinx公司的Vivado HLS(高層次綜合)實(shí)現(xiàn)改進(jìn)的Sobel邊緣檢測(cè)[4],取得了較好的實(shí)時(shí)檢測(cè)效果,但需選擇不同的結(jié)構(gòu)元素對(duì)不同的目標(biāo)圖像進(jìn)行膨脹腐蝕,算法占用硬件資源較多。本文采用Vivado HLS實(shí)現(xiàn)Canny邊緣檢測(cè)硬件加速實(shí)現(xiàn)方法,研究通用性好、設(shè)計(jì)周期短、硬件資源消耗少的FPGA加速算法。

1 Canny算法基本原理

    Canny邊緣檢測(cè)[5]算法是CANNY J于1986年提出的,算法目標(biāo)是在圖像中找到最佳邊緣。其主要步驟為:

    (1)圖像高斯濾波:對(duì)原始圖像進(jìn)行高斯濾波,降低輸入圖像中的噪聲對(duì)后續(xù)圖像處理的干擾,有效提升算法抗噪能力。

    (2)梯度計(jì)算:選擇Sobel的水平與垂直方向3×3窗口模板算子與圖像陣列進(jìn)行計(jì)算,原始圖像為I(i,j),得到水平與垂直方向的偏導(dǎo)數(shù),水平、垂直方向梯度偏導(dǎo)數(shù)分別為Gx和Gy

     qrs1-gs1-4.gif

    (3)非極大值抑制:遍歷圖像,若像素點(diǎn)的幅值大于其梯度方向的幅值,則可能為邊緣點(diǎn);否則不是邊緣,對(duì)其進(jìn)行抑制。

    (4)雙閾值處理:通過設(shè)定閾值Th、Tl(一般情況下Tl=0.4Th),抑制后的圖像像素梯度值大于Th的是邊緣點(diǎn),小于Tl的一定不是邊緣點(diǎn),如果處于兩者之間,判斷當(dāng)前像素的鄰域像素中是否有邊緣點(diǎn),若有,則為邊緣點(diǎn),否則就不是邊緣。

2 Vivado HLS實(shí)現(xiàn)方式

    Vivado HLS是Xilinx公司推出的加速數(shù)字系統(tǒng)設(shè)計(jì)開發(fā)工具,直接使用C、C++或SystemC開發(fā)的高層描述來綜合數(shù)字硬件,替代用VHDL或Verilog實(shí)現(xiàn)FPGA硬件設(shè)計(jì)[6],實(shí)現(xiàn)設(shè)計(jì)的功能和硬件分離,不需要關(guān)心低層次具體細(xì)節(jié),具有很強(qiáng)的靈活性,有效降低數(shù)字系統(tǒng)設(shè)計(jì)開發(fā)周期。Vivado HLS在算法優(yōu)化指標(biāo)和FPGA硬件設(shè)計(jì)方式指標(biāo)是一致的:(1)面積,算法硬件資源使用的數(shù)量;(2)速度,硬件電路處理數(shù)據(jù)的速率。一般的設(shè)計(jì)是對(duì)兩者之間的特殊需求進(jìn)行優(yōu)化,得到合理的方案。

2.1 Vivado HLS設(shè)計(jì)流程

    Vivado HLS設(shè)計(jì)流程如圖1所示。C代碼設(shè)計(jì)和C測(cè)試集設(shè)計(jì)是HLS設(shè)計(jì)流程的輸入;C功能性驗(yàn)證能確保代碼功能的完整性;高層綜合能產(chǎn)生所需的各個(gè)設(shè)計(jì)文件;C/RTL協(xié)同仿真可以進(jìn)行預(yù)期值與輸出的對(duì)比;設(shè)計(jì)迭代是通過不斷地調(diào)整指令得到預(yù)期需要的優(yōu)化設(shè)計(jì),在不改變C代碼的情況下,由優(yōu)化指令轉(zhuǎn)化成小面積高吞吐率的RTL電路[7];最后RTL電路被綜合成FPGA邏輯模塊。 

qrs1-t1.gif

2.2 Vivado HLS圖像實(shí)時(shí)加速

    Vivado HLS圖像實(shí)時(shí)加速設(shè)計(jì)的方式如圖2所示。

qrs1-t2.gif

    視頻流進(jìn)入FPGA后,由AXI4-Stream協(xié)議將數(shù)據(jù)流轉(zhuǎn)換為HLS視頻庫下的hls::Mat格式,在進(jìn)行對(duì)應(yīng)的圖像FPGA加速處理后,將hls::Mat格式重新轉(zhuǎn)換為AXI4-Stream數(shù)據(jù)流。

    Vivado HLS提供了以下幾個(gè)方面功能對(duì)圖像視頻處理建模[8]:(1)內(nèi)存行緩存(Memory Line Buffer);(2)內(nèi)存窗口緩存(Memory Window Buffer);(3)視頻數(shù)據(jù)支持格式類型;(4)視頻函數(shù)庫。HLS內(nèi)存行緩存實(shí)質(zhì)是能存儲(chǔ)多行像素?cái)?shù)據(jù)的多維移位寄存器[9],而窗口緩存是行緩存的一個(gè)子集,這兩種存儲(chǔ)結(jié)構(gòu)一般被綜合為Block RAM,并且行緩存的寬度決定了圖像算法能進(jìn)行硬件加速的最大圖像寬度。Vivado HLS對(duì)一幀圖像像素的遍歷是通過創(chuàng)建上述兩種緩存實(shí)現(xiàn)的,圖3是遍歷圖像像素的計(jì)算內(nèi)核路徑。Vivado HLS下圖像處理基于視頻流訪問,因此,基于隨機(jī)存儲(chǔ)訪問的圖像處理方式需要進(jìn)行轉(zhuǎn)換,綜合為FPGA處理下的圖像數(shù)據(jù)流處理方式,實(shí)現(xiàn)圖像算法的硬件加速。

qrs1-t3.gif

3 Vivado HLS實(shí)現(xiàn)Canny邊緣檢測(cè)

    根據(jù)Vivado HLS設(shè)計(jì)流程,Canny邊緣檢測(cè)的硬件加速實(shí)現(xiàn)流程如圖4所示。

qrs1-t4.gif

3.1 圖像數(shù)據(jù)流輸入

    圖像數(shù)據(jù)通過AXI4-Stream輸入到Canny邊緣檢測(cè)IP,由AXIvideo2Mat將數(shù)據(jù)流轉(zhuǎn)換為hls::Mat類型,完成Canny邊緣檢測(cè)IP的硬件加速設(shè)計(jì)。

3.2 圖像計(jì)算內(nèi)核創(chuàng)建

    創(chuàng)建類型為hls::Window、大小為1×3和3×3的窗口緩存,以及類型為hls::LineBuffer、大小為3×1 920的行緩存。將圖像像素寫入第一行行緩存,每寫入一次新的圖像數(shù)據(jù),讀出對(duì)應(yīng)行緩存的數(shù)據(jù)到1×3的窗口緩存,同時(shí)3×3的窗口緩存右移,把1×3的窗口緩存數(shù)據(jù)寫入3×3的窗口緩存的第一列,每一行行緩存寫滿時(shí),當(dāng)前行緩存數(shù)據(jù)移位寫入下一行。通過上述方式,由3×3窗口緩存構(gòu)成的計(jì)算內(nèi)核完成圖像的遍歷。

3.3 圖像濾波

    考慮到濾波器窗口太大圖像邊緣會(huì)被過度平滑,選擇高斯濾波器為3×3的濾波窗口,σ值為1.5,由于模版系數(shù)歸一化后均為小數(shù),對(duì)于FPGA而言,需要增加硬件資源消耗實(shí)現(xiàn)浮點(diǎn)類型,因此,將模板系數(shù)全部乘以256后取整,對(duì)于實(shí)際處理而言,這種近似值產(chǎn)生的誤差不會(huì)對(duì)濾波效果產(chǎn)生很大影響,實(shí)際模板系數(shù)為:

     qrs1-t4-x1.gif

    將濾波模板GuassBlur與計(jì)算內(nèi)核進(jìn)行卷積,卷積后的結(jié)果右移8位(除以256),移位操作不會(huì)消耗FPGA的DSP資源,節(jié)約了FPGA資源,由上述的移位運(yùn)算后,完成圖像數(shù)據(jù)的高斯濾波。

3.4 梯度計(jì)算

    創(chuàng)建3×3濾波后的圖像計(jì)算內(nèi)核窗口,將計(jì)算內(nèi)核分別與Sobel的水平與垂直方向3×3窗口算子卷積,求得水平、垂直方向梯度偏導(dǎo)數(shù)Gx和Gy大小,由于硬件實(shí)現(xiàn)平方根需要的資源較多,故通過Gx和Gy的絕對(duì)值之和求梯度G的幅值。對(duì)于梯度的方向θ=arctan(Gy/Gx),硬件實(shí)現(xiàn)較為困難,需要消耗很多硬件資源,一般是比較像素領(lǐng)域窗口,對(duì)于3×3窗口而言,求其領(lǐng)域8個(gè)方向,由于對(duì)稱性,只需要求得4個(gè)方向,0°、45°、90°和135°,即把梯度Gy的值與Gxtan22.5°和Gxtan67.5°比較,同時(shí)判斷GyGx乘積的正負(fù)性,可求得梯度的方向θ值的大小。為節(jié)約硬件資源可以采取對(duì)Gy左移4位,Gxtan22.5°左移4位,取值約為6.625Gx,Gxtan67.5°左移4位,約為38.625Gx,即:

     qrs1-gs5-6.gif

    通過簡(jiǎn)單移位判斷大小和正負(fù)性,得到梯度方向θ的近似值。

3.5 非極大值抑制和雙閾值處理

    定義位寬為2位的寄存器,4個(gè)方向?qū)?yīng)寄存器值0,1,2,3,將該寄存器與存儲(chǔ)梯度值G寄存器組合輸出到新創(chuàng)建的圖像行緩存,并創(chuàng)建新的3×3計(jì)算內(nèi)核,通過計(jì)算內(nèi)核窗口判斷圖像數(shù)據(jù)的方向,進(jìn)行極大值抑制。計(jì)算內(nèi)核中心點(diǎn)與對(duì)應(yīng)梯度方向的像素點(diǎn)、高閾值Th、低閾值Tl進(jìn)行比較,若計(jì)算內(nèi)核中心點(diǎn)最大則為圖像強(qiáng)邊緣點(diǎn);若計(jì)算內(nèi)核中心點(diǎn)大于梯度方向,處于Tl和Th之間,為弱邊緣點(diǎn);其他情況均不是圖像的邊緣點(diǎn)。

    創(chuàng)建新的行緩存寫入上述圖像邊緣數(shù)據(jù),由新的3×3計(jì)算內(nèi)核做進(jìn)一步處理:若計(jì)算內(nèi)核中心點(diǎn)是強(qiáng)邊緣點(diǎn)輸出255;若計(jì)算內(nèi)核是弱邊緣點(diǎn),判斷其八鄰域是否存在強(qiáng)邊緣點(diǎn),不存在強(qiáng)邊緣點(diǎn)則輸出0,存在則輸出255,同時(shí)把中心點(diǎn)值改變?yōu)閺?qiáng)邊緣點(diǎn)值;其他情況直接輸出0。

3.6 圖像數(shù)據(jù)流輸出

    處理后的數(shù)據(jù)通過AXIvideo2Mat將hls::Mat格式重新轉(zhuǎn)為AXI4-Stream數(shù)據(jù)流,圖像數(shù)據(jù)通過上述的處理完成Canny邊緣檢測(cè)的硬件加速。

3.7 指令優(yōu)化迭代

    采用Vivado HLS提供的模塊優(yōu)化指令如inline、pipeline、dataflow以及對(duì)循環(huán)展開的unroll等,完成算法硬件加速的優(yōu)化,達(dá)到硬件資源消耗和算法處理速度之間的平衡。一般的優(yōu)化為串行方式和并行方式兩種,串行優(yōu)化方式使用硬件資源少,并行優(yōu)化方式處理速率高[4]。為獲得良好的硬件加速效果,選擇并行優(yōu)化方式,具體措施為:(1)對(duì)模塊內(nèi)部循環(huán)展開;(2)循環(huán)、模塊內(nèi)部流水化處理;(3)模塊之間流水化處理。為驗(yàn)證本方案的資源占用情況,選取文獻(xiàn)[4]進(jìn)行對(duì)比分析,在保證運(yùn)算速度基本相同的情況下,選取并行方案對(duì)硬件資源使用情況列于表1。從表1可以看出,本文邊緣檢測(cè)算法的硬件資源使用少。

qrs1-b1.gif

4 邊緣檢測(cè)效果與速度驗(yàn)證

    以Zedboard開發(fā)板為算法驗(yàn)證平臺(tái),開發(fā)板FPGA芯片型號(hào)為xc7z020484-1,圖像由開發(fā)板PS端輸入到FPGA算法IP中,通過HDMI將原始圖像和處理后圖像輸出到顯示屏。

    圖5(a)為512×512測(cè)試圖像;圖5(b)為PC進(jìn)行的Canny邊緣檢測(cè)圖像;圖5(c)為FPGA驗(yàn)證的圖像;PC的主頻為2.3 GHz,對(duì)應(yīng)的圖5(b)處理時(shí)間約為10 ms左右;FPGA的時(shí)鐘頻率為100 MHz,圖5(c)處理時(shí)間約為3 ms。

qrs1-t5.gif

    由圖5(c)和圖5(b)處理時(shí)間的對(duì)比可知,圖5(c)算法處理時(shí)間不到圖5(b)的1/3,說明加速效果明顯。從文獻(xiàn)[1]中可知,在相同系統(tǒng)時(shí)鐘下處理512×512的圖像,時(shí)間約為20 ms,遠(yuǎn)小于圖5(c)的處理速度。因此,Vivado HLS實(shí)現(xiàn)的Canny邊緣檢測(cè)算法能在較復(fù)雜的情況下檢測(cè)到圖像邊緣,且運(yùn)算速度快。

5 結(jié)論

    由Vivado HLS進(jìn)行FPGA圖像算法硬件加速設(shè)計(jì)方式,既避免了傳統(tǒng)FPGA圖像算法開發(fā)中過于關(guān)注底層細(xì)節(jié),又能有效地縮短開發(fā)周期。通過仿真與FPGA驗(yàn)證,采用Vivado HLS實(shí)現(xiàn)的Canny邊緣檢測(cè)算法能在較復(fù)雜的情況下檢測(cè)到圖像邊緣,運(yùn)算速度快,資源消耗少,可以應(yīng)用到實(shí)時(shí)視覺檢測(cè)中。

參考文獻(xiàn)

[1] 肖國堯,曲仕茹.基于FPGA視頻圖像的Canny算法加速器設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2012(9):91-94.

[2] 張素文,陳志星,蘇義鑫.Canny邊緣檢測(cè)算法的改進(jìn)及FPGA實(shí)現(xiàn)[J].紅外技術(shù),2010,32(2):93-96.

[3] 韋海萍,趙保軍,唐林波,等.Canny算法的改進(jìn)及其硬件的實(shí)現(xiàn)[J].光學(xué)技術(shù),2006(2):263-266.

[4] 彭習(xí)武,張濤.基于Vivado HLS的邊緣檢測(cè)硬件加速應(yīng)用[J].電子技術(shù)應(yīng)用,2017,43(5):70-73.

[5] CANNY J.A computational approach to edge detection[J].IEEE Transactions on Pattern Analysis and Machine Intelligence,1986(6):679-698.

[6] CROCKETT L H,ELLIOT R A,ENDERWITZ M A,et al.The Zynq book:embedded processing with the ARM Cortex-A9 on the Xilinx Zynq-7000 all programmable SoC[M].Strathclyde Academic Media,2016.

[7] Xilinx,Inc/Vivado design suite tutorial: high-level synthe-sis[Z].UG871,2015.

[8] Xilinx,Inc.Vivado design suite user guide: high-level synthesis[Z].UG902,2015.

[9] Xilinx,Inc.Implementing memory structures for video processing in the Vivado HLS tool[Z].XAPP793,2012.



作者信息:

譚檢成1,2,吳定祥2,3,李明鑫1,2,唐立軍1,2

(1.長沙理工大學(xué) 物理與電子科學(xué)學(xué)院,湖南 長沙410114;

2.近地空間電磁環(huán)境監(jiān)測(cè)與建模湖南省普通高校重點(diǎn)實(shí)驗(yàn)室,湖南 長沙 410114;

3.長沙億旭智能科技有限公司,湖南 長沙410004)

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。