林培杰,鄭柏春,陳志聰,吳麗君,程樹英
(1.福州大學 物理與信息工程學院,福建 福州 350116;2.福州大學 微納器件與太陽能電池研究所,福建 福州 350116)
傳統的視頻監控系統,需要監控人員注意力高度集中于監控屏幕,其視力負擔很大。長時間工作后,監控人員的注意力也將大大降低,極有可能錯過重要信息而導致嚴重后果。因此,該方案的實際工作效率不高。在一些特定應用中需對運動目標進行自動檢測和報警,現有的許多運動目標檢測算法通常在PC平臺上實現,成本高,難以普及;隨著嵌入式處理的發展,基于DSP、FPGA或者兩者結合進行視頻處理的運用越來越廣泛,實時性也得到了很大的提高。為了充分利用FPGA的并行處理、良好的時序控制及可重構等特性,本文選擇了FPGA作為系統的實現平臺[1-3]。
目前,運動檢測的研究重點集中在目標提取的正確率和背景模型的健壯性上,忽視了檢測系統的應用場景。在某些復雜的應用環境(如生產車間),感興趣的目標有時分布在攝像頭視野的不同區域,需要對多個區域分別進行檢測,并且能對目標區域進行實時調整,而傳統的監控系統不具備這些功能。Object Video公司2012年提出了能夠在GIS中劃定區域并映射到監控畫面的特定區域目標檢測與識別系統,這一系統基于云計算實現,需要較大的投入。西安電子科技大學2007年提出了基于FPGA的運動目標檢測系統[4],該系統只支持一個檢測區域的劃定,且區域坐標需要通過串口輸入,使用并不方便。
本文以FPGA為平臺,對傳統的運動目標檢測算法進行改進,提出了背景動態更新的檢測算法,在FPGA上實現了該算法。系統具有較好的實時性,并且實現了分區域檢測功能,基于視頻輸入為640×480的分辨率,針對一般的場景應用,初始設置了4個檢測區域。檢測區域的個數、大小、位置可通過簡單的按鍵操作設定。具有較高的實用價值。
目前,在運動檢測方面常用的算法有光流法、幀間差分法和背景差分法[5-7]。光流法的特點是計算復雜性高,資源消耗量大,適合移動攝像頭的運動檢測;幀間差分法幀間差分法運算簡單,資源消耗少,易于實現實時檢測。但是幀間差分法存在“輪廓”、“快動”、“緩動”等問題,容易造成誤報;背景差分法在復雜場景下會造成判別錯誤,使檢測系統無法正常工作[8-9]。
針對背景差分法存在的缺陷,并結合幀間差分法的優勢,本文提出背景動態更新的算法。基本原理是同時采用幀差法和背景差法,幀差法的檢測結果作為背景更新的依據。當系統的幀間差分計算模塊連續N幀時間未檢測到運動目標時,認為當前畫面中沒有物體在運動,并用當前畫面作為背景替代原先存儲在背景緩存中的背景,實現背景的動態更新。N的值可以根據具體應用場合運動目標的出現頻率而設定。算法流程如圖1所示。

圖1 背景動態更新算法流程圖Fig.1 Flow chart of dynamic background update algorithm
本算法由于具有背景動態更新功能,能自適應光線的變化。同時,對于運動到畫面中然后靜止的物體,正確的反應應該是發出一次報警后將該物體視為背景。傳統的背景差分算法會持續報警,而本算法會在連續報警N幀后將該物體視為背景。另外,算法運算復雜度低,可以在小規模的FPGA芯片上實現。
算法效果圖如圖2所示,第1幅圖代表在視頻區域中劃定了一個檢測區域;第2幅、第3幅圖表示在該區域中背景發生變化時,區域邊框進行閃爍表示;第4幅圖表示,經過一定時間之后,根據算法,該區域背景已經更新,因此對應的邊框不再閃爍,說明算法工作效果良好。

圖2 背景動態更新算法效果圖Fig.2 Result picture by dynamic background update algorithm
本系統基于Spartan-3ADSP S3D1800A 的FPGA開發板實現,攝像頭采用OV7670CMOS攝像頭。系統結構如圖3所示。從攝像頭讀取的視頻信號經過位拼接后形成完整的YUV像素數據,通過多端口存儲器控制器(Multi-Port Memory Controller,簡稱 MPMC)存入DDR2內存芯片中,并按VGA的時序要求從DDR2中讀出數據。從DDR2中讀出的數據經過色彩空間轉換和濾波后,和窗口閃爍圖像疊加,最后進入VGA信號生成模塊,輸出視頻信號。

