文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.2015.10.017
中文引用格式: 溫杰,李錦明. 基于FPGA的實時圖像邊沿檢測系統(tǒng)的實現[J].電子技術應用,2015,41(10):65-67.
英文引用格式: Wen Jie,Li Jinming. Realization of real time image edge detection system based on FPGA[J].Application of Electronic Technique,2015,41(10):65-67.
0 引言
邊緣檢測是圖像處理、圖像分析、模式識別、計算機視覺以及人類視覺的基本步驟之一,目的是為了發(fā)現圖像中關于形狀和反射或透射比的信息,目前已廣泛應用于目標識別、機器視覺和運動目標跟蹤等領域。在實時圖像處理中,由于系統(tǒng)對實時性要求較高,單純依靠軟件來實現圖像處理已無法滿足實際工程的需求,所以目前較多采用FPGA或DSP等硬件設備來實現圖像的實時處理。然而由于DSP只是對某些固定的運算提供硬件優(yōu)化,其體系仍是串行指令執(zhí)行系統(tǒng),這些都使它在運行速度、吞吐量方面頗受約束,且不利于系統(tǒng)的擴展。而FPGA具有強大的并行處理能力和豐富的邏輯資源,能夠實現硬件并行和流水線技術,在圖像處理方面具有明顯的優(yōu)勢,所以越來越受到人們的青睞。
本文采用FPGA作為控制處理器設計并實現了一種實時圖像邊沿檢測系統(tǒng)。該系統(tǒng)具有處理速率快,穩(wěn)定性強且易于擴展等優(yōu)勢,為更深層次的圖像處理提供了便利。
1 實時圖像邊沿檢測系統(tǒng)的總體方案
基于FPGA的實時圖像邊沿檢測系統(tǒng)主要由圖像數據采集模塊、數據灰度化模塊、SDRAM模塊、Sobel邊沿檢測模塊和VGA模塊五部分組成,具體實現框圖如圖1所示。圖像采集模塊實現初始化相機并接收圖像數據的功能;數據灰度化模塊能夠把采集到的圖像轉換為灰度圖像;SDRAM模塊控制對圖像數據的緩存;Sobel模塊實現像素梯度值的計算確定圖像邊沿并最終通過VGA模塊進行顯示。
2 實時邊沿檢測系統(tǒng)的實現
圖像采集模塊是系統(tǒng)的前端,包括相機配置模塊和數據捕捉模塊。系統(tǒng)上電后,系統(tǒng)配置模塊通過SCCB(IIC)總線實現對相機的配置。配置采用三相寫數據的方式實現:首先寫入CMOS傳感器的物理地址,然后寫入需要配置的寄存器地址,最后再寫入數據即可完成該寄存器的配置。根據以上方法,依次對相應的寄存器進行配置,CMOS傳感器就可以正常地采集圖像并通過相機接口傳回到FPGA的圖像捕獲模塊中。圖像捕獲模塊根據像素時鐘同步信號,確定哪些時段中數據有效,產生數據有效信號DVAL,并把圖像數據傳到下一模塊進行進一步處理。
2.1 圖像灰度化處理
由于相機采集到圖像為RGB模式的彩色圖像,而邊沿檢測系統(tǒng)是檢測圖像中灰度變化劇烈的像素點,所以有必要對圖像進行灰度化處理。圖像灰度化處理不僅能夠減少圖像處理的運算量,而且不會影響邊沿檢測的效果。常用的灰度化方式有加權平均法、平均值法和最大值法。系統(tǒng)采用加權平均法對圖像進行灰度化處理,該方法從人體生理學角度出發(fā),對RGB三分量進行加權平均,從而得到較為合理的灰度圖像。其數學表達式如式(1)所示:
Gary=0.299R+0.587G+0.114B(1)
在實際應用中,由于浮點型運算實現較為困難,所以需要進行整數轉換。系統(tǒng)采用7位精度的轉換公式對圖像進行灰度處理,其轉換精度與8位的轉換公式相同,但轉換速度更快。具體的實現公式如式(2)所示:
Gary=(38R+75G+15B)>>7(2)
圖像灰度化的實現過程采用QuartusII中的乘加器實現,頂層文件如下所示:
MAC_3 q0(.dataa_0(ired),
.dataa_1(igreen),
.dataa_2(iblue),
.datab_0(7’d38),
.datab_1(7’d75),
.datab_2(7’d15),
.result(wMono),
.clock0(iclk));
其中:dataa_0~2分別代表一個像素點的RGB分量,datab為以7為精度的加權系數,result右移7位即為輸出的像素灰度值。
2.2 圖像緩沖模塊設計
在圖像處理系統(tǒng),由于數據的輸入速度與系統(tǒng)的處理速度往往不匹配,需要一個大容量存儲器作為圖像數據的緩存。根據圖像數據的特點,設計者常常采用SRAM或SDRAM對圖像數據進行緩存。然而由于SRAM的容量與價格的限制,不利于系統(tǒng)的擴展,本系統(tǒng)采用SDRAM芯片MT48LC8M32作為系統(tǒng)的緩存模塊。該芯片單片容量為256 MB,配置為2 M×32×4bank,刷新計數為4 K。接口連接情況如圖2所示。
SDRAM控制器包括緩沖模塊和SDRAM控制模塊。緩沖模塊采用2個異步FIFO(Wr_FIFO和Rd_FIFO)作為圖像數據的輸入輸出緩存,實現了從低頻數據輸入到高頻數據寫入SDRAM,以及高頻數據讀取到低頻數據輸出的轉換。雖然SDRAM在同一時間段只能進行讀或寫操作,但系統(tǒng)采用的SDRAM控制模塊的工作時鐘為108 MHz,高于數據輸入輸出時鐘的2倍,所以從外部看,SDRAM能夠支持同時讀寫操作。FIFO控制模塊主要包括以下內容:(1)當有外部圖像數據輸入請求時,數據寫入Wr_FIFO中。(2)當有外部圖像數據輸出請求時,輸出Rd_FIFO中的數據。(3)當Wr_FIFO中數據個數大于256時,請求寫入SDRAM,響應后開始突發(fā)寫入數據。(4)當Rd_FIFO中數據個數小于256時,請求讀取SDRAM,響應后開始突發(fā)讀取SDRAM數據。
SDRAM控制模塊包含control_interface、command、sdr_data_path 三個功能子模塊。Command命令接口模塊與頂層進行信息交互,并對接收的信息進行譯碼,產生讀、寫、預充電等命令與訪問地址等信息;control_interface控制接口模塊根據command的命令與參數實現對SDRAM的控制;sdr_data_path數據位寬控制模塊根據外部DQM信號選擇數據讀寫的寬度。系統(tǒng)采用SignalTapII對SDRAM控制器進行了驗證。圖3為SignalTapII采集到的數據波形圖,結果符合預期要求。
2.3 Sobel邊沿檢測的實現
Sobel邊沿檢測算法是一種基于梯度的圖像邊沿檢測的方式,該算法容易在硬件上實現,且能夠平滑一定的噪聲,邊沿檢測效果較好。Sobel 算子的邊緣檢測是在圖像空間內利用 2 個方向模板與圖像進行鄰域卷積來完成的。這兩個方向模板,一個檢測水平邊緣,另一個檢測垂直邊緣。它們的方向梯度算子模板如下:
水平方向梯度模板 垂直方向梯度模板
以模板內的數字為權重系數,與圖像平面對應的像素值相乘可以求出水平梯度PX與垂直梯度PY。然后根據梯度計算公式, 求出梯度值|G|,并與預先設定的閾值進行比較從而確定圖像的邊沿。
根據以上分析,系統(tǒng)利用QUARTUS中的IP核模塊并結合硬件語言編程實現了Sobel邊沿檢測模塊的設計,具體實現過程如圖4所示,其中乘加器是計算像素梯度值的主要模塊。一個乘加器中包括3個乘法運算模塊和1個加法運算模塊,分布情況如圖5所示,其中dataa為輸入的行像素,datab為方向模板的權重系數。一個乘法器模塊可以實現一行像素與其對應的模板系數的卷積運算。邊沿檢測模塊需要6個乘加器來實現X方向和Y方向的梯度值運算。開方模塊結合X方向與Y方向的梯度,確定該點的像素梯度值。然后再將得到的梯度值與閾值進行比較,從而確定圖像的邊沿。
3 實驗結果與分析
為了驗證系統(tǒng)的正確性,采用SignalTapII對邊沿檢測結果進行了仿真,結果如圖6所示。其中邊沿檢測模塊選取的閾值為0X5B,sqrt0|q為Sobel邊沿檢測模塊得到的像素梯度值。如果梯度值大于閾值,則oDATA輸出0X00h,反之則輸出0XFFh。仿真結果與實際相同。系統(tǒng)采用VGA顯示器作為圖像顯示的終端,通過設計VGA控制器,邊沿檢測的結果以640*480@60Hz的格式進行顯示,得到如圖7所示結果。通過對比圖7中的兩幅圖可以看出,該系統(tǒng)的檢測效果較好,能夠有效地識別圖像的邊沿。
4 結論
本文基于FPGA設計了一種實時圖像邊沿檢測系統(tǒng),搭建了以FPGA和SDRAM為核心的硬件平臺,并通過硬件語言編程與調用可編程宏模塊在硬件上實現了實時圖像的邊沿檢測功能。結果表明,該系統(tǒng)檢測效果較好,能夠滿足系統(tǒng)對于實時性的需求,可以作為后續(xù)圖像處理,如運動目標跟蹤等研究的重要支撐。
參考文獻
[1] 朱秀昌,劉峰.數字圖像處理與圖像通信[M].北京:北京郵電大學出版社,2014.
[2] 王建莊.基于FPGA的高速圖像處理算法研究及系統(tǒng)實現[D].武漢:華中科技大學,2011:5-10.
[3] 齊榕,齊敏.數字圖像邊緣檢測的FPGA實現[J].電子設計工程,2013,21(19):178-179.
[4] 王德勝,康令州.基于FPGA的實時圖像采集與預處理[J].電視技術,2011,35(3):32-33.
[5] 楊新華,寇為剛.基于FPGA的Soble算子圖像邊緣檢測算法[J].儀表技術與傳感器,2013(1):102-104.