摘 要: 提出了一種圖像采集和快速移動(dòng)物體檢測(cè)的設(shè)計(jì),,即通過(guò)FPGA實(shí)現(xiàn)對(duì)攝像頭的初始化及數(shù)據(jù)采集,并通過(guò)自定義的傳輸協(xié)議將FPGA緩存中的數(shù)據(jù)傳輸給ARM7處理器,實(shí)現(xiàn)圖像數(shù)據(jù)的快速傳輸,。根據(jù)適用范圍,,本文提出了自適應(yīng)二值化閥值及相關(guān)的檢測(cè)算法改進(jìn)。這對(duì)于小型的,、低功耗實(shí)用型的監(jiān)控系統(tǒng)具有一定的實(shí)用價(jià)值,。
關(guān)鍵詞: 圖像采集; FGPA,; 移動(dòng)物體檢驗(yàn)
近年來(lái),,計(jì)算機(jī)技術(shù)、通信技術(shù),、微電子技術(shù)迅猛發(fā)展,,數(shù)字監(jiān)控系統(tǒng)逐步從傳統(tǒng)方式的監(jiān)控系統(tǒng)走向小型化、多樣化和智能化,。監(jiān)控系統(tǒng)的發(fā)展首先是從圖像采集開(kāi)始的,,本文根據(jù)項(xiàng)目需要提出了一種基于FPGA的圖像采集和移動(dòng)物體檢測(cè)的設(shè)計(jì)方案,用以實(shí)現(xiàn)對(duì)特定背景下的圖像采集和移動(dòng)物體快速檢測(cè),。
1 系統(tǒng)總體設(shè)計(jì)
本系統(tǒng)主要由攝像頭初始化模塊,、圖像采集模塊、數(shù)據(jù)傳輸模塊和運(yùn)動(dòng)物體檢測(cè)模塊構(gòu)成,。本系統(tǒng)中所使用的FPGA[1]芯片型號(hào)是FUSION系列的AFS600,。如果只是完成本文中所要實(shí)現(xiàn)的內(nèi)容,則完全可以選擇更低性能的FPGA芯片,,例如ProASIC3系列的A3P060,;如果所選擇的芯片沒(méi)有片內(nèi)RAM或者片內(nèi)RAM很小,需要對(duì)本文的設(shè)計(jì)做適當(dāng)?shù)恼{(diào)整才能完成相應(yīng)的功能,。
本系統(tǒng)中,由FPGA模擬SCCB對(duì)攝像頭(OV7670)進(jìn)行初始化,,控制端獲取圖像時(shí)再啟動(dòng)FPGA對(duì)一幅圖像進(jìn)行采集,,將采集到的數(shù)據(jù)放入一個(gè)雙端口的RAM存儲(chǔ)器中,并將數(shù)據(jù)傳輸給控制端,??刂贫碎g隔一段時(shí)間就通過(guò)FPGA采集一幅圖像,通過(guò)對(duì)這些連續(xù)的圖像進(jìn)行處理,,判定是否有移動(dòng)物體出現(xiàn),,如果有則可以啟動(dòng)報(bào)警系統(tǒng)。本系統(tǒng)中控制端是ARM7系列開(kāi)發(fā)板,,圖像采集的相關(guān)原理圖如圖1所示,。
2 FPGA圖像采集端
2.1 攝像頭的初始化
本系統(tǒng)實(shí)驗(yàn)所使用的攝像頭是OV7670,其感官陣列共656×488個(gè)像素。OV7670通過(guò)SCCB總線(xiàn)控制,,可以輸出整幀,、子采樣、取窗口等方式的各種分辨率為8 bit的影響數(shù)據(jù),。用于VGA圖像顯示最高可達(dá)30幀/s,。用戶(hù)可以完全控制圖像質(zhì)量、數(shù)據(jù)格式和傳輸方式,。攝像頭內(nèi)部包含伽瑪曲線(xiàn),、白平衡、飽和度,、色度等,,這些設(shè)置均通過(guò)SCCB總線(xiàn)接口完成。
SCCB是和I2C相同的一個(gè)協(xié)議,。SCCB由一根數(shù)據(jù)線(xiàn)(SIO_D)和一根時(shí)鐘線(xiàn)(SIO_C)構(gòu)成,,數(shù)據(jù)線(xiàn)是雙向傳輸?shù)模瑫r(shí)鐘線(xiàn)是由主機(jī)完全控制的,。本系統(tǒng)中主機(jī)是由FPGA芯片來(lái)?yè)?dān)任的,,對(duì)攝像頭初始化的過(guò)程只是由主機(jī)對(duì)攝像頭內(nèi)部的寄存器寫(xiě)入數(shù)據(jù),不需要完成從攝像頭接收數(shù)據(jù)的過(guò)程,,而且對(duì)攝像頭(OV7670)寄存器寫(xiě)入指令的格式很統(tǒng)一,。指令由3 B構(gòu)成,第1個(gè)字節(jié)為命令字節(jié),對(duì)于本文中的攝像頭其內(nèi)容是0x42,;第2個(gè)字節(jié)是一個(gè)8 bit寄存器地址;第3個(gè)字節(jié)為所要修改的寄存器內(nèi)容,。
根據(jù)以上分析,通過(guò)FPGA實(shí)現(xiàn)攝像頭初始化的過(guò)程簡(jiǎn)化了SCCB傳輸協(xié)議,,不再考慮接收數(shù)據(jù),;而且由于發(fā)送數(shù)據(jù)固定為24 bit,如果再加上起始、終止和確認(rèn)位,,總共需要傳輸?shù)臓顟B(tài)位為29 bit,,通過(guò)狀態(tài)機(jī)機(jī)制即可很輕松地編寫(xiě)FPGA代碼。本系統(tǒng)中將實(shí)驗(yàn)所產(chǎn)生的FPGA信號(hào)通過(guò)邏輯分析儀提取,結(jié)果如圖2所示,。
2.2 圖像采集
圖像采集要用到OV7670的3個(gè)同步信號(hào),,分別為VSYNC(場(chǎng)同步信號(hào))、HREF(行同步信號(hào))和PCLK(像素同步信號(hào)),,三者的時(shí)序關(guān)系如圖3所示,。VSYNC的上升沿表示一幀新圖像的到來(lái),下降沿則表示一幀圖像數(shù)據(jù)采集的開(kāi)始;HREF的上升沿表示一行圖像數(shù)據(jù)的開(kāi)始,,HREF為高電平即可開(kāi)始有效的數(shù)據(jù)采集,;PCLK下降沿表明數(shù)據(jù)的產(chǎn)生,PCLK每出現(xiàn)一個(gè)下降沿,OV7670 攝像頭便傳輸一個(gè)像素?cái)?shù)據(jù),。最后,,當(dāng)下一個(gè)VSYNC信號(hào)上升沿到來(lái),表明一幀圖像輸出結(jié)束,,同時(shí)表示下一幀圖像輸出開(kāi)始,。從圖3中可以看出,當(dāng)PCLK下降沿到來(lái)時(shí)攝像頭就會(huì)更新輸出下一個(gè)數(shù)據(jù),;要通過(guò)FPGA采集圖像數(shù)據(jù)就要選定一個(gè)穩(wěn)定的圖像數(shù)據(jù)采樣點(diǎn),,通過(guò)分析圖像可知,在PCLK為上升沿時(shí)最適合圖像數(shù)據(jù)的采樣,。
本系統(tǒng)中,FPGA采樣得到的數(shù)據(jù)暫存于一個(gè)雙端口的內(nèi)部RAM緩沖存儲(chǔ)器中,。當(dāng)收到采集圖像命令時(shí),系統(tǒng)首先復(fù)位雙端口RAM的寫(xiě)地址,每當(dāng)PCLK上升沿到來(lái)時(shí)FPGA將數(shù)據(jù)總線(xiàn)上的數(shù)據(jù)保存下來(lái),接著再將獲得的數(shù)據(jù)寫(xiě)入雙端口緩沖區(qū)中,,每寫(xiě)完一個(gè)數(shù)據(jù)便對(duì)寫(xiě)地址做加1的操作,。其主要流程如圖4所示,在用Verilog語(yǔ)言實(shí)現(xiàn)對(duì)圖像數(shù)據(jù)采集時(shí),檢測(cè)PCLK上升沿并將總線(xiàn)數(shù)據(jù)保存到寄存器是在一個(gè)周期內(nèi)完成的,,將寄存器中的數(shù)據(jù)存入雙端口RAM是在下一個(gè)周期完成的,,即如果輸入時(shí)鐘為48 MHz,則通過(guò)FPGA可以對(duì)24 MHz的像素頻率(PCLK)的輸出圖像進(jìn)行采集,。其采集頻率即使對(duì)640×480的圖像也能達(dá)到30幀/s以上的速度,。提高圖像采集的速度瓶頸關(guān)鍵在圖像從FPGA傳輸?shù)娇刂贫说倪^(guò)程中,因此提高數(shù)據(jù)的傳輸速度顯得非常重要。
2.3 數(shù)據(jù)傳輸
本系統(tǒng)通過(guò)一個(gè)雙端口RAM存儲(chǔ)器來(lái)做緩沖,,與使用外部SRAM相比,,其好處是實(shí)現(xiàn)簡(jiǎn)單、不需要外接SRAM芯片,,同時(shí)作為FPGA內(nèi)部RAM,,其處理速度很快可以達(dá)到350 MHz。但是RAM緩沖區(qū)的大小有限,,不能夠存儲(chǔ)一幅完整的圖像,,如果控制端讀取數(shù)據(jù)太慢,可能會(huì)使原有的緩沖數(shù)據(jù)被覆蓋,。從圖3中可以看出,在每一行數(shù)據(jù)傳輸結(jié)束后都有很長(zhǎng)一段行同步時(shí)間,,通過(guò)使用緩沖區(qū)可以有效利用這段時(shí)間來(lái)傳輸數(shù)據(jù),。
數(shù)據(jù)傳輸過(guò)程的實(shí)現(xiàn)流程如圖5所示,該數(shù)據(jù)傳輸過(guò)程中使用4根控制線(xiàn)和8根數(shù)據(jù)線(xiàn),。4根控制線(xiàn)分別是開(kāi)始(start),、結(jié)束(finish)、接收狀態(tài)(R_ready)和發(fā)送狀態(tài)(S_ready)。圖5(a)為FPGA發(fā)送端的控制流程,,圖5(b)為數(shù)據(jù)接收端的控制流程,。發(fā)送端中rdata為從RAM緩沖區(qū)中讀出的數(shù)據(jù),raddress為雙端口讀地址,,waddress為雙端口寫(xiě)地址,數(shù)據(jù)采集完畢為采集過(guò)程結(jié)束的標(biāo)志,。
3 處理器控制端
3.1 移動(dòng)物體檢測(cè)研究現(xiàn)狀
目前比較常用的運(yùn)動(dòng)物體檢測(cè)的方法主要有3種,分別是光流法,、背景差法和幀差法,。光流法的基本原理是給圖像中的每一個(gè)像素分配一個(gè)速度矢量,根據(jù)各個(gè)像素的速度矢量特征,,對(duì)圖像進(jìn)行動(dòng)態(tài)分析[2],,但光流計(jì)算方法相當(dāng)復(fù)雜,且抗噪性能差,;幀差法的基本原理是利用圖像序列相鄰兩幀之間的差異計(jì)算出變化的像素[3],;背景差法的主要思想是通過(guò)對(duì)序列圖像建立一個(gè)背景模型,估算出當(dāng)前的最優(yōu)背景圖像,,再通過(guò)對(duì)前景圖像與背景圖像的差分來(lái)判斷場(chǎng)景中的運(yùn)動(dòng)物體[4],。
3.2 移動(dòng)物體檢測(cè)
由于處理速度和資源都十分有限,本系統(tǒng)需要通過(guò)無(wú)線(xiàn)網(wǎng)絡(luò)來(lái)傳輸圖像,,在這樣的硬件條件下難以完成視頻采集,,如果使用幀差法前后兩幀之間的差異可能會(huì)很大;并且本系統(tǒng)主要起到監(jiān)控報(bào)警的功能,,通常所監(jiān)控的環(huán)境移動(dòng)物體很少,,所以選用背景差法進(jìn)行運(yùn)動(dòng)物體檢測(cè)。
3.2.1 移動(dòng)物體檢測(cè)流程
首先要獲取初始圖像,,系統(tǒng)上電后將第一次獲取的圖像作為初始背景,,初始背景并不一定準(zhǔn)確,但是隨著時(shí)間的推移,,在自適應(yīng)背景更新的過(guò)程中背景將會(huì)越來(lái)越趨近于真實(shí)的背景,;接下來(lái),將采集到的圖像與背景做差,,得到背景差圖像,,再對(duì)背景差圖像做中值濾波處理;之后,,對(duì)中值濾波后的背景差圖像做二值化,,從而提取出移動(dòng)物體即背景差圖中的白色部分,在對(duì)圖像二值化過(guò)程中,本系統(tǒng)根據(jù)實(shí)際應(yīng)用環(huán)境采用自適應(yīng)的二值化閾值,。
3.2.2 中值濾波
由于噪聲和運(yùn)動(dòng)的相關(guān)性,,會(huì)出現(xiàn)一部分殘留的噪聲和運(yùn)動(dòng)物體內(nèi)部空洞的現(xiàn)象,,需要利用形態(tài)學(xué)中開(kāi)和閉運(yùn)算進(jìn)行必要的后處理。在眾多預(yù)處理方法中,,中值濾波作為一種常用的圖像預(yù)處理方法,,能夠有效地去除噪聲、平滑圖像,,并能夠有效地保留圖像的邊緣信息,,所以本系統(tǒng)采用中值濾波來(lái)處理圖像。
本系統(tǒng)所采用的是快速中值濾波[5],??焖僦兄禐V波的處理過(guò)程為:首先獲得需要中值濾波處理的像素及其周?chē)袼兀Y(jié)果為一個(gè)3×3矩陣;然后分別計(jì)算每一行中3個(gè)數(shù)據(jù)的最大值max,、中值med和最小值min,;再在上面求得的3個(gè)最小值中求最大值max_of_min,最大值中求最小值min_of_max,,中值中求中值med_of_med,;最后在max_of_min、min_of_max和med_of_med中求中值middle,,middle即為所求,把3×3矩陣的中間值換成middle就完成了對(duì)Data5的中值濾波處理,。
3.2.3 自適應(yīng)閾值
由于閾值的大小對(duì)移動(dòng)物體的檢測(cè)主要表現(xiàn)在:當(dāng)閾值定得較大時(shí),會(huì)忽略背景差圖中的一些微小變化,;當(dāng)閾值定得太小,,又會(huì)導(dǎo)致出現(xiàn)太多的移動(dòng)物體,造成錯(cuò)誤的移動(dòng)物體檢測(cè),。因此,,可以根據(jù)經(jīng)驗(yàn)給移動(dòng)物體個(gè)數(shù)規(guī)定一個(gè)上限和一個(gè)下限。當(dāng)檢測(cè)到的移動(dòng)物體個(gè)數(shù)大于所規(guī)定的上限時(shí)就適當(dāng)?shù)脑龃箝撝?,?dāng)移動(dòng)物體個(gè)數(shù)小于所設(shè)置的下限時(shí)就適當(dāng)?shù)卦龃箝撝?。閾值的變化不是無(wú)限的,而是在所容忍的范圍之內(nèi)變化的,。本系統(tǒng)經(jīng)過(guò)上述一系列處理后得到的結(jié)果如圖6,、圖7所示:圖6為包含移動(dòng)物體及背景的圖像,圖7為經(jīng)過(guò)一系列處理后得到的對(duì)移動(dòng)物體二值化處理后的結(jié)果,,其中白色部分為移動(dòng)物體,。
3.2.4 背景自適應(yīng)更新
現(xiàn)實(shí)環(huán)境中,即使是固定不變的背景也會(huì)因?yàn)樘鞖夂凸庹諚l件的變化,、周?chē)h(huán)境的影響,、物體的經(jīng)過(guò)以及攝像機(jī)的輕微抖動(dòng)等因素而發(fā)生變化。因此在長(zhǎng)期運(yùn)行的運(yùn)動(dòng)檢測(cè)系統(tǒng)中背景的更新至關(guān)重要,。背景更新一般有統(tǒng)計(jì)平均法和加權(quán)平均法兩種方法,。統(tǒng)計(jì)平均即取幾幀圖像的平均值作為背景,其公式如下:
本系統(tǒng)采用的更新策略為加權(quán)平均,,F(xiàn)K表示采集的圖像中扣除被判定為移動(dòng)物的那部分圖像,,對(duì)于移動(dòng)物體部分,將會(huì)保留其原來(lái)的背景像素值。
本文重點(diǎn)介紹了圖像采集和移動(dòng)物體檢測(cè),,系統(tǒng)主要著眼于對(duì)一個(gè)簡(jiǎn)單實(shí)用型監(jiān)控系統(tǒng)的研究,,為此提出了一些有效的方法。隨著硬件技術(shù)的發(fā)展和芯片價(jià)格的下降,,系統(tǒng)在日后可以作更大的改進(jìn)和完善,。
參考文獻(xiàn)
[1] 王冠,俞一鳴.面向CPLD/FPGA的Verilog設(shè)計(jì)[M].北京: 機(jī)器工業(yè)出版社,,2007.
[2] MEYER D, DENZLER J, NIERMANN H. Model based extraction of articulated objects in image sequences for gait analysis[C]. SantaBara, California: Proc IEEE International Conference on Image Processing,, 1997:50-78.
[3] LIPTON A, FUJIYOSHI H, PATIL R. Moving target classification and tracking form real-time video[C]. Princeton: Proc IEEE Workshop on Application of Computer Vision,1998.
[4] STEPHEN J, SUMER J, ZORAN D. Tracking groups of people[J].Computer Vision and Image Understanding,2000,,80(1):42-56.
[5] 侯景忠.基于運(yùn)動(dòng)物體檢測(cè)的智能監(jiān)控系統(tǒng)[D].石家莊:河北工業(yè)大學(xué),,2008.
[6] 湯武當(dāng). 基于FPGA的運(yùn)動(dòng)物體檢測(cè)系統(tǒng)設(shè)計(jì)[D].長(zhǎng)沙: 湖南大學(xué),2010.