RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Vivado HLS實(shí)現(xiàn)Canny邊緣檢測(cè)硬件加速實(shí)現(xiàn)方法

SwM2_ChinaAET ? 來源:未知 ? 作者:李倩 ? 2018-10-04 10:41 ? 次閱讀

摘要:

針對(duì)Canny邊緣檢測(cè)算法在實(shí)時(shí)圖像處理過程中運(yùn)算耗時(shí)長(zhǎng)、數(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í)視頻圖像處理中。

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í)性,因此越來越多開發(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ì)周期較長(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)雙閾值處理:通過設(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邏輯模塊。

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

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

視頻流進(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)圖像算法的硬件加速。

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ù)通過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ù)為:

將濾波模板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,即:

通過簡(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è)算法的硬件資源使用少。

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。

由圖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è)中。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 圖像處理
    +關(guān)注

    關(guān)注

    27

    文章

    1289

    瀏覽量

    56722
  • 邊緣檢測(cè)
    +關(guān)注

    關(guān)注

    0

    文章

    92

    瀏覽量

    18204

原文標(biāo)題:【學(xué)術(shù)論文】基于Vivado HLS的Canny算法實(shí)時(shí)加速設(shè)計(jì)

文章出處:【微信號(hào):ChinaAET,微信公眾號(hào):電子技術(shù)應(yīng)用ChinaAET】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Canny雙閾值邊緣檢測(cè)和弱邊緣連接詳解

    在上一篇FPGA圖像處理--Canny邊緣檢測(cè)(一)里介紹了Canny邊緣檢測(cè)的NMS計(jì)算,這里
    的頭像 發(fā)表于 11-18 17:07 ?2593次閱讀

    基于Canny邊緣檢測(cè)算子的圖像檢索算法

    【摘要】:針對(duì)依賴傳統(tǒng)Canny算子的基于邊緣的圖像檢索系統(tǒng)所存在的不足,提出一種基于Canny邊緣檢測(cè)的圖像檢索算法。使用改進(jìn)的
    發(fā)表于 04-24 10:03

    用OpenCV和Vivado HLS加速基于Zynq SoC的嵌入式視覺應(yīng)用開發(fā)

    Zynq? All Programmable SoC為基礎(chǔ),并結(jié)合廣泛使用的計(jì)算機(jī)視覺庫OpenCV和高層次綜合(HLS)工具,以實(shí)現(xiàn)關(guān)鍵功能的硬件加速。這種強(qiáng)強(qiáng)組合能為設(shè)計(jì)和實(shí)現(xiàn)Sm
    發(fā)表于 04-21 15:49

    【Z-turn Board試用體驗(yàn)】+ 基于Z-turn的圖像邊緣檢測(cè)系統(tǒng)(三)

    Library視頻庫替換,實(shí)現(xiàn)讀取功能,將其送入到加速模塊中,進(jìn)行邊緣檢測(cè)算法處理。處理后結(jié)果利用HLS OpenCV Library庫函
    發(fā)表于 07-07 20:41

    關(guān)于canny算子邊緣檢測(cè)的問題

    本帖最后由 豆吖豆 于 2017-4-4 23:14 編輯 grd=edge(Egray,'canny',0.09,'both');大神門 問一下這個(gè)后面的0.09和both什么意思是指的是Egray圖像的上下大小還是,另外可以的話能大概說說這個(gè)canny
    發(fā)表于 04-04 22:27

    【KV260視覺入門套件試用體驗(yàn)】 硬件加速之—使用PL加速FFT運(yùn)算(Vivado

    Cable)調(diào)試FPGA邏輯 三、硬件加速之—使用PL加速FFT運(yùn)算(Vivado) 四、硬件加速之—使用PL加速矩陣乘法運(yùn)算(Vitis
    發(fā)表于 10-02 22:03

    【KV260視覺入門套件試用體驗(yàn)】硬件加速之—使用PL加速矩陣乘法運(yùn)算(Vitis HLS

    Virtual Cable)調(diào)試FPGA邏輯 三、硬件加速之—使用PL加速FFT運(yùn)算(Vivado) 四、硬件加速之—使用PL加速矩陣乘法
    發(fā)表于 10-13 20:11

    基于Canny 法的紅外小目標(biāo)邊緣檢測(cè)方法

    從紅外圖像的特點(diǎn)出發(fā),基于Canny算法進(jìn)行了目標(biāo)邊緣檢測(cè)。首先,對(duì)源圖像進(jìn)行小波分解和重構(gòu),對(duì)圖像進(jìn)行消噪,抑制噪聲對(duì)目標(biāo)提取的影響。然后對(duì)消噪后的圖像用Canny算法進(jìn)
    發(fā)表于 05-27 15:02 ?12次下載

    canny邊緣檢測(cè)

    《OpenCV3編程入門》書本配套源代碼canny邊緣檢測(cè)
    發(fā)表于 06-06 15:20 ?2次下載

    精確分類的視角無關(guān)人臉檢測(cè)方法硬件加速體系結(jié)構(gòu)

    精確分類的視角無關(guān)人臉檢測(cè)方法硬件加速體系結(jié)構(gòu),不錯(cuò)的論文,值得學(xué)習(xí)參考。
    發(fā)表于 09-18 15:22 ?33次下載

    硬件加速邊緣檢測(cè)優(yōu)化處理方案

    針對(duì)計(jì)算機(jī)處理高清圖像或視頻的邊緣檢測(cè)時(shí)存在延時(shí)長(zhǎng)和數(shù)據(jù)存儲(chǔ)帶寬受限的缺點(diǎn),提出了用Vivado HLS邊緣
    發(fā)表于 11-15 18:02 ?2154次閱讀
    <b class='flag-5'>硬件加速</b><b class='flag-5'>邊緣</b><b class='flag-5'>檢測(cè)</b>優(yōu)化處理方案

    使用iVeia視覺套件進(jìn)行Canny邊緣檢測(cè)HLS IP

    iVeia使用嵌入式世界2015中的iVeia視覺套件演示了Canny邊緣檢測(cè)HLS IP
    的頭像 發(fā)表于 11-30 06:41 ?2920次閱讀

    Canny圖像算法仿真驗(yàn)證原理與實(shí)現(xiàn)

    先讀為快,以結(jié)果為導(dǎo)向,本期介紹Canny圖像算法仿真驗(yàn)證,后續(xù)將介紹canny算法原理與實(shí)現(xiàn),歡迎持續(xù)關(guān)注,公眾號(hào)設(shè)置星標(biāo),不錯(cuò)過每一次推送~ 一、簡(jiǎn)要說明 1.1 算法流程 Canny
    的頭像 發(fā)表于 10-15 09:10 ?1893次閱讀

    UltraFast Vivado HLS方法指南

    電子發(fā)燒友網(wǎng)站提供《UltraFast Vivado HLS方法指南.pdf》資料免費(fèi)下載
    發(fā)表于 09-13 11:23 ?1次下載
    UltraFast <b class='flag-5'>Vivado</b> <b class='flag-5'>HLS</b><b class='flag-5'>方法</b>指南

    python中用Canny邊緣檢測(cè)和霍夫變實(shí)現(xiàn)車道線檢測(cè)方法

    Canny邊緣檢測(cè)+霍夫變換 顏色閾值+圖像掩模的方法雖然簡(jiǎn)單,但是只能應(yīng)對(duì)一些固定顏色車道線的場(chǎng)景。圖像像素受光照影響將是一個(gè)極其常見的問題。 c
    的頭像 發(fā)表于 11-17 16:55 ?990次閱讀
    python中用<b class='flag-5'>Canny</b><b class='flag-5'>邊緣</b><b class='flag-5'>檢測(cè)</b>和霍夫變<b class='flag-5'>實(shí)現(xiàn)</b>車道線<b class='flag-5'>檢測(cè)</b><b class='flag-5'>方法</b>
    RM新时代网站-首页