圖3 系統結構圖Fig.3 System structure diagram
同時,運動檢測模塊讀取視頻灰度信息,進行目標檢測,同時判斷按鍵設置好的窗口坐標,并根據檢測結果控制窗口的閃爍。而窗口控制模塊則依據按鍵的設置決定窗口的位置,大小及個數。
圖像采集采用OV7670攝像頭模塊,用類似IIC的串行攝像頭控制總線(Serial Camera Control Bus,SCCB)對其進行初始化。將攝像頭配置成30幀/s逐行顯示,640×480像素的YUV422輸出,每個像素由16位數據組成,高8位為Y信號,低8位為U/V信號。在YUV422格式的視頻信號中,Y信號每個時鐘都會采樣,而U和V信號則是間隔采樣。由于該攝像頭模塊的數據引腳只有8位,因此需要用二倍頻的像素時鐘對8位的引腳進行時分復用輸出,FPGA接受到像素信號后,將兩個8位的數據拼接成一個16位的完整的像素信號。圖4為攝像頭配置時序圖,從圖中的配置有效信號Config_Done變為高電平可以看出攝像頭配置成功。圖5為攝像頭數據輸出時序圖,從圖中可以看出在數據有效信號den有效之后,YUV數據正常輸出。數據輸出后采用采用MPMC IP核發送至外部DDR進行數據的緩存。

圖4 OV7670攝像頭配置時序圖Fig.4 Configuration timing diagram of OV7670camera

圖5 攝像頭數據輸出時序圖Fig.5 Data output timing of camera
本系統采用的運動目標檢測算法是對圖像的灰度進行檢測。為了得到圖像的灰度,也就是YUV信號的Y分量,需要將攝像頭配置成YUV422輸出的模式。而VGA顯示只能采用RGB888信號。因此需要對像素數據進行色彩空間的轉換。常用的色彩空間轉換公式為[10]:

式(1)中的參數根據不同標準有所差異,由于VGA邏輯要在27.125MHz的時鐘頻率下運行,為了符合時鐘要求,減小延時,實現實時檢測,需要設計高效的矩陣運算電路。本系統的色彩空間轉換模塊采用5級流水結構,具體電路如圖6所示。在這種結構下,兩個寄存器之間最長的路徑延時為一個乘法器的延時,在電路結構上最大地提高了運算速度,每一個時鐘周期完成一次矩陣運算。

圖6 5級流水結構矩陣運算器Fig.6 5levels pipeline structure matrix operator
經過空間轉換后,數據信號進行圖像濾波,去除部分像素噪聲。系統采用快速中值濾波器進行實現,該算法需要兩個模塊矩陣濾波窗口和排序模塊。
3.3.1 矩陣濾波窗口實現
要獲得一個像素區域的所有值需要設計一個3×3的像素緩存單元。根據圖像數據的串行傳輸的特點,數據是一行接著一行的,而一個像素周圍的像素的灰度值不都是在同一行上,因此需要將該像素所在行以及鄰近的兩行的像素灰度值保存起來。傳統的做法是通過三個FIFO來對數據進行緩存,但是FIFO在控制時序上比較復雜,同時在FPGA內部的移位寄存器具有抽頭輸出的功能,正好適合本文的設計要求,因此本文采用移位寄存器來設計。
串行數據通過移位寄存器后,可利用多個抽頭轉化成并行數據。本文中,由于視頻的分辨率是640×480,所以需要將圖像2行的1 280個8 bit灰度值數據存入寄存器。寄存器內部的數據經通過兩個抽頭taps0x、taps1x分割成兩行數據,這兩行數據與寄存器輸入數據共同組成并行數據輸出。但是此時的數據并不是同步的,需要對輸入的數據通過像素的使能進行同步。數據輸出后暫時存儲起來,這樣經過3次讀取后,可以得到3組并行數據,這3組并行數據即為3×3的濾波窗口。該部分的基本原理如圖7所示。

