





摘要:邊緣檢測是圖像處理和計算機視覺中有關特征提取的一個重要研究領域。基于現場可編程邏輯門陣列(field programmable gate array,FPGA)完成了圖像邊緣檢測及視頻圖形陣列(video graphics array,VGA)顯示電路設計。該設計基于Quartus Ⅱ設計平臺,采用Verilog 語言編寫代碼,采用Modelsim 仿真軟件完成電路仿真,實現了串口圖像數據的索貝爾(Sobel)算法邊緣檢測功能,并且由VGA 顯示器輸出檢測結果。最后,在EP4CE10F17C8N 芯片上完成了功能驗證。
關鍵詞:FPGA;邊緣檢測;Sobel 算子
中圖分類號:TN79+1;TP391.4 文獻標識碼:A
0 引言
邊緣檢測是圖像處理和計算機視覺中,尤其是特征提取中的一個重要研究領域。圖像邊緣檢測可以大幅減少數據量,并且剔除不相關的信息,保留圖像重要的結構屬性。
本文基于現場可編程邏輯門陣列(fieldprogrammable gate array,FPGA)進行索貝爾(Sobel)圖像邊緣檢測并通過視頻圖形陣列(video graphicsarray,VGA)屏幕顯示,這極大地提高了檢測效率,為后續的圖像處理工作節約時間。
1 總體方案設計
系統架構設計如圖1 所示,UART_PRO 模塊接收串口攝像頭發來的8 bit RGB565 格式圖像數據,經過處理后變為16 bit。SDRAM_CTL 模塊完成同步動態隨機存取內存(synchronous dynamicrandom-access memory,SDRAM)的讀寫控制,對圖像數據進行緩存操作。Sobel_PRO 模塊完成邊緣檢測處理,最后由VGA_CTL 模塊完成VGA 的顯示控制,并且將邊緣檢測結果發送到VGA 顯示器上進行顯示。
2 電路設計
由于SDRAM 操作時鐘高于UART 接口時鐘,也高于VGA 顯示時鐘,所以數據在寫入或讀出SDRAM 時各需要一個緩沖先進先出(first in firstout,FIFO)進行速率匹配。模塊劃分框圖如圖2所示。
2.1 Sobel 算法基本原理
Sobel 算法邊緣檢測的核心在于像素矩陣的卷積運算,其本質是對指定的圖像區域的像素值進行加權求和[1]。卷積運算對于數字圖像處理較為重要,絕大部分的圖像處理算法都需要通過卷積運算來實現[2]。Sobel 算子水平方向和垂直方向的模板如圖3 所示,前者可以檢測圖像中水平方向的邊緣,后者則可以檢測圖像中垂直方向的邊緣。實際應用中,每個像素點取兩個模板卷積的最大值作為該像素點的輸出值,運算結果是一幅邊緣圖像。
通過將圖3a、圖3b 分別與原始圖像進行卷積即可得到圖像中每一點的橫向和縱向灰度值Gx 和Gy。最后,通過式(1)計算得到灰度值變化梯度G,為了提高效率使用不開平方的近似值|G|。
如果梯度G 大于某一閾值,則認為該點(x,y)為邊緣點。
使用Sobel 算子根據像素點上下、左右鄰點灰度的加權差在邊緣處達到極值這一現象來檢測邊緣[3-4]。Sobel 算子對噪聲具有平滑作用,能提供較為精確的邊緣方向信息。
2.2 Sobel_PRO 模塊
Sobel_PRO 模塊的作用是處理16 bit 圖像數據。當VGA 顯示有效區域時,會接收到來自SDRAM的16 bit RGB565 圖像數據,在Sobel_PRO 模塊中,先將Sobel 算子轉換成有符號數,再按照分辨率設置,生成3×3 的原始像素矩陣[5]。通過卷積運算,得到圖像橫向和縱向的灰度值,再通過運算得到該點灰度,將其與閾值進行比較,以判斷該點是否為邊緣點[6]。在確定邊緣點的數據后,向VGA 輸出邊緣檢測后的圖像數據。
2.3 UART_PRO 模塊
通用異步收發器(universal asynchronous receiver/transmitter,UART)的作用是在串行通信和并行通信之間對數據進行轉換。UART 的工作原理是將字符一個接一個地發送或者接收。本文采用一次發送或接收11 bit 的數據:先傳輸起始位,再傳輸8 個數據位,數據位是按照由低到高的順序進行傳輸的,然后傳輸校驗位,最后傳輸停止位[7]。UART傳輸時序圖如圖4 所示。
波特率是串口的重要參數,用于表示串口傳輸數據的速度。常用的波特率包括9 600 bit/s 和115 200 bit/s,本文主要介紹9 600 bit/s。9 600 bit/s代表每秒傳輸9 600 位,對應的傳輸一位所用的時鐘周期為9 600 Hz。
UART_PRO 模塊接收串口圖像數據,每接收一次8 bit 數據,產生一次標志信號,代表接收到一個8 bit 圖像數據。
2.4 SDRAM_CTL 模塊
SDRAM 是一個具有同步接口的動態隨機存取內存。SDRAM 有一個同步接口,在響應控制輸入前會等待一個時鐘信號,以實現與計算機的系統總線完成同步。時鐘信號用于驅動有限狀態機,對進入的指令進行管線操作,與沒有同步接口的異步動態隨機存取內存相比,SDRAM 具有更復雜的操作模式。
在對SDRAM 進行讀寫操作之前要進行初始配置。具體操作:在SDRAM 上電后需要先延時等待100 μs,其間只能向SDRAM 發出禁止命令或空操作命令;延時等待過后,對SDRAM 發出預充電命令;保證所有BANK 處于空閑狀態,再執行兩次自刷新命令,即可完成SDRAM 的初始化配置。
初始化配置完成后,SDRAM 會發送激活命令,為后續的寫操作打開特定的BANK 和行,然后給出寫命令,該操作會對一個已經激活的行進行突發寫入操作,從而完成完整的寫操作。
讀操作與寫操作類似,首先是給出激活命令,為保證讀取數據的準確性,需要指定已經被寫入數據的BANK 和行。給出讀指令后,需間隔一段時間(潛伏期),數據才會被讀出。
本文設計中,RGB565 作為原始數據包含兩個8 bit 數據,而UART_PRO 模塊每一次只能接收一個8 bit 數據,這就意味著一個完整的RGB565 數據需要兩次UART 傳輸。此外,SDRAM 的操作速率遠遠高于串口速率,所以在設計時還需要寫FIFO模塊進行緩存處理。同樣,因為VGA 的顯示處理速率遠低于SDRAM 的操作速率,數據從SDRAM讀出時也需要讀FIFO 模塊進行速率匹配。
2.5 VGA_CTL 模塊
VGA 是IBM 公司于1987 年提出的一個使用模擬信號的計算機顯示標準。VGA 接口即計算機采用VGA 標準輸出數據的專用接口。它傳輸紅、綠、藍模擬信號和同步信號(水平和垂直信號)。
VGA_CTL 模塊時序參數可根據需要修改,以滿足不同的刷新率要求。本次設計功能驗證時所使用的分辨率為640×480, 幀刷新速率為59.94 Hz。
VGA_CTL 模塊控制VGA 接口進行有效顯示區域顯示。在讀使能的控制下,SDRAM 中讀取的16 bit RGB565 格式圖像數據會發送給Sobel_PRO模塊進行處理。當Sobel 模塊處理后,由VGA_CTL 模塊向VGA 接口發送行同步信號和場同步信號。本文采用的VGA 接口為GM7123, 根據GM7123 接口的要求,需要額外輸出一路VGA 消隱控制信號和一路時鐘信號。當處于有效顯示區域時,消隱控制信號為高電平;當處于無效顯示區域時,消隱控制信號為低電平。
3 功能驗證
功能驗證采用了Cyclone Ⅳ系列開發板,芯片型號為EP4CE10F17C8N。在功能驗證測試中發現了一些問題,具體包括:① Sobel 處理的時鐘需要與VGA 模塊的時鐘保持一致,否則會出現圖像快速閃過的情況,導致無法看清檢測效果。② Sobel處理時的閾值選取也需要盡可能合理,閾值不同效果也會有較大的差異。如圖5 所示,閾值=3 的效果圖顯得較為模糊,會出現太多無用的線條,這些冗余信息會極大地影響邊緣檢測的效果,而閾值=9的效果圖則不清晰。出現這些現象的原因是高閾值往往會忽視細或者短的線條,低閾值會對圖像的各類線條都比較敏感,所以閾值過高或者過低都會對圖片的邊緣檢測效果產生不好的影響。
通過對相同圖片的不同閾值進行大量測試,發現當閾值=7 時,可以盡可能地保留圖片的邊緣特征,并且不會有過多的多余線條,閾值為7 的效果圖如圖6 所示。
綜上,當閾值=7 時,可以有效地去除偽邊緣,達到良好的邊緣檢測效果,所以7 為本文選取的最優閾值。
4 結論
本文實現了基于Sobel 算子的邊緣檢測,將圖像輸入FPGA 的邏輯電路中,通過在圖像的像素之間應用Sobel 濾波器,成功地檢測出圖像中的邊緣。然后,通過VGA 接口將結果輸出到顯示屏,實現了圖像邊緣的可視化。經過優化和調試,實現了較高的邊緣檢測準確性和實時性。最后通過Cyclone Ⅳ系列開發板的EP4CE10F17C8N 芯片驗證了功能的正確性。
本文研究成果能夠為基于FPGA 的圖像邊緣檢測和VGA 顯示電路的相關研究提供一定的參考。
參考文獻
[1] 魏香香. 基于FPGA 的視頻圖像邊緣檢測硬件加速器設計[D]. 合肥:合肥工業大學,2022.
[2] 周傳偉. 基于FPGA 的圖像邊緣檢測系統的研究與設計[D]. 成都:成都理工大學,2020.
[3] 雷浩東. 基于FPGA 的圖像采集和預處理系統設計[D]. 成都:電子科技大學,2019.
[4] 郭常青. 基于FPGA 的實時圖像預處理技術研究與實現[D]. 太原:中北大學,2022.
[5] 王強,冀苗苗,劉立培,等. 基于FPGA 與Sobel算法的實時圖像處理[J]. 電腦與電信,2020(5):24-28.
[6] 邢志華,尚建華. 基于FPGA 的改進Sobel 算法圖像邊緣檢測系統[J]. 軟件,2023,44(3):5-9.
[7] 羅春梅,肖順文,王涌. 基于FPGA 的UART 的設計實現[J]. 數字技術與應用,2019,37(3):150-151.