基于FPGA的視頻實時邊緣檢測系統(tǒng)
摘要:對于視頻圖像檢測與識別的需要,提出了一種基于FPGA的視頻邊緣檢測系統(tǒng)設(shè)計方案,并完成系統(tǒng)的硬件設(shè)計。通過FPGA控制攝像頭進行視頻采集,雙端口SDRAM對圖像數(shù)據(jù)進行緩存,F(xiàn)PGA再對數(shù)據(jù)進行實時處理。實際采用DE2-115開發(fā)板和CMOS攝像頭OV7670為硬件平臺進行驗證。結(jié)果表明,該系統(tǒng)具有實時性高,檢測準確的特點,達到了設(shè)計要求。
隨著科技的發(fā)展,視頻采集系統(tǒng)越來越廣泛的應(yīng)用于各個領(lǐng)域,如體育直播,視頻會議,導(dǎo)彈的電視制導(dǎo)等等。而圖像邊緣是圖像的基本特征之一,其中包含了很重要的邊界信息,這些信息是圖像分析、目標識別的基礎(chǔ)。在交通信息控制應(yīng)用領(lǐng)域中,邊緣檢測已經(jīng)是車牌識別、車流量監(jiān)控、自動導(dǎo)航等技術(shù)中的重要環(huán)節(jié)。通過有效的邊緣檢測,可以大大簡化后續(xù)圖像處理過程對圖像信息的分析工作。對于視頻圖像的邊緣檢測,若采用軟件方式實現(xiàn)由于受到系統(tǒng)處理速度的限制,容易出現(xiàn)斷幀現(xiàn)象,這對于要求實時處理的情況下將是一個很大的缺陷。硬件實現(xiàn)主要有基于專用芯片,基于DSP和基于FPGA的3種處理方式?;趯S眯酒绞讲⒉贿m合前期產(chǎn)品的開發(fā)。基于DSP方式在運算速度、數(shù)據(jù)吞吐量等方面有限制。本設(shè)計基于FPGA實現(xiàn),邊緣檢測采用流水線結(jié)構(gòu)。實驗結(jié)果表明,該系統(tǒng)十分適合視頻數(shù)據(jù)的處理。
1 系統(tǒng)總體設(shè)計
本系統(tǒng)基于一片Altera公司的Cyclone IV系列的EP4CE115F29CN7主控FPGA,系統(tǒng)的整體結(jié)構(gòu)框圖如圖1所示。主要包括:攝像頭I2C配置模塊、視頻數(shù)據(jù)采集模塊、SDRAM控制模塊、Sobel邊緣檢測模塊和VGA控制模塊。FPGA首先通過I2C總線完成對OV7670的初始化,然后將采集到的數(shù)據(jù)通過視頻數(shù)據(jù)采集模塊轉(zhuǎn)換成RGB565標準的視頻數(shù)據(jù),圖像數(shù)據(jù)通過FIFO_IN模塊在SDRAM中進行緩沖,Sobel邊緣檢測模塊通過FIFO _OUT模塊讀取數(shù)據(jù)并進行處理,VGA控制模塊控制VGA接口的行同步和場同步信號完成VGA顯示。
2 視頻采集與邊緣檢測子模塊
2.1 I2C配置模塊
本系統(tǒng)采用OmniVision公司的OV7670這一款CMOS傳感器,為系統(tǒng)提供視頻信號。通過SCCB(Serial Camera Control Bus)總線對OV7670的共201個控制寄存器進行配置,來改變輸出數(shù)據(jù)的格式、視頻分辨率、傳輸方式,調(diào)整圖像的白平衡、飽和度、色度、伽瑪曲線等。兩線制的SCCB總線與I2C總線相同,都是雙向兩線制同步串行總線。I2C傳輸時序如圖2所示,I2C_SCLK就等同于SCCB中的SIOC、I2C_SDAT就等同于SC CB中的SIOD,模塊每次傳輸24位數(shù)據(jù),前8位為從設(shè)備地址(0x42代表寫寄存器,0x43代表度寄存器),中間8位是從設(shè)備寄存器地址,最后8位是對寄存器進行配置的數(shù)據(jù)。
2.2 視頻數(shù)據(jù)采集模塊
視頻數(shù)據(jù)采集模塊,主要是通過FPGA配合CMOS攝像頭OV7670的行、場同步信號采集圖像數(shù)據(jù)。首先通過配置控制寄存器,控制OV7670輸出視頻數(shù)據(jù)為RGB565格式。因為OV7670數(shù)據(jù)位寬為8,視頻數(shù)據(jù)采集模塊主要是將采集到的前后2個8位數(shù)據(jù)合并成一個16位數(shù)據(jù),以方便數(shù)據(jù)在SDRAM中的緩存以及后續(xù)模塊的處理。如圖3所示為數(shù)據(jù)采集ModelSim時序仿真圖。
2.3 SDRAM控制模塊
SDRAM模塊主要有FIFO和片外SDRAM兩部分組成,因為CMOS攝像頭OV7670采集的數(shù)據(jù)速率和SDRAM讀寫速率是不一樣的,為了匹配這兩個不同傳輸速率的模塊,其中必須添加一個FIFO存儲器。其中FIFO不需要單獨通過語言描述得到,只需要通過MegaWizard工具配置得到。本設(shè)計中用到的SDRAM為DE2-115開發(fā)板上的兩個64M字節(jié)SDRAM,其中每個SDRAM又包含4個BANK。SDRAM行地址線和列地址線是復(fù)用13位的地址總線,在讀寫時,先要激活某個BANK,接著鎖存行地址,最后在讀寫指令有效時鎖存列地址。SDRAM的最高讀寫速率可達到166 MHz,本系統(tǒng)中應(yīng)用為100 MHz,同時每個時鐘上升沿又可讀寫16 bit數(shù)據(jù),因此SDRAM完全可以實現(xiàn)數(shù)據(jù)的無縫緩沖工作。
2.4 Sobel邊緣檢測模塊
圖像邊緣是一幅圖像中灰度變化比較劇烈的區(qū)域,計算灰度圖像中各區(qū)域的梯度幅值可以用來判定圖像的邊緣信息。設(shè)圖像的亮度為f(x,y),則梯度可以定義如下:
Sobel邊緣檢測便是是基于梯度的檢測,其利用Sobel算子如圖4所示Gx與Gy,在3×3的圖像鄰域內(nèi)和亮度數(shù)據(jù)做卷積運算,表達式如下:
用硬件左邊緣檢測,由于是實時處理,SDRAM中緩存的數(shù)據(jù)只是連續(xù)視頻圖像中一幀圖像,而且視頻數(shù)據(jù)還不停的從攝像頭中傳過來,因此就不能像軟件處理那樣先建立一個二維的數(shù)據(jù)陣列,這樣就必須采用流水線方式進行運算,流水線數(shù)目和每次參加運算的像素數(shù)目相等,這里就總共需要9條流水線。為此我們就專門設(shè)計了3條Line_Buffer來完成式(4)與式(5)的運算,3條Line_Buffer由MegaWizard中配置的alts hift_tab完成,altshift_tab實際上就是一個移位寄存器,因為視頻分辨率為640×480像素,所以每條Line_Buffer實際是向后移位一整行,也就是640個像素值。這樣就等同于3條Line_Buffer中的數(shù)據(jù)視頻圖像中相毗鄰的三行圖像數(shù)據(jù),這3行數(shù)據(jù)再與Sobel算子做卷積。如圖5所示為卷積運算硬件結(jié)構(gòu)圖,其中P9—P1為像素數(shù)據(jù),X9--X1為Sobel梯度算子。乘法與并行加法部分分別有MegaWizard配置的altmult_add和parallel_add完成。
2.5 VGA顯示模塊
VGA顯示器的顯示采用逐行掃描,從屏幕左上方開始,從左到右,從上到下掃描。每一行的現(xiàn)實受到行同步信號(HREF)控制,每一幀的信號受到場同步信號(VSYNC)控制。本系統(tǒng)中CMOS攝像頭采集圖像分辨率為640×480像素,VGA(640×480)的工業(yè)標準為行掃描:Ta(同步脈沖)=96,Tb(行消隱后肩)=40,Tc=8,Td(有效時序)=640,Te=80,Tf(行消隱前肩)=8,Tg(行周期)=800;場掃描:Ta(同步脈沖)=2,Tb(場消隱后肩)=25,Tc=8,Td(有效時序)=480,Te=8,Tf(場消隱前肩)=2,Tg(場周期)=525。圖6為由SignalTapII抓取的VGA時序圖,其中最后一行數(shù)據(jù)為當前一幀視頻所顯示的行數(shù)統(tǒng)計。
3 實驗結(jié)果
由QuartusII軟件綜合仿真后可知,系統(tǒng)最高工作頻率為100MHz,片上資源使用情況如表1所示。通過DE2-115開發(fā)板為驗證平臺,對上述系統(tǒng)進行測驗,結(jié)果如圖7所示。其中,圖7(a)為對所采集到的視頻直接通過液晶顯示器顯示的彩色圖像,圖7(b)為對采集的視頻進行處理得到的灰度圖像,圖7(c)灰度圖像經(jīng)過Sobel邊緣檢測算法處理后的圖像。實際液晶顯示彩色圖像、灰度圖像、邊緣檢測圖像完整順暢,并沒有斷禎現(xiàn)象發(fā)生。
4 結(jié)論
設(shè)計了一個基于FPGA的的視頻實時邊緣檢測系統(tǒng),利用FPGA良好的并行結(jié)構(gòu),使計算速率得到了很大提升,達到了系統(tǒng)的實時性要求。實現(xiàn)了VGA分辨率視頻在液晶屏上的彩色顯示、灰度顯示、邊緣檢測圖像顯示,在圖像紋理復(fù)雜的情況下也能較好的提取圖像邊緣。實驗結(jié)果表明,該系統(tǒng)具有速度快、精度高等優(yōu)點,能夠很好的應(yīng)用在目標識別、目標跟蹤、智能視頻監(jiān)控等領(lǐng)域。