總體設(shè)計思路
sobel 算法理論基礎(chǔ)
索貝爾算子(Sobel operator)主要用作邊緣檢測,在技術(shù)上,它是一離散性差分算子,用來運算圖像亮度函數(shù)的灰度之近似值。在圖像的任何一點使用此算子,將會產(chǎn)生對應(yīng)的灰度矢量或是其法矢量。
該算子包含兩組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啟動過程分析 :
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
處理時間顯示
結(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的并行率理論上是無窮的,但是視頻流的輸入輸出的速度直接決定了處理速度。暫時沒想到好的方法解決。
-
Vivado
+關(guān)注
關(guān)注
19文章
815瀏覽量
66709 -
Zedboard
+關(guān)注
關(guān)注
45文章
70瀏覽量
49242
發(fā)布評論請先 登錄
相關(guān)推薦
評論