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

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

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

Vivado HLS在Zedboard中的Sobel濾波算法實現(xiàn)步驟教程

Hx ? 作者:工程師陳翠 ? 2018-07-14 06:05 ? 次閱讀

總體設(shè)計思路

Vivado HLS在Zedboard中的Sobel濾波算法實現(xiàn)步驟教程

sobel 算法理論基礎(chǔ)

索貝爾算子(Sobel operator)主要用作邊緣檢測,在技術(shù)上,它是一離散性差分算子,用來運算圖像亮度函數(shù)的灰度之近似值。在圖像的任何一點使用此算子,將會產(chǎn)生對應(yīng)的灰度矢量或是其法矢量。

Vivado HLS在Zedboard中的Sobel濾波算法實現(xiàn)步驟教程

該算子包含兩組3x3的矩陣,分別為橫向及縱向,將之與圖像作平面卷積,即可分別得出橫向及縱向的亮度差分近似值。如果以A代表原始圖像,Gx及Gy分別代表經(jīng)橫向及縱向邊緣檢測的圖像灰度值,其公式如下:

Gx = (-1)*f(x-1, y-1) + 0*f(x,y-1) + 1*f(x+1,y-1)

+(-2)*f(x-1,y) + 0*f(x,y)+2*f(x+1,y)

+(-1)*f(x-1,y+1) + 0*f(x,y+1) + 1*f(x+1,y+1)

= [f(x+1,y-1)+2*f(x+1,y)+f(x+1,y+1)]-[f(x-1,y-1)+2*f(x-1,y)+f(x-1,y+1)]

Gy =1* f(x-1, y-1) + 2*f(x,y-1)+ 1*f(x+1,y-1)

+0*f(x-1,y) 0*f(x,y) + 0*f(x+1,y)

+(-1)*f(x-1,y+1) + (-2)*f(x,y+1) + (-1)*f(x+1, y+1)

= [f(x-1,y-1) + 2f(x,y-1) + f(x+1,y-1)]-[f(x-1, y+1) + 2*f(x,y+1)+f(x+1,y+1)]

其中f(a,b),表示圖像(a,b)點的灰度值;

圖像的每一個像素的橫向及縱向灰度值通過以下公式結(jié)合,來計算該點灰度的大小:

通常,為了提高效率 使用不開平方的近似值:

如果梯度G大于某一閥值則認為該點(x,y)為邊緣點。

然后可用以下公式計算梯度方向:

Sobel算子根據(jù)像素點上下、左右鄰點灰度加權(quán)差,在邊緣處達到極值這一現(xiàn)象檢測邊緣。對噪聲具有平滑作用,提供較為精確的邊緣方向信息,邊緣定位精度不夠高。當(dāng)對精度要求不是很高時,是一種較為常用的邊緣檢測方法。

流程

HLS算法驗證與實現(xiàn)

算法驗證包括算法C/C++實現(xiàn),綜合編譯仿真,實現(xiàn)導(dǎo)出pcore用于-------》XLINX EDK

EDK硬件工程搭建

EDK中主要搭建zedboard硬件平臺,實現(xiàn)VDMA(用AXI-Stream),HDMI,DDR等等,生成system.bit,用于連同uboot、fsbl生成zedboard bootload (BOOT.BIN)。

參考:

zedboard啟動過程分析 :

zedboard 構(gòu)建嵌入式linux

LINUX 系統(tǒng)移植

準備一張》8G的SD卡,分區(qū)為FAT32+EXT4(其中EXT4為文件系統(tǒng)》4GB,F(xiàn)AT分區(qū)為內(nèi)核 設(shè)備樹 bootloader) 可以采用gparted分區(qū)工具完成,apt-get install gparted

系統(tǒng)移植包括內(nèi)核鏡像的編譯,bootloader的移植,設(shè)備樹的編譯,文件系統(tǒng)的移植

具體移植步驟參見:

內(nèi)核鏡像地址:git clone

uboot源碼 :git clone git://git.xiinx.com/u-boot-xarm.git點擊打開鏈接點擊打開鏈接點擊打開鏈接

