基於FPGA的實時邊緣檢測系統設計,sobel流水線程序的fpga設計,FPGA實現Sobel圖像邊緣檢測,FPGA圖像處理,MATLAB圖像邊緣檢測

摘要:本文設計了一種基於 FPGA 的實時邊緣檢測系統,使用OV5640 攝像頭模塊獲取實時的視頻圖像數據,提取圖像邊緣信息並通過 VGA顯示。FPGA 內部使用流水線設計並行運算加速算法,利用乒乓操作和 SDRAM 緩存圖像,可以實時提取視頻圖像的邊緣特徵。文中對比了 MATLABFPGA 的處理效果,由於 FPGA 對算法採取了硬件加速,所以相較於 MATLAB 等計算機軟件實現方式有更快的處理速度。經驗證,系統工作穩定,滿足實時性要求

MATLAB 與 FPGA無線通信、圖像處理、數字信號處理系列
在這裏插入圖片描述

引言

圖像的邊緣包含一副圖像的大部分信息,是圖像分析和模式識別的主要特徵提取手段 。由於實時視頻圖像的邊緣檢測需要處理的數據量非常大,所以採用一般的軟件方法實現起來處理速度慢,無法滿足實時性的要求。
隨着可編程邏輯器件(FPGA)的高速發展,使用 FPGA 芯片搭建圖像處理硬件平臺成爲圖像處理的發展趨勢。FPGA在運算性能方面的具有較大優勢,使用FPGA並行加速圖像處理算法,既滿足了運算量和運行速度的要求,又具有較高的集成度。
所以,研究基於 FPGA 的圖像邊緣檢測解決方案具有重要的實際意義,在醫學影像處理、工業器件探傷、目標識別等邊緣檢測領域有着非常廣闊的應用。

1 系統方案與設計

本系統基於 Altera 公司 Cyclone IV 系列的 EP4CE6F17C8 型號的 FPGA ,系統整體框圖如圖1所示,主要包括 FPGA 並行運算平臺、攝像頭採集模塊、存儲模塊和顯示模塊,設計時採用自頂向下的設計模式,使用全局復位和跨時鐘域處理。
系統運行時, FPGA 並行運算平臺首先完成對攝像頭的初始化和寄存器配置,配置完成之後讀取實時的圖像數據存入 SDRAM 存儲器中,在 FPGA 芯片內部並行實現圖像處理算法,對從 SDRAM 中讀出的數據進行 Sobel 邊緣檢測並送入 VGA 顯示,通過獨立按鍵可以切換顯示模式和設定邊緣檢測閾值。
在這裏插入圖片描述

在這裏插入圖片描述

2 圖像預處理

由於 Sobel 算子是針對灰度圖像的邊緣檢測,所以先把彩色圖像轉爲灰度圖像。將 RGB565 轉化爲 RGB888,再將 RGB888 轉爲 YCbCr 格式,最後提取其中的 Y 分量即可得到灰度圖像。RGB888與 YCbCr 轉換公式如下:
在這裏插入圖片描述
由於 FPGA 無法直接運算浮點數,所以先擴大系數近似爲整數再運算。此處擴大256 倍後取整,將運算結果右移 8 位,提取 Y 分量即可得到灰度圖像,即
在這裏插入圖片描述
從 RGB888 圖像中得到 YCbCr 圖像的 Y 分量的並行運算示意圖如圖3所示。
在這裏插入圖片描述

3 邊緣檢測算法設計

如圖4所示爲待處理的3×3 像素點,使用 Sobel 算子處理中心像素點 P5,
在這裏插入圖片描述
使用 X、Y 方向的算子處理可得X、Y方向的梯度值 GX1、GY1 分別爲:
在這裏插入圖片描述
整體梯度值 G 爲:
在這裏插入圖片描述
在 FPGA 中,開平方運算非常消耗資源,可以使用絕對值近似開平方,即:
在這裏插入圖片描述
由於P1 ~ P9均爲灰度像素點,範圍在0 ~ 255,可用無符號數左移代替乘法,即:
在這裏插入圖片描述
由上式可知GX11、GX12、GY11、GY12 均爲正值,因此簡化絕對值:
在這裏插入圖片描述
由上可計算GX11、GX12、GY11、GY12,繼而求 G,當 G 大於設定的閾值時判定爲圖像的邊緣。

如圖5 所示爲Sobel 算子並行實現示意圖,使用3個 Shift_ram 實現移位操作,使用三級流水線計算邊緣檢測值 G。判斷 G 是否大於閾值,若大於閾值則輸出0(8位數據0X00)否則輸出 255(8位數據0XFF),即邊緣處爲黑色其餘位置爲白色。
在這裏插入圖片描述

4 邊緣檢測算法性能對比

(1)MATLAB與FPGA處理效果對比
使用 MATLAB讀取一張1024*768分辨率的灰度圖片如圖6所示,對比MATLAB 與 FPGA 處理效果的不同。MATLAB和 FPGA進行邊緣檢測後的均以 40 爲閾值進行二值化,對應的二值化圖像如圖7(a)和(b)所示,兩者均以 60 爲閾值得到圖8(a)和(b)。
**通過對比可以看出,使用 FPGA 進行Sobel邊緣檢測能夠實現與 MATLAB 相近的檢測效果,驗證了算法的可行性。**相對於 MATLAB,FPGA檢測在同樣的與之情況下檢測出更多的邊緣和噪聲,在閾值爲40時的圖片右上角和在建築物頂部球狀物、針狀物處比較明顯,分析其原因和 FPGA 在計算時候的數據舍入有關。總體評價來看,FPGA能夠實現較好的邊緣檢測效果。

(2)MATLAB與FPGA運行時間對比
在MATLAB使用本文所述的 Sobel 邊緣檢測算法,提取一張1024720分辨率的灰度圖像的邊緣,經過計時發現僅實現 Sobel 邊緣檢測需要597.451 ms(使用 MATLAB 2016a,CPU主頻1.8GHz),即每秒鐘僅能處理約 1.67 張圖片。
使用 FPGA運行本文所述的 Sobel邊緣檢測算法,使用50 MHz時鐘(週期20 us),在1024個時鐘週期後得到 LineBuffer 緩衝出的第一行數據,4個時鐘週期後開始輸出邊緣檢測後的數據,處理完一副1024
720分辨率的圖片需要的時間 T 爲
在這裏插入圖片描述
由以上對比可知,FPGA並行運算在算法加速上面有着非常好的性能,處理速度遠超 MATLAB 這種串行處理方式,使用FPGA方式每秒鐘大約可以處理67張圖片,滿足實時性的要求

總結

本文在 FPGA 平臺上中並行實現了實時圖像的 Sobel 邊緣檢測算法,從公式上進行化簡近似得到本系統所用的Sobel實現方式;通過對比MATLAB和FPGA的計算用時,可以看出FPGA的並行運算將速度提升了40倍以上,實現了算法的硬件加速,處理效果也能夠滿足系統的實時性要求。使用該算法處理攝像頭獲取的實時圖像,能夠達到良好的檢測效果。
當然,本系統仍然後很多的不足,比如在抗噪聲性能以及邊緣的連續性方面仍有很大的改進空間,後續可以在這方面繼續進行優化。
在這裏插入圖片描述

說明

轉載請先聯繫作者,並註明出處,未經允許請勿轉載;

博主:等風來123(DengFengLai123)
QQ:3053749041 阿修羅

MATLAB 與 FPGA無線通信、圖像處理、數字信號處理系列

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章