武 一, 程 銘, 劉建明
(1.河北工業大學 信息工程學院,天津 300401;2.天津現代職業技術學院 天津 300350)
常用的運動目標檢測算法包括光流法、背景差分法和幀差法[1]。光流法計算量較大并且算法復雜,很難滿足實時性的要求。背景差分法可以滿足實時性的要求,但是更換背景時的計算量大,并且要選擇合適的模型。幀差法是最為常用的一種方法,其計算量較小,具有較好的實時性,對環境光照變化不敏感,但是該算法對運動目標的檢測不準確,容易造成目標的缺失或增大。
傳統幀差法的過程分為兩步:首先,把相鄰兩幀或三幀圖像的對應像素值相減得到差分圖像;其次,根據設定的閾值將差分后的結果二值化,若二值化結果小于事先確定的閾值時,認為此處為靜止部分,若二值化結果大于設定的閾值時,認為這是圖像中運動物體引起的,根據這些像素區域即可確定運動目標在圖像中的位置。在一幅圖像中,邊緣包含著所需要的大部分信息。基于此種考慮,本文提出一種改進傳統幀差法的思路。該方法首先在兩個方向同時進行運算,最后綜合兩個方向的結果確定運動物體。同時進行的兩個方向一是對圖像進行邊緣提取,利用圖像的邊緣差分來提取運動物體的輪廓,為了連接運動物體輪廓可能會出現的斷點,再對差分結果進行閉運算。另外一個方向是將相鄰兩幀圖像的對應像素值轉化為二值化數據,對二值化數據進行差分。具體過程分為三步:首先,對提取到的圖像采用sobel算法進行邊緣提取,對相鄰兩幀間的邊緣進行差分,對差分結果進行閉運算。其次,將對應像素值轉化為二值化數據,把二值化數據差分。最后,綜合閉運算和二值化差分的結果,得到最終的運動物體輪廓。
為了實現該種融合算法,本文構建了圖像采集、處理和顯示的系統[2]。核心部分采用FPGA來實現,其內部帶有豐富的IP核資源,有效利用可以提高設計效率。整體架構圖如圖1。擬采用OV7670數字圖像傳感器作為前端視頻數據的采集模塊;Altera公司旗下的EP2C8系列FPGA芯片作為核心處理模塊,完成PLL鎖相環配置,圖像傳感器配置,圖像數據的輸入[3]與拼接[4],控制VGA顯示,核心算法處理等功能;采用FIFO(FPGA自帶資源)配合SDRAM作為數據緩存模塊;DA轉換器adv7123和普通顯示器構成顯示模塊。
圖1 系統架構Fig.1 Structure diagram of the system
傳統幀差法是對連續圖像序列進行相減,最后依據閾值將差分結果二值化,當結果大于閾值時認為是運動區域。本文改進傳統幀差法,如圖2所示,在圖像序列差分前對其進行邊緣提取,對邊緣進行差分以得到運動物體的輪廓,為了連接可能會出現的斷點,對差分結果進行閉運算,保證運動物體輪廓的質量。
邊緣提取采用sobel算法[5]。本文采用調用FPGA中IP核資源完成該算法。首先計算圖像的水平與垂直梯度,然后將兩個方向的梯度結合,通過閾值比較得出邊緣信息。過程如下:
圖3 相鄰像素與算子Fig.3 The adjacent pixels and the operator
圖3 (a)為一幅圖像的相鄰的 9個像素點,圖 3(b)為垂直方向梯度算子,圖3(c)為水平方向的梯度算子。通過計算,得到像素f5的垂直方向梯度Gx和水平方向梯度Gy:
最終像素點f5的梯度F5為:
為了方便運算,將公示簡化為:
根據公式(1)、公式(3)的算法運算過程,主要調用乘加器altmult_add,并行加法器parallel_add以及絕對值計算lpm_abs宏功能模塊,為了得到如圖3(a)所示的像素區域,還要調用帶抽頭的移位寄存器altshift_taps實現像素數據分離。
2.1.1 乘加器altmult_add
由公式1得出,完成水平與垂直方向的梯度運算要采用乘加器,通過quartusII自帶的MegaWizard Plug[6]平臺配置如圖4的乘加器模塊。其中,每一行的像素數據由dataa_0輸入,由于其被配置為shiftin input,所以經過3個時鐘周期,相鄰的3個數據分別與乘數datab_0、datab_1和datab_2相乘,乘數即為圖3(b)和圖3(c)的算子。所得到的結果為每一行中相鄰3個元素的乘法加法和。要完成一個方向的梯度運算要調用3個這樣的乘加器。
圖4 可編程乘加器Fig.4 Altmult_add
2.1.2 并行加法器parallel_add
由公式(2)看出,要完成水平與垂直梯度運算還要采用并行加法器,即將相鄰三行經過altmult_add[6]后的結果相加得到最終的梯度。通過MegaWizard Plug平臺配置該模塊,其中的data0x、data1x和data2x分別輸入水平與梯度運算時每行的結果,水平和垂直方向分別調用一個并行加法器,得到的result分別為水平與垂直方向梯度。
2.1.3 絕對值計算lpm_abs
根據公式3,采用絕對值運算模塊[6]來完成水平梯度與垂直梯度的取絕對值運算。通過MegaWizard Plug平臺配置該模塊,其中data輸入分別為水平方向與垂直方向的梯度,result輸出相應方向的絕對值。
2.1.4 像素數據分離altshift_taps
該部分要完成的功能是將緩存中輸出的整體的像素數據分離成相鄰的3*3區域(如圖3-1所示),這樣才能對像素點進行sobel算法處理。本思路采用調用帶抽頭的移位寄存器altshift_taps[6]來實現該功能。通過MegaWizard Plug平臺配置該模塊,使該寄存器具有6位輸入、6位輸出,相鄰抽頭間距640個寄存器的三抽頭功能。隨著數據由shiftin輸入,shift2x輸出第N行數據,shift1x輸出第N+1行數據,shift0x輸出第N+2行數據,形成如圖3-1的3*3像素數據區域。
將上述模塊組合起來,實現sobel算子得到圖像的邊緣信息。仿真圖如圖5,shiftin為輸入數據;shiftout1-3為三抽頭,即把數據裝換為3*3模板;result為輸出梯度值,正確結果32。
圖5 邊緣檢測仿真圖Fig.5 Simulation of edge detection
差分部分包括邊緣的差分以及二值化結果差分。在圖像序列中,第 K 與 K+1 幀圖像分別為 Fk(x,y)和 Fk+1(x,y),則可以采用二者的差分結果表示出運動物體,公式為:
其中,T為二值化閾值,結果中的1為前后兩幀圖像中灰度發生變化的點,即屬于運動物體或者是噪聲。0為未發生變化的點,即靜止的部分。本系統采用當前幀與緩存幀進行異或運算以完成差分過程。
閉運算指采用同一結構元素對圖像先膨脹再腐蝕[7],計算公式如公式(5)。經過運算后,可以平滑圖像的邊緣,連接出現的斷點,使圖像邊緣的質量更高。公式如下:
雖然閉運算計算過程復雜,但是用到的主要器件為6位比較器、選擇器、延時FIFO以及鎖存器,這些器件均可以用FPGA實現。采用代碼實現:
其中 mTam_x+1<=mTap_x,rTam_x+1<=rTap_x, 并且mTam_0<=Y。經過開運算后,圖像中小出現的斷點被有效連接,使移動物體的邊緣輪廓更加清晰,畫面更加整潔,同時也為計算移動物體的坐標提供了保障。
為了比較方便,將相鄰兩幀圖像的像素值二值化[8],用到verilog的賦值語句,如公式
其中R、G和B為一個像素值得3個分量,T為閾值。F即為二值化結果。
為了結果明顯,系統中提取到的運動物體用紅色標注。用到的賦值語句如公式(7):
其中,VGA_R為VGA的紅色通道,X和Y為像素坐標,A1和A2為開運算和二值化數據差分結果,R為原始圖像的紅色分量。
如圖6所示為該算法的實驗驗證結果。攝像頭固定采集場景中的信息,其中1為視頻中無運動物體的原始圖像,2、3和4為出現移動物體時的跟蹤畫面。圖中的移動物體為萬用表黑色表筆,當其運動時其邊緣會顯示全紅色,如圖中的雙黑實線所示。
文中提出一種改進傳統幀間差分法的思路,不直接對采集到的圖像序列進行差分,而是對其進行邊緣提取以得到物體的輪廓,利用邊緣信息進行差分以達到提取運動物體邊緣的目的,最后對差分結果進行閉運算,連接可能會出現的移動物體輪廓斷點。為了保障提取到運動物體的質量,同時把對應像素值轉化為二值化數據并進行差分。最后根據閉運算以及二值化差分結果提取出數據突變的部分,即為運動物體的部分。
圖6 靜止畫面與跟蹤效果Fig.6 Still images and tracking effect
[1]萬纓,韓毅,盧漢清.運動目標檢測算法的探討[J].計算機仿真,2006,23(10):221-226.WAN Ying,HAN Yi,LU Han-qing.The methods for moving object detection[J].Computer Simulation,2006,23 (10):221-226.
[2]王晗,李翔,李忠敏,等.基于OV7670的圖像采集與顯示設計[J].中國科技信息,2013(11):90-91.WANG Han,LI Xiang,LI Zhong-min,et al.Image acquisition and display design based on OV7670[J].China Science and Technology Information,,2013(11):90-91.
[3]史露,蘇剛,韓飛.基于SIFT和SURF圖像拼接算法的改進算法[J].計算機應用與軟件,2013,30(6):72-75.SHI Lu,SU Gang,HAN Fei.An improved algorithm base on SIFT and SURF image stitching algorthm[J].Computer Applications and Software,2013,30(6):72-75.
[4]秦劍,李林,李紹明,等.基于梯度的圖像分割新方法法[J].計算機應用,2009,29(8):2071-2073.QIN Jian,LI Lin,LI Shao-ming,et al.New image segmentation method based on gradient[J].Joumal of Computer Applacations,2009,29(8):2071-2073.
[5]李明,趙勛杰,毛偉民.Sobel邊緣檢測的FPGA實現[J].現代電子技術,2009(16):44-46.LI Ming,ZHAO Xun-jie,MAO Wei-min.Implementation of Sobel edge detection based on FPGA[J].Modern Electronic Technology,2009(16):44-46.
[6]Altera.Quartus II Version 7.2 Handbook[EB/OL].(2007-10)https://www.altera.com/download/software/quartus-ii-we/7.2/zh_CN.
[7]石偉,宋躍.基于FPGA/SOPC的灰度圖像腐蝕膨脹運算的設計與實現 [C]//教育部中南地區高等學校電子電氣基礎課教學研究會第二十屆學術年會會議論文集 (下冊),2010:741-744.
[8]徐曉昭,沈蘭蓀,劉長江.顏色校正方法及其在圖像處理中的應用[J].計算機應用研究,2008,25(8):2250-2254 XU Xiao-zhao,SHEN Lan-sun,LIU Chang-jiang.Color correction methods and application in image processing[J].Applicaion Research of Computers,2008,25(8):2250-2254.