文獻(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.
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í)長(zhǎng),,對(duì)平臺(tái)本身性能要求也很高,。FPGA憑借高速并行性的特性,在進(jìn)行圖像處理時(shí)能很好地保證系統(tǒng)的實(shí)時(shí)性,,因此越來(lái)越多開發(fā)人員使用FPGA進(jìn)行圖像處理[1-3],。但在現(xiàn)有的文獻(xiàn)中,有些受FPGA的歷史功能設(shè)計(jì)局限,,過(guò)多地關(guān)注FPGA底層設(shè)計(jì),,有些采用中值濾波、改進(jìn)高斯濾波模板進(jìn)行Canny邊緣檢測(cè),,設(shè)計(jì)周期較長(zhǎng),,硬件加速效果不明顯,。武漢科技大學(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:
(3)非極大值抑制:遍歷圖像,若像素點(diǎn)的幅值大于其梯度方向的幅值,,則可能為邊緣點(diǎn),;否則不是邊緣,對(duì)其進(jìn)行抑制,。
(4)雙閾值處理:通過(guò)設(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ā)的高層描述來(lái)綜合數(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ì)迭代是通過(guò)不斷地調(diào)整指令得到預(yù)期需要的優(yōu)化設(shè)計(jì),在不改變C代碼的情況下,,由優(yōu)化指令轉(zhuǎn)化成小面積高吞吐率的RTL電路[7],;最后RTL電路被綜合成FPGA邏輯模塊。
2.2 Vivado HLS圖像實(shí)時(shí)加速
Vivado HLS圖像實(shí)時(shí)加速設(shè)計(jì)的方式如圖2所示,。
視頻流進(jìn)入FPGA后,,由AXI4-Stream協(xié)議將數(shù)據(jù)流轉(zhuǎn)換為HLS視頻庫(kù)下的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ù)庫(kù)。HLS內(nèi)存行緩存實(shí)質(zhì)是能存儲(chǔ)多行像素?cái)?shù)據(jù)的多維移位寄存器[9],,而窗口緩存是行緩存的一個(gè)子集,,這兩種存儲(chǔ)結(jié)構(gòu)一般被綜合為Block RAM,并且行緩存的寬度決定了圖像算法能進(jìn)行硬件加速的最大圖像寬度,。Vivado HLS對(duì)一幀圖像像素的遍歷是通過(guò)創(chuàng)建上述兩種緩存實(shí)現(xiàn)的,,圖3是遍歷圖像像素的計(jì)算內(nèi)核路徑。Vivado HLS下圖像處理基于視頻流訪問(wèn),,因此,,基于隨機(jī)存儲(chǔ)訪問(wèn)的圖像處理方式需要進(jìn)行轉(zhuǎn)換,綜合為FPGA處理下的圖像數(shù)據(jù)流處理方式,,實(shí)現(xiàn)圖像算法的硬件加速,。
3 Vivado HLS實(shí)現(xiàn)Canny邊緣檢測(cè)
根據(jù)Vivado HLS設(shè)計(jì)流程,Canny邊緣檢測(cè)的硬件加速實(shí)現(xiàn)流程如圖4所示,。
3.1 圖像數(shù)據(jù)流輸入
圖像數(shù)據(jù)通過(guò)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ù)移位寫入下一行,。通過(guò)上述方式,由3×3窗口緩存構(gòu)成的計(jì)算內(nèi)核完成圖像的遍歷,。
3.3 圖像濾波
考慮到濾波器窗口太大圖像邊緣會(huì)被過(guò)度平滑,,選擇高斯濾波器為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ù)為:
將濾波模板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)平方根需要的資源較多,,故通過(guò)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,即:
通過(guò)簡(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)核,通過(guò)計(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ù)通過(guò)AXIvideo2Mat將hls::Mat格式重新轉(zhuǎn)為AXI4-Stream數(shù)據(jù)流,圖像數(shù)據(jù)通過(guò)上述的處理完成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è)算法的硬件資源使用少。
4 邊緣檢測(cè)效果與速度驗(yàn)證
以Zedboard開發(fā)板為算法驗(yàn)證平臺(tái),,開發(fā)板FPGA芯片型號(hào)為xc7z020484-1,,圖像由開發(fā)板PS端輸入到FPGA算法IP中,通過(guò)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,。
由圖5(c)和圖5(b)處理時(shí)間的對(duì)比可知,圖5(c)算法處理時(shí)間不到圖5(b)的1/3,說(shuō)明加速效果明顯,。從文獻(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ò)于關(guān)注底層細(xì)節(jié),,又能有效地縮短開發(fā)周期,。通過(guò)仿真與FPGA驗(yàn)證,采用Vivado HLS實(shí)現(xiàn)的Canny邊緣檢測(cè)算法能在較復(fù)雜的情況下檢測(cè)到圖像邊緣,,運(yùn)算速度快,,資源消耗少,,可以應(yīng)用到實(shí)時(shí)視覺檢測(cè)中,。
參考文獻(xiàn)
[1] 肖國(guó)堯,曲仕茹.基于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.長(zhǎng)沙理工大學(xué) 物理與電子科學(xué)學(xué)院,湖南 長(zhǎng)沙410114,;
2.近地空間電磁環(huán)境監(jiān)測(cè)與建模湖南省普通高校重點(diǎn)實(shí)驗(yàn)室,,湖南 長(zhǎng)沙 410114;
3.長(zhǎng)沙億旭智能科技有限公司,,湖南 長(zhǎng)沙410004)