宋緒勇+陳宇澤
摘 要:本設(shè)計(jì)主要針對(duì)燃?xì)獗?、水表等?jì)量表在生產(chǎn)廠家或計(jì)量檢測(cè)單位對(duì)其進(jìn)行質(zhì)量檢驗(yàn)時(shí)的流量脈沖數(shù)檢測(cè)環(huán)節(jié),即計(jì)量表內(nèi)通過(guò)的檢測(cè)介質(zhì)的整體積數(shù)采樣環(huán)節(jié)。以FPGA為硬件平臺(tái),采用硬件描述語(yǔ)言(Verilog)完成軟件設(shè)計(jì)。設(shè)計(jì)充分利用FPGA并行處理的優(yōu)勢(shì),搭配高速時(shí)鐘信號(hào),實(shí)現(xiàn)了數(shù)據(jù)流實(shí)時(shí)處理,克服了傳統(tǒng)圖像處理響應(yīng)慢的問(wèn)題。著重介紹了圖像二值化處理,模板采集與儲(chǔ)存及模板匹配環(huán)節(jié)的設(shè)計(jì)。
關(guān)鍵詞:FPGA;Verilog;圖像處理;匹配
中圖分類號(hào):TP391.41 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):2095-2945(2017)21-0043-02
1 總體流程
將裝置的攝像頭對(duì)準(zhǔn)計(jì)量表盤(pán)的某一位數(shù)字后,接通電源,裝置開(kāi)始工作如圖1所示,系統(tǒng)總體工作流程如下:前端的圖像傳感器采集到圖像信息,經(jīng)過(guò)模塊內(nèi)部的A/D轉(zhuǎn)換,傳輸?shù)紽PGA芯片內(nèi)部,經(jīng)過(guò)二值化,將圖像轉(zhuǎn)換為黑白圖片;通過(guò)點(diǎn)擊功能切換按鍵,將裝置切換到模板存儲(chǔ)狀態(tài),此時(shí)根據(jù)圖片的像素位置信息,選取指定大小的圖像數(shù)據(jù),按照順序存儲(chǔ)至SDRAM;點(diǎn)擊圖像實(shí)時(shí)對(duì)比按鍵,將裝置切換至圖像實(shí)時(shí)比對(duì)狀態(tài),此時(shí)圖像傳感器采集的圖像數(shù)據(jù)跟存儲(chǔ)的模板圖像數(shù)據(jù)進(jìn)行實(shí)時(shí)比對(duì),當(dāng)兩個(gè)圖像滿足相似度閾值要求的時(shí)候,輸出脈沖信號(hào),傳送至上位機(jī),表示計(jì)量表轉(zhuǎn)了一圈,上位機(jī)得到的脈沖數(shù)也就是燃?xì)獗淼恼w積采樣值。
2 圖像采集
攝像頭我們采用的是OV7670攝像頭,主要因?yàn)樗哂?40*480的分辨率,性價(jià)比高,體積小,工作電壓低,適合嵌入式應(yīng)用;具有標(biāo)準(zhǔn)的SCCB接口,兼容IIC接口,可以輸入整幀、子采樣、取窗口等方式的各種分辨率8位影像數(shù)據(jù);支持圖像縮放,具備手動(dòng)調(diào)焦功能。通過(guò)OV7670的行輸出時(shí)序和幀時(shí)序圖可以看到。在行同步信號(hào)HREF為高時(shí),每一個(gè)PCLK時(shí)鐘,輸出一個(gè)字節(jié)。值得注意的是,在RGB565格式中每?jī)蓚€(gè)字節(jié)組成一個(gè)像素(高字節(jié)在前,低字節(jié)在后),因此每?jī)蓚€(gè)時(shí)鐘信號(hào)輸出一個(gè)像素。當(dāng)VSYNC為高時(shí),產(chǎn)生一個(gè)幀同步信號(hào),因此每產(chǎn)生兩個(gè)幀同步信號(hào)完成一幀數(shù)據(jù)的傳輸。這部分的程序和攝像頭初始化的程序在市面上已經(jīng)很成熟,這里直接采用,不再贅述。
3 圖像二值化處理
為了便于進(jìn)一步的圖像數(shù)據(jù)處理,我們首先進(jìn)行圖像數(shù)據(jù)的二值化。這樣做的目的是減少數(shù)據(jù)量,凸顯目標(biāo)區(qū)域的輪廓。實(shí)現(xiàn)方法如下:已知圖像數(shù)據(jù)格式為RGB565,計(jì)量表盤(pán)數(shù)字為白色,底色為暗色。當(dāng)某一像素點(diǎn)為白色時(shí),其R值G值B值應(yīng)幾乎相等,即|R-G|≈0且|G-B|≈0且|R-B|≈0成立,程序?qū)崿F(xiàn)如下:
if((((sys_data_in[15:11]-sys_data_in[10:6])<3)||((sys_data_in[15:11]-sys_data_in[10:6])>28))&&(((sys_data_in[15:11]-sys_data_in[4:0])<3)||((sys_data_in[15:11]-sys_data_in[4:0])>28))&&((sys_data_in[15:11]+sys_data_in[10:5]+sys_data_in[4:0])>50))
begin data_add <=16'b1111111111111111; end
else begin data_add <=16'd0;End
公式中的3和28是根據(jù)大量實(shí)驗(yàn)得到的最為合理的閾值選擇。
4 模板采集與儲(chǔ)存
為保證圖像數(shù)據(jù)處理的快速性,設(shè)置了一個(gè)大小涵蓋數(shù)字輪廓的框,只需對(duì)框內(nèi)數(shù)據(jù)進(jìn)行采集和儲(chǔ)存即可。經(jīng)過(guò)大量測(cè)試,最終確定框的大小為200*280。在模板儲(chǔ)存方面,經(jīng)過(guò)二值化后,每一個(gè)16位圖像素點(diǎn)值均為0或1,只需取其中一位即可。因此設(shè)置了一個(gè)大小為65536的ram來(lái)儲(chǔ)存模板數(shù)據(jù)。這部分的signaltap程序仿真如圖2所示。從圖中可以看到在ram使能信號(hào)(ram_enable)為高時(shí),ram內(nèi)的數(shù)據(jù)(ram_data)隨著時(shí)鐘信號(hào)(ram_clk)存取了1位二值化后的圖像數(shù)據(jù)(data_add),同時(shí)ram地址(ram_waddr)疊加。仿真符合預(yù)期效果。
5 模板匹配
在SDRAM_CTRL內(nèi)主要完成SDRAM的初始化和圖像數(shù)據(jù)的寫(xiě)讀操作,初始化包括時(shí)鐘,使能,片選,行列地址等信號(hào)。由于攝像頭和顯示屏對(duì)數(shù)據(jù)速度要求不一樣,SDRAM在這里起到數(shù)據(jù)緩沖作用。從SDRAM中讀出的圖像數(shù)據(jù)經(jīng)過(guò)處理后與模板數(shù)據(jù)進(jìn)行匹配,當(dāng)滿足一定閾值時(shí),輸出脈沖信號(hào),表示當(dāng)前圖像與模板匹配。匹配算法設(shè)計(jì)如下:將檢測(cè)初始時(shí)刻定為相似度由符合條件變?yōu)椴环蠗l件的下降沿時(shí)刻,將數(shù)字表盤(pán)轉(zhuǎn)動(dòng)一圈后輸出信號(hào)的時(shí)刻也定為相似度由符合條件變?yōu)椴环蠗l件的下降沿時(shí)刻。中間的時(shí)間間隔就是表盤(pán)轉(zhuǎn)動(dòng)一圈再次達(dá)到初始位置所需的時(shí)間。同時(shí)發(fā)現(xiàn)將閾值設(shè)為88%時(shí)結(jié)果最為理想。這部分仿真如圖3所示。從圖中可以看出,當(dāng)相同像素?cái)?shù)量達(dá)到199*279*0.88=48858(199和279為框內(nèi)數(shù)據(jù)行列數(shù))時(shí),輸出信號(hào)(LED[0])變高,仿真符合預(yù)期效果。
6 結(jié)束語(yǔ)
相比于傳統(tǒng)在計(jì)算機(jī)上建立滾輪數(shù)字模板庫(kù)進(jìn)行數(shù)字識(shí)別的方法,這種模板匹配方法與數(shù)字無(wú)關(guān),只比較圖像是否高度相似,不用考慮數(shù)字識(shí)別是否準(zhǔn)確,圖像初始位置不論在何處都可任意選取,實(shí)現(xiàn)了模板多樣化,可以更多的應(yīng)用到圖像重復(fù)性檢測(cè)領(lǐng)域。就系統(tǒng)響應(yīng)速度而言,由于采用了數(shù)據(jù)流處理,所有數(shù)據(jù)均在FPGA內(nèi)部完成,系統(tǒng)響應(yīng)更快,抗干擾能力更強(qiáng)。
參考文獻(xiàn):
[1]夏宇聞.Verilog數(shù)字系統(tǒng)設(shè)計(jì)教程[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2003(6):51.
[2]柴震海.圖像并行處理技術(shù)[J].紅外,2005(3):27-33.
[3]王德勝,康令州.基于FPGA的實(shí)時(shí)圖像采集與預(yù)處理[J].電視技術(shù),2011,35(3):32-35.
[4]付昱強(qiáng).基于FPGA的圖像處理算法的研究與硬件設(shè)計(jì)[D].南昌大學(xué),2006.
[5]延明.FPGA在數(shù)字圖像處理中的應(yīng)用[J].電子技術(shù),2005,32(1):76-78.