設(shè)備樹在內(nèi)核中可以找到,將設(shè)備樹,內(nèi)核鏡像,BOOT.BIN拷貝到SD卡中FAT分區(qū)中

文件系統(tǒng): 直接拷貝到SD卡中EXT4分區(qū)中

LINUX VDMA驅(qū)動應(yīng)用程序編寫與實現(xiàn)

編寫驅(qū)動程序是為了我們能在PS中對VDMA進行管理和控制。前提是在底層中我們已經(jīng)做好了所有相關(guān)的硬件設(shè)計等等。

移植OPENCV庫:用于對比FPGA算法處理速度比較,有兩種方法移植OPENCV庫,

1:apt-get install libopencv-dev python-opencv(用于python中)

2:下載源碼編譯

源碼地址:

編譯步驟參考:基于opencv網(wǎng)絡(luò)攝像頭在ubuntu下的視頻獲取

結(jié)果展示

FPGA硬件實現(xiàn)Sobel效果 OPENCV軟件實現(xiàn)Sobel

Vivado HLS在Zedboard中的Sobel濾波算法實現(xiàn)步驟教程

處理時間顯示

結(jié)果分析

上圖處理時間中 640*480的視頻

1:opencv處理一幀的時間0.148554s 大約為7幀每秒

2:fpga硬件實現(xiàn)一幀總時間(算法時間+VDMA拷貝時間)

3:fpga硬件實現(xiàn)一幀的算法時間,不包含拷貝DMA時間

在cortex A9 700MHZ 速度中 ,F(xiàn)PGA實現(xiàn)的算法速度比OPENCV軟件實現(xiàn)速度快50-100倍,F(xiàn)PGA一秒鐘可以處理500幀圖像,OPENCV只能處理10張不到

但是缺點是,視頻拷貝花費了太多的時間。所以我個人認為FPGA處理圖像不在算法實現(xiàn)有多復(fù)雜與困難,因為FPGA的并行率理論上是無窮的,但是視頻流的輸入輸出的速度直接決定了處理速度。暫時沒想到好的方法解決。

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

    關(guān)注

    19

    文章

    815

    瀏覽量

    66709
  • Zedboard
    +關(guān)注

    關(guān)注

    45

    文章

    70

    瀏覽量

    49242