圖7 3×3濾波窗口生成過程Fig.7 3×3filter window generation process
3.3.2 排序模塊的實現
得到3×3濾波窗口后,需要將窗口內部的9個數據進行大小的比較,由于需要進行7次的排序操作,所以本文采用模塊復用的思想,犧牲速度來節約面積資源。復用模塊的設計思想是,使用冒泡排序算法對3個灰度值進行排序。其算法過程是對所有的數據元素進行遍歷,一次進行2個數據的比較,如果大小順序不符合升序(降序)的要求則將兩個數據位置調換,直至無需再對調位置為止。排序得到的數據與時鐘進行同步處理后,即可得到基本的排序模塊。根據快速中值濾波器的原理,先后進行3次的行排序,再進行3次的列排序,最后右對角線進行最后排序,所得的數據即為3×3濾波窗口的中值。
經測試,前端輸出的視頻圖像上存在一些偏綠色的噪點,如圖8(a)圖像,這些噪點會影響后期對邊沿檢測的處理。通過中值濾波器可以抑制噪點的存在,處理后的效果圖如圖8(b)圖像。
運動檢測模塊是本系統的核心,它采用的是前面所介紹的背景動態更新的算法。模塊結構如圖9所示。

圖8 快速中值濾波器處理效果圖Fig.8 Result picture by fast median filter
在進行運動檢測時,將640×480的圖像分成32×32塊,每塊的大小為20×15個像素。這樣做有兩個好處:(1)提取塊的均值,能抑制像素噪聲對檢測結果的影響。(2)大大減小了需要存貯的數據量,使得FPGA上的Block RAM能滿足存儲空間的需求。但是這種方法以檢測精度的降低為代價。

圖9 運動目標檢測模塊結構圖Fig.9 Structure diagram of moving object detection module
模塊中有兩個RAM,用片上Block RAM實現,分別存儲上一幀和背景圖像的塊均值。每個塊均值都是一個8bit的無符號數,一幀圖像共1 024個塊。因此這兩個RAM的位寬為8bit,尋址空間為1K。
每計算出當前幀一個塊的均值,就將其和上一幀對應塊的均值進行比較。當連續2 048幀(約68s)未檢測到運動目標,就將背景RAM的寫使能(wren)信號拉高一幀,進行背景的更新。同時,當前幀塊均值和背景塊均值進行比較,對檢測到的運動目標進行區域判定,將判定結果提供給后端圖像顯示電路。
本系統最多支持對4個區域進行分別檢測和報警。用兩個寄存器分別對像素的行和列計數,這樣相當于計算出當前像素在圖像上的“坐標”。而每個窗口的位置信息(上,下,左,右四條邊)分別存儲在4個寄存器中。在進行背景差分法運算的同時,將像素的“坐標”和窗口的位置進行對比,得到當前求幀差的像素在哪個窗口內。如果檢測到的運動像素位于窗口x內,則將窗口x內的運動點計數器加一,若運動點計數器的值大于一定的閾值,我們就認為窗口x中檢測到運動目標,該窗口發出閃爍信號,并與現有視頻疊加送至VGA顯示器顯示[11]。
為了控制區域的使能、位置以及大小,系統提供了六個按鍵對檢測區域進行設定,設定的結果可以隨時被更改。這六個按鍵可以實現窗口選擇、模式選擇和上下左右調整等功能。
系統硬件實物圖如圖10所示。

圖10 系統硬件實物圖Fig.10 System hardware chart

圖11 運動目標檢測Chipscope波形圖Fig.11 Chipscope waveforms of moving object detection
圖11是“運動目標出現在區域0后靜止不動”這一事件對應的Chipscope波形圖。圖中各個信號都有對應的注釋。從圖中可以看到,在該行中,每20個時鐘周期,當前塊的一個塊均值就會被計算出來。隨后依據第2節中的算法分別計算其幀差值及背景差值。由于該目標進入區域0后靜止,幀差delta_f的絕對值很小,幀差法檢測不到目標,如果一幀結束時幀差法都沒有檢測到目標,就將該幀視為靜止幀。背景差delta_b出現大于閾值(本次試驗設為25)的值,背景差法檢測到目標,并且根據win0_in為高電平判斷出目標在區域0內。win0_sum統計目標塊個數。圖中系統依據幀差法的判定,將當前幀視為靜止幀,fram_cnt加一,當fram_cnt等于2047,背景就會更新。
圖12是系統的現場測試圖,圖中開啟了4個檢測區域,4個區域顏色各不相同,大小和位置可以通過按鍵設置。從圖中可以看出,運動目標進入某個窗口后,該窗口就會由固定的顏色轉變為黑白交替地閃爍,以提醒監控空者在對應的區域發現了運動目標。如果運動目標在某個窗口中停止運動,系統仍然能夠繼續報警,直到將該目標歸入背景。經測試,系統能正確地實現背景動態跟新算法,實現多區域運動目標檢測功能。

圖12 系統現場調試圖Fig.12 System debugging chart
本系統的FPGA資源消耗情況如表1所示。

