基于FPGA和OV5640的圖像采集和處理系統(tǒng)設(shè)計(jì)
引言
基于FPGA的圖像采集和處理系統(tǒng)具有功耗低、體積小、處理速度快的優(yōu)勢(shì),在圖像采集和數(shù)據(jù)處理方面有廣泛應(yīng)用。本次設(shè)計(jì)主要解決了視頻流數(shù)據(jù)實(shí)時(shí)顯示和圖像預(yù)處理問題,圖像采集和處理系統(tǒng)基于FPGA和OV5640攝像頭,通過OV5640攝像頭進(jìn)行圖像數(shù)據(jù)的采集,然后將其傳輸至FPGA內(nèi)部,FPGA首先控制視頻流數(shù)據(jù)存儲(chǔ)在SDRAM中,再將其傳輸至TFT顯示屏進(jìn)行實(shí)時(shí)視頻流顯示。與此同時(shí),內(nèi)部集成圖像處理模塊能實(shí)現(xiàn)視頻數(shù)據(jù)的中值濾波、高斯濾波、邊緣檢測(cè)等功能。該圖像采集和處理系統(tǒng)結(jié)構(gòu)如圖1所示。
1攝像頭
本次設(shè)計(jì)攝像頭選用OV5640,支持MIPI和DVP兩種接口。DVP接口是并行總線接口,MIPI接口是LVDS低壓差分接口?,F(xiàn)擬采用DVP接口驅(qū)動(dòng)該攝像頭。
OV5640所使用總線為SCCB,該總線類似于I2C總線,總線時(shí)序分為寫時(shí)序和讀時(shí)序。
寫時(shí)序:Start一deviceid一ac一一kaddr一ac一一kdata一ac一一Stwp:
讀時(shí)序:Start一deviceid一ac一一raddr一ac一一Start一ac一一rdata一nac一一Stwp。
其中,Start表示啟動(dòng)總線:deviceid是設(shè)備ID,最后一位表示讀寫操作碼,低表示寫,高表示讀:ac一是寫操作應(yīng)答信號(hào):kaddr表示寄存器地址:raddr表示寫對(duì)應(yīng)的寄存器數(shù)據(jù):kdata表示寫寄存器數(shù)據(jù):rdata表示讀對(duì)應(yīng)的寄存器數(shù)據(jù):Stwp表明關(guān)閉總線。
使用OV5640,需首先進(jìn)行上電初始化,然后對(duì)其關(guān)鍵寄存器進(jìn)行配置以實(shí)現(xiàn)寄存器初始化。經(jīng)過上述兩個(gè)步驟后,即可操作該攝像頭進(jìn)行圖像采集。擬選擇的視頻采集參數(shù)為480dpi,刷新率60fpS,圖像格式為RGB565。由此算出PCLK時(shí)鐘頻率至少為PCLK=800×480×(16bit/8bit)×60=46.08MHz,而從時(shí)序可知圖像顯示會(huì)有一定比例無效像素點(diǎn),故PCLK實(shí)際頻率大于46.08MHz。
在視頻流數(shù)據(jù)實(shí)時(shí)采集到FPGA再通過VGA接口實(shí)時(shí)顯示于鏈路中,二者數(shù)據(jù)速率存在偏差,故需要在其中添加圖像數(shù)據(jù)緩沖單元。圖像的每個(gè)像素點(diǎn)為16bit,計(jì)算可知一幀有效圖像的數(shù)據(jù)量大小6.144Mbit,片內(nèi)ram無法滿足要求,故選用外部存儲(chǔ)方式。外部存儲(chǔ)選擇SDRAM,并將SDRAM的存儲(chǔ)空間分為兩個(gè)子空間,每個(gè)子空間存儲(chǔ)一幀數(shù)據(jù),實(shí)時(shí)通過乒乓操作進(jìn)行切換,從而達(dá)到視頻流數(shù)據(jù)的無縫傳輸。
2SDRAM
SDRAM全稱為同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器。同步指其工作頻率與對(duì)應(yīng)控制器的系統(tǒng)時(shí)鐘頻率相同,且內(nèi)部命令的執(zhí)行與數(shù)據(jù)傳輸都是以該時(shí)鐘為基準(zhǔn)。本設(shè)計(jì)選用HY57V281620SDRAM,共有128Mbit存儲(chǔ)空間,4個(gè)Bank。
為控制SDRAM,首先需對(duì)其進(jìn)行上電初始化,然后便可對(duì)SDRAM進(jìn)行操作,即讀、寫以及刷新。根據(jù)數(shù)據(jù)手冊(cè)中讀寫刷新操作的說明,最終完成SDRAM的控制器設(shè)計(jì),能夠?qū)崿F(xiàn)FPGA外掛SDRAM的讀、寫、刷新操作。
3TFT顯示器
視頻顯示器選擇RGB接口TFT屏,RGB接口的TFT屏掃描方式和VGA標(biāo)準(zhǔn)類似,都為行列掃描。TFT屏掃描方式與VGA差異在于VGA顯示器接收模擬信號(hào),而TFT屏則省略了此過程,直接接收數(shù)字信號(hào)。故可以按照設(shè)計(jì)VGA顯示器的方法驅(qū)動(dòng)該顯示屏。
為驅(qū)動(dòng)VGA接口,需了解其時(shí)序,其分為行掃描、列掃描。掃描從屏幕的左上方開始,從左到右,從上到下進(jìn)行掃描,每掃完一行,電子束都回到屏幕的下一行左邊起始位置。在這期間,CRT對(duì)電子束進(jìn)行消隱。每行結(jié)束時(shí),用行同步信號(hào)進(jìn)行行同步:掃描完所有行,用場(chǎng)同步信號(hào)進(jìn)行場(chǎng)同步,并使掃描回到屏幕左上方。同時(shí)進(jìn)行場(chǎng)消隱,預(yù)備下一場(chǎng)(幀)的掃描。
不同VGA顯示屏之間除了時(shí)序參數(shù)不一樣外,其他并無差異,可按同一方式設(shè)計(jì)。在設(shè)計(jì)VGA驅(qū)動(dòng)代碼時(shí),可將時(shí)序指標(biāo)進(jìn)行參數(shù)化設(shè)計(jì),這樣在更換顯示屏?xí)r只需改動(dòng)參數(shù)便可完成驅(qū)動(dòng)。
3圖像處理模塊
圖像處理模塊用于實(shí)現(xiàn)視頻流數(shù)據(jù)的圖像預(yù)處理,包括中值濾波、SObe1邊緣檢測(cè)等。不同于ARM、DSP等通用CPU,FPGA進(jìn)行圖像處理能高速并發(fā),重復(fù)設(shè)計(jì),流水線控制。
中值濾波是一種基于排序統(tǒng)計(jì)理論的非線性平滑計(jì)數(shù),能有效平滑噪聲,且能有效保護(hù)圖像的邊緣信息,所以被廣泛應(yīng)用于數(shù)字圖像處理的邊緣提取,其基本原理是把數(shù)字圖像或數(shù)字序列中一點(diǎn)的值用該點(diǎn)鄰域內(nèi)所有點(diǎn)的中值來代替。
在FPGA中實(shí)現(xiàn)中值濾波,首先利用移位寄存器生成3×3像素矩陣,然后使用當(dāng)前待濾波像素領(lǐng)域的9個(gè)像素的中值代替該像素。求中值的方法是:(1)對(duì)3×3矩陣的每行按從大到小進(jìn)行排序。(2)利用排序法求出最大值那一列的最小值,求出數(shù)那一列的中間值,求出最小值那一列的最大值。(3)將求出的三個(gè)值再排序,這三個(gè)值的中間值就是這個(gè)3×3矩陣的中間值。
45SOb1邊緣檢測(cè)
SObe1算子主要用作邊緣檢測(cè),在技術(shù)上,它是離散型差分算子,用來計(jì)算圖像亮度函數(shù)灰度的近似值。SObe1邊緣檢測(cè)的核心在于像素矩陣的卷積,卷積運(yùn)算的本質(zhì)就是對(duì)制定的圖像區(qū)域的像素值進(jìn)行加權(quán)求和的過程。其計(jì)算過程為圖像區(qū)域中的每個(gè)像素值分別與卷積模板的每個(gè)元素對(duì)應(yīng)相乘,將卷積的結(jié)果做求和運(yùn)算。
與中值濾波一致,采用移位寄存器實(shí)現(xiàn)3×3像素矩陣。SObe1算子的實(shí)現(xiàn)劃分為3個(gè)步驟:(1)計(jì)算Gx、Gy:(2)求GEQ \* jc3 \* hps10 \o\al(\s\up 3(+GEQ \* jc3 \* hps10 \o\al(\s\up 3(:(3)求GEQ \* jc3 \* hps10 \o\al(\s\up 3(+GEQ \* jc3 \* hps10 \o\al(\s\up 3(的平方根。其中,Gx、Gy為原圖像3×3像素矩陣與橫向縱向高斯模板卷積后矩陣,求平方根時(shí)調(diào)用成熟穩(wěn)定可靠的CORD1C1P核實(shí)現(xiàn)。
原圖與經(jīng)過中值濾波和SObe1邊緣檢測(cè)的圖像分別如圖2、圖3、圖4所示。由圖2、圖3對(duì)比可知,中值濾波后清晰度較好,有效過濾了椒鹽噪聲。由圖3、圖4對(duì)比可以看出邊緣的部分顯示為黑,其余部分顯示為白,這樣可以清楚看到圖像邊緣。
6結(jié)語
本文對(duì)圖像采集系統(tǒng)的各個(gè)分模塊做了獨(dú)立設(shè)計(jì),并將其整和、協(xié)調(diào)控制,完成了實(shí)時(shí)視頻流數(shù)據(jù)的高速采集、高清顯示以及圖像預(yù)處理功能,并能夠?qū)?shí)時(shí)視頻流數(shù)據(jù)進(jìn)行中值濾波、SObe1邊緣檢測(cè)等處理。