收藏 人收藏

    評論

    相關(guān)推薦

    探索Vivado HLS設(shè)計流,Vivado HLS高層次綜合設(shè)計

    文件來與所得結(jié)果進行對比驗證。 3.實驗步驟 3.1.Vivado HLS GUI界面創(chuàng)建項目 3.1.1.啟動
    的頭像 發(fā)表于 12-21 16:27 ?3646次閱讀

    新手求助,HLS實現(xiàn)opencv算法加速的IPvivado的使用

    我照著xapp1167文檔,用HLS實現(xiàn)fast_corners的opencv算法,并生成IP。然后想把這個算法塞到第三季的CH05_AXI_DMA_OV5640_HDMI上,這個de
    發(fā)表于 01-16 09:22

    怎么Vivado HLS中生成IP核?

    我的目標是實現(xiàn)一個給定的C算法是一個FPGA。所以,我最近得到了一個Zedboard,目標是實現(xiàn)算法是PL部分(理想情況下PS
    發(fā)表于 03-24 08:37

    【正點原子FPGA連載】第七章OV5640攝像頭Sobel邊緣檢測-領(lǐng)航者ZYNQ之HLS 開發(fā)指南

    邊緣檢測實驗,來學(xué)習(xí)如何使用Vivado HLS工具生成實現(xiàn)Sobel邊緣檢測算法的IP核,以及
    發(fā)表于 10-13 17:05

    Vivado HLS實現(xiàn)OpenCV圖像處理的設(shè)計流程與分析

    的RTL代碼。ISE或者Vivado開發(fā)環(huán)境做RTL的集成和SOC/FPGA實現(xiàn)。2.2.1 VivadoHLS視頻庫函數(shù)HLS視頻庫是
    發(fā)表于 07-08 08:30

    Vivado HLS設(shè)計流的相關(guān)資料分享

    多個HLS解決方案2.實驗內(nèi)容實驗中文件包含一個矩陣乘法器的實現(xiàn)實現(xiàn)兩個矩陣inA和inB相乘得出結(jié)果,并且提供了一個包含了計算結(jié)果的testbench文件來與所得結(jié)果進行對比驗證
    發(fā)表于 11-11 07:09

    嵌入式HLS 案例開發(fā)步驟分享——基于Zynq-7010/20工業(yè)開發(fā)板(4)

    ) xapp890-zynq-sobel-vivado-hls.pdf5.1 HLS 工程說明(1) 時鐘HLS 工程配置的時鐘為 100MHz。如需修改時鐘頻率, 請打開 HLS
    發(fā)表于 01-01 23:46

    嵌入式HLS 案例開發(fā)步驟分享——基于Zynq-7010/20工業(yè)開發(fā)板(4)

    ) xapp890-zynq-sobel-vivado-hls.pdf 5.1 HLS 工程說明(1) 時鐘HLS 工程配置的時鐘為 100MHz。如需修改時鐘頻率, 請打開 HLS
    發(fā)表于 08-24 14:54

    Hackaday讀者有話說:Vivado HLS使用經(jīng)驗分享

    ,Xilinx Vivado HLS是一個高級綜合工具,能夠?qū)語言轉(zhuǎn)換成硬件描述語言(HDL),也就是說我們可以用C語言來實現(xiàn)HDL模塊編程了。 圖1 Vivado
    發(fā)表于 02-08 20:01 ?690次閱讀
    Hackaday讀者有話說:<b class='flag-5'>Vivado</b> <b class='flag-5'>HLS</b>使用經(jīng)驗分享

    Vivado+Zedboard之入門實例精選

    繼續(xù)介紹vivado+zedboard入門實例。均為參照教程實際操作驗證成功的實例,在此拿出來與大家分享。由于教程步驟已經(jīng)非常清晰,本文只是簡單介紹實例以及試驗時的修正記錄,具體的教程及個人
    發(fā)表于 02-09 05:59 ?814次閱讀

    基于Vivado HLS平臺來評估壓縮算法

    接口(ORI)標準壓縮算法可以分析其對信號保真度,延遲以及實現(xiàn)成本。Vivado HLS是一個評估實現(xiàn)壓縮
    發(fā)表于 11-17 02:25 ?1509次閱讀
    基于<b class='flag-5'>Vivado</b> <b class='flag-5'>HLS</b>平臺來評估壓縮<b class='flag-5'>算法</b>

    Vivado-HLS實現(xiàn)低latency 除法器

    1 Vivado HLS簡介 2創(chuàng)建一個Vivado-HLS工程 2.1打開Vivado HLS GUI 2.2創(chuàng)建新工程
    發(fā)表于 12-04 10:07 ?0次下載
    用<b class='flag-5'>Vivado-HLS</b><b class='flag-5'>實現(xiàn)</b>低latency 除法器

    基于CORDIC的高速Sobel算法實現(xiàn)

    為提高圖像邊緣檢測的處理速度,提出一種基于CORDIC的高速Sobel算法實現(xiàn)
    的頭像 發(fā)表于 10-05 09:54 ?3582次閱讀
    基于CORDIC的高速<b class='flag-5'>Sobel</b><b class='flag-5'>算法</b><b class='flag-5'>實現(xiàn)</b>

    如何創(chuàng)建Vivado HLS項目

    了解如何使用GUI界面創(chuàng)建Vivado HLS項目,編譯和執(zhí)行C,C ++或SystemC算法,將C設(shè)計合成到RTL實現(xiàn),查看報告并了解輸出文件。
    的頭像 發(fā)表于 11-20 06:09 ?3973次閱讀

    關(guān)于Vivado HLS錯誤理解

    盡管 Vivado HLS支持C、C++和System C,但支持力度是不一樣的。v2017.4版本ug871 第56頁有如下描述??梢?,當(dāng)設(shè)計如果使用到任意精度的數(shù)據(jù)類型時,采用
    的頭像 發(fā)表于 07-29 11:07 ?5511次閱讀
    關(guān)于<b class='flag-5'>Vivado</b> <b class='flag-5'>HLS</b>錯誤理解