表1 FPGA資源消耗表Tab.1 FPGA resource consumption table
從表中可以看到,系統只使用了1個Block RAM用來存儲塊均值。由于采用了基于塊均值的計算方法,系統需要的存儲空間很小。一個Block RAM 的存儲空間為18kb,片上84個Block RAM的存儲空間總和為1 512kb,而一幀圖像的大小為2457.6kb。可見,如果不采用塊均值的存儲方式,片上的存儲空間是無法滿足要求的。
從Slice,LUT和Flip Flops等其他資源的消耗情況來看,本系統消耗的資源很少,容易在小規模低成本的FPGA上實現,并且易于集成入其他復雜的系統中。
在系統各個模塊延時方面,其中圖像數據緩存延時在1幀以內;中值濾波延時為5個時鐘;其他模塊的延時就是輸入輸出的寄存器各延時1個時鐘。系統中圖像的采集和檢測是同時進行的,在一幀圖像內完成,采集圖像的同時記錄各個檢測區域運動點的個數,在一幀結束的時候確定運動點的個數,以及哪幾個窗口有運動目標,然后在下一幀讓運動窗口進入閃爍狀態。
本系統采用背景動態更新的運動檢測算法,構建了具有多區域運動目標檢測功能的視頻監控系統,最多支持4個檢測區域。該系統能動態更新背景,較好地適應背景的變化。檢測區域的大小,位置和數量可以方便地配置,實現了640×480,30幀/s視頻信號的分區域實時檢測。該系統消耗較少的邏輯資源,可以在小規模的FPGA芯片上實現,適用于社區安防監控或生產安全監控等不同的場合。
[1] 郭永彩,蘇渝維,高潮.基于FPGA的紅外圖像實時采集系統設計與實現[J].儀器儀表學報,2011,32(3):515-519.Guo Y C,Su Y W,Gao C.Design and implementation of real time infrared image collection system based on FPGA[J].Chinese Journal of Scientific Instrument,2011,32(3):515-519.(in chinese)
[2] Tomasz K,Marek G.Real-time implementation of moving object detection in video surveillance systems using FPGA [J].Computer Science,2011,12(1):149-162.
[3] 周建英,吳小培,張超.基于滑動窗的混合高斯模型運動目標檢測方法[J].電子與信息學報,2013,35(7):1650-1655.Zhou J Y,Wu X P,Zhang C,et al.A moving object detection method based on sliding window gaussian mixture model[J].Journal of Electronics &Information Technology,2013,35(7):1650-1656.(in chinese)
[4] 祝利勇.基于FPGA的視頻運動目標檢測系統[D].西安:西安電子科技大學,2007.Zhu L Y.A video moving object detection system based on FPGA[D].Xian:Xidian University,2007.
[5] Lipton A J,Fujiyoshi H.Patil R S.Moving target classification and tracking from real-time video [J].IEEE Workshop Application of Computer Vision,1998,17(9):8-14.
[6] Barron J L,Fleet D J,Beauchemin S S.Performance of optical flow techniques[J].International J.Computer Vision,1994,12(1):42-77.
[7] Jain R.Difference and accumulative difference pictures in dynamic sceneanalysis[J].Image and Vision Computing,1984,2(2):99-108.
[8] 吳君欽,劉昊,羅勇.靜態背景下的運動目標檢測算法[J].液晶與顯示,2012,27(5):682-686.Wu J Q,Liu H,Luo Y.Algorithm of moving object detection in static background[J].Chinese Journal of Liquid Crystals and Displays,2012,27(5):682-686.(in chinese)
[9] 劉翔,周楨.基于分塊背景建模的運動目標檢測技術[J].液晶與顯示,2011,26(6):831-835.Liu X,Zhou Z.Moving objectives detecting technology based on block processing of background model establishment[J].Chinese Journal of Liquid Crystals and Displays,2011,26(6):831-835.(in chinese)
[10] Hoang V,Pham C.Efficient LUT-based truncated multiplier and its application in RGB to YCbCr Color space conversion[J].IEICE Transactions on Fundamentals of Electronics,Communications and Computer Sciences,2012,95(6):999-1006.
[11] 鄭爭兵.基于FPGA的 VGA波形顯示系統設計與實現[J].液晶與顯示,2014,29(1):88-93.Zheng Z B.Design and implementation of VGA waveform display system based on FPGA[J].Chinese Journal of Liquid Crystals and Displays,2014,29(1):88-93.(in chinese)