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