武 一, 程 銘, 劉建明
(1.河北工業(yè)大學(xué) 信息工程學(xué)院,天津 300401;2.天津現(xiàn)代職業(yè)技術(shù)學(xué)院 天津 300350)
常用的運(yùn)動(dòng)目標(biāo)檢測(cè)算法包括光流法、背景差分法和幀差法[1]。光流法計(jì)算量較大并且算法復(fù)雜,很難滿足實(shí)時(shí)性的要求。背景差分法可以滿足實(shí)時(shí)性的要求,但是更換背景時(shí)的計(jì)算量大,并且要選擇合適的模型。幀差法是最為常用的一種方法,其計(jì)算量較小,具有較好的實(shí)時(shí)性,對(duì)環(huán)境光照變化不敏感,但是該算法對(duì)運(yùn)動(dòng)目標(biāo)的檢測(cè)不準(zhǔn)確,容易造成目標(biāo)的缺失或增大。
傳統(tǒng)幀差法的過(guò)程分為兩步:首先,把相鄰兩幀或三幀圖像的對(duì)應(yīng)像素值相減得到差分圖像;其次,根據(jù)設(shè)定的閾值將差分后的結(jié)果二值化,若二值化結(jié)果小于事先確定的閾值時(shí),認(rèn)為此處為靜止部分,若二值化結(jié)果大于設(shè)定的閾值時(shí),認(rèn)為這是圖像中運(yùn)動(dòng)物體引起的,根據(jù)這些像素區(qū)域即可確定運(yùn)動(dòng)目標(biāo)在圖像中的位置。在一幅圖像中,邊緣包含著所需要的大部分信息?;诖朔N考慮,本文提出一種改進(jìn)傳統(tǒng)幀差法的思路。該方法首先在兩個(gè)方向同時(shí)進(jìn)行運(yùn)算,最后綜合兩個(gè)方向的結(jié)果確定運(yùn)動(dòng)物體。同時(shí)進(jìn)行的兩個(gè)方向一是對(duì)圖像進(jìn)行邊緣提取,利用圖像的邊緣差分來(lái)提取運(yùn)動(dòng)物體的輪廓,為了連接運(yùn)動(dòng)物體輪廓可能會(huì)出現(xiàn)的斷點(diǎn),再對(duì)差分結(jié)果進(jìn)行閉運(yùn)算。另外一個(gè)方向是將相鄰兩幀圖像的對(duì)應(yīng)像素值轉(zhuǎn)化為二值化數(shù)據(jù),對(duì)二值化數(shù)據(jù)進(jìn)行差分。具體過(guò)程分為三步:首先,對(duì)提取到的圖像采用sobel算法進(jìn)行邊緣提取,對(duì)相鄰兩幀間的邊緣進(jìn)行差分,對(duì)差分結(jié)果進(jìn)行閉運(yùn)算。其次,將對(duì)應(yīng)像素值轉(zhuǎn)化為二值化數(shù)據(jù),把二值化數(shù)據(jù)差分。最后,綜合閉運(yùn)算和二值化差分的結(jié)果,得到最終的運(yùn)動(dòng)物體輪廓。
為了實(shí)現(xiàn)該種融合算法,本文構(gòu)建了圖像采集、處理和顯示的系統(tǒng)[2]。核心部分采用FPGA來(lái)實(shí)現(xiàn),其內(nèi)部帶有豐富的IP核資源,有效利用可以提高設(shè)計(jì)效率。整體架構(gòu)圖如圖1。擬采用OV7670數(shù)字圖像傳感器作為前端視頻數(shù)據(jù)的采集模塊;Altera公司旗下的EP2C8系列FPGA芯片作為核心處理模塊,完成PLL鎖相環(huán)配置,圖像傳感器配置,圖像數(shù)據(jù)的輸入[3]與拼接[4],控制VGA顯示,核心算法處理等功能;采用FIFO(FPGA自帶資源)配合SDRAM作為數(shù)據(jù)緩存模塊;DA轉(zhuǎn)換器adv7123和普通顯示器構(gòu)成顯示模塊。
圖1 系統(tǒng)架構(gòu)Fig.1 Structure diagram of the system
傳統(tǒng)幀差法是對(duì)連續(xù)圖像序列進(jìn)行相減,最后依據(jù)閾值將差分結(jié)果二值化,當(dāng)結(jié)果大于閾值時(shí)認(rèn)為是運(yùn)動(dòng)區(qū)域。本文改進(jìn)傳統(tǒng)幀差法,如圖2所示,在圖像序列差分前對(duì)其進(jìn)行邊緣提取,對(duì)邊緣進(jìn)行差分以得到運(yùn)動(dòng)物體的輪廓,為了連接可能會(huì)出現(xiàn)的斷點(diǎn),對(duì)差分結(jié)果進(jìn)行閉運(yùn)算,保證運(yùn)動(dòng)物體輪廓的質(zhì)量。
邊緣提取采用sobel算法[5]。本文采用調(diào)用FPGA中IP核資源完成該算法。首先計(jì)算圖像的水平與垂直梯度,然后將兩個(gè)方向的梯度結(jié)合,通過(guò)閾值比較得出邊緣信息。過(guò)程如下:
圖3 相鄰像素與算子Fig.3 The adjacent pixels and the operator
圖3 (a)為一幅圖像的相鄰的 9個(gè)像素點(diǎn),圖 3(b)為垂直方向梯度算子,圖3(c)為水平方向的梯度算子。通過(guò)計(jì)算,得到像素f5的垂直方向梯度Gx和水平方向梯度Gy:
最終像素點(diǎn)f5的梯度F5為:
為了方便運(yùn)算,將公示簡(jiǎn)化為:
根據(jù)公式(1)、公式(3)的算法運(yùn)算過(guò)程,主要調(diào)用乘加器altmult_add,并行加法器parallel_add以及絕對(duì)值計(jì)算lpm_abs宏功能模塊,為了得到如圖3(a)所示的像素區(qū)域,還要調(diào)用帶抽頭的移位寄存器altshift_taps實(shí)現(xiàn)像素?cái)?shù)據(jù)分離。
2.1.1 乘加器altmult_add
由公式1得出,完成水平與垂直方向的梯度運(yùn)算要采用乘加器,通過(guò)quartusII自帶的MegaWizard Plug[6]平臺(tái)配置如圖4的乘加器模塊。其中,每一行的像素?cái)?shù)據(jù)由dataa_0輸入,由于其被配置為shiftin input,所以經(jīng)過(guò)3個(gè)時(shí)鐘周期,相鄰的3個(gè)數(shù)據(jù)分別與乘數(shù)datab_0、datab_1和datab_2相乘,乘數(shù)即為圖3(b)和圖3(c)的算子。所得到的結(jié)果為每一行中相鄰3個(gè)元素的乘法加法和。要完成一個(gè)方向的梯度運(yùn)算要調(diào)用3個(gè)這樣的乘加器。
圖4 可編程乘加器Fig.4 Altmult_add
2.1.2 并行加法器parallel_add
由公式(2)看出,要完成水平與垂直梯度運(yùn)算還要采用并行加法器,即將相鄰三行經(jīng)過(guò)altmult_add[6]后的結(jié)果相加得到最終的梯度。通過(guò)MegaWizard Plug平臺(tái)配置該模塊,其中的data0x、data1x和data2x分別輸入水平與梯度運(yùn)算時(shí)每行的結(jié)果,水平和垂直方向分別調(diào)用一個(gè)并行加法器,得到的result分別為水平與垂直方向梯度。
2.1.3 絕對(duì)值計(jì)算lpm_abs
根據(jù)公式3,采用絕對(duì)值運(yùn)算模塊[6]來(lái)完成水平梯度與垂直梯度的取絕對(duì)值運(yùn)算。通過(guò)MegaWizard Plug平臺(tái)配置該模塊,其中data輸入分別為水平方向與垂直方向的梯度,result輸出相應(yīng)方向的絕對(duì)值。
2.1.4 像素?cái)?shù)據(jù)分離altshift_taps
該部分要完成的功能是將緩存中輸出的整體的像素?cái)?shù)據(jù)分離成相鄰的3*3區(qū)域(如圖3-1所示),這樣才能對(duì)像素點(diǎn)進(jìn)行sobel算法處理。本思路采用調(diào)用帶抽頭的移位寄存器altshift_taps[6]來(lái)實(shí)現(xiàn)該功能。通過(guò)MegaWizard Plug平臺(tái)配置該模塊,使該寄存器具有6位輸入、6位輸出,相鄰抽頭間距640個(gè)寄存器的三抽頭功能。隨著數(shù)據(jù)由shiftin輸入,shift2x輸出第N行數(shù)據(jù),shift1x輸出第N+1行數(shù)據(jù),shift0x輸出第N+2行數(shù)據(jù),形成如圖3-1的3*3像素?cái)?shù)據(jù)區(qū)域。
將上述模塊組合起來(lái),實(shí)現(xiàn)sobel算子得到圖像的邊緣信息。仿真圖如圖5,shiftin為輸入數(shù)據(jù);shiftout1-3為三抽頭,即把數(shù)據(jù)裝換為3*3模板;result為輸出梯度值,正確結(jié)果32。
圖5 邊緣檢測(cè)仿真圖Fig.5 Simulation of edge detection
差分部分包括邊緣的差分以及二值化結(jié)果差分。在圖像序列中,第 K 與 K+1 幀圖像分別為 Fk(x,y)和 Fk+1(x,y),則可以采用二者的差分結(jié)果表示出運(yùn)動(dòng)物體,公式為:
其中,T為二值化閾值,結(jié)果中的1為前后兩幀圖像中灰度發(fā)生變化的點(diǎn),即屬于運(yùn)動(dòng)物體或者是噪聲。0為未發(fā)生變化的點(diǎn),即靜止的部分。本系統(tǒng)采用當(dāng)前幀與緩存幀進(jìn)行異或運(yùn)算以完成差分過(guò)程。
閉運(yùn)算指采用同一結(jié)構(gòu)元素對(duì)圖像先膨脹再腐蝕[7],計(jì)算公式如公式(5)。經(jīng)過(guò)運(yùn)算后,可以平滑圖像的邊緣,連接出現(xiàn)的斷點(diǎn),使圖像邊緣的質(zhì)量更高。公式如下:
雖然閉運(yùn)算計(jì)算過(guò)程復(fù)雜,但是用到的主要器件為6位比較器、選擇器、延時(shí)FIFO以及鎖存器,這些器件均可以用FPGA實(shí)現(xiàn)。采用代碼實(shí)現(xiàn):
其中 mTam_x+1<=mTap_x,rTam_x+1<=rTap_x, 并且mTam_0<=Y。經(jīng)過(guò)開(kāi)運(yùn)算后,圖像中小出現(xiàn)的斷點(diǎn)被有效連接,使移動(dòng)物體的邊緣輪廓更加清晰,畫面更加整潔,同時(shí)也為計(jì)算移動(dòng)物體的坐標(biāo)提供了保障。
為了比較方便,將相鄰兩幀圖像的像素值二值化[8],用到verilog的賦值語(yǔ)句,如公式
其中R、G和B為一個(gè)像素值得3個(gè)分量,T為閾值。F即為二值化結(jié)果。
為了結(jié)果明顯,系統(tǒng)中提取到的運(yùn)動(dòng)物體用紅色標(biāo)注。用到的賦值語(yǔ)句如公式(7):
其中,VGA_R為VGA的紅色通道,X和Y為像素坐標(biāo),A1和A2為開(kāi)運(yùn)算和二值化數(shù)據(jù)差分結(jié)果,R為原始圖像的紅色分量。
如圖6所示為該算法的實(shí)驗(yàn)驗(yàn)證結(jié)果。攝像頭固定采集場(chǎng)景中的信息,其中1為視頻中無(wú)運(yùn)動(dòng)物體的原始圖像,2、3和4為出現(xiàn)移動(dòng)物體時(shí)的跟蹤畫面。圖中的移動(dòng)物體為萬(wàn)用表黑色表筆,當(dāng)其運(yùn)動(dòng)時(shí)其邊緣會(huì)顯示全紅色,如圖中的雙黑實(shí)線所示。
文中提出一種改進(jìn)傳統(tǒng)幀間差分法的思路,不直接對(duì)采集到的圖像序列進(jìn)行差分,而是對(duì)其進(jìn)行邊緣提取以得到物體的輪廓,利用邊緣信息進(jìn)行差分以達(dá)到提取運(yùn)動(dòng)物體邊緣的目的,最后對(duì)差分結(jié)果進(jìn)行閉運(yùn)算,連接可能會(huì)出現(xiàn)的移動(dòng)物體輪廓斷點(diǎn)。為了保障提取到運(yùn)動(dòng)物體的質(zhì)量,同時(shí)把對(duì)應(yīng)像素值轉(zhuǎn)化為二值化數(shù)據(jù)并進(jìn)行差分。最后根據(jù)閉運(yùn)算以及二值化差分結(jié)果提取出數(shù)據(jù)突變的部分,即為運(yùn)動(dòng)物體的部分。
圖6 靜止畫面與跟蹤效果Fig.6 Still images and tracking effect
[1]萬(wàn)纓,韓毅,盧漢清.運(yùn)動(dòng)目標(biāo)檢測(cè)算法的探討[J].計(jì)算機(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的圖像采集與顯示設(shè)計(jì)[J].中國(guó)科技信息,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ìn)算法[J].計(jì)算機(jī)應(yīng)用與軟件,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].計(jì)算機(jī)應(yīng)用,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邊緣檢測(cè)的FPGA實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),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的灰度圖像腐蝕膨脹運(yùn)算的設(shè)計(jì)與實(shí)現(xiàn) [C]//教育部中南地區(qū)高等學(xué)校電子電氣基礎(chǔ)課教學(xué)研究會(huì)第二十屆學(xué)術(shù)年會(huì)會(huì)議論文集 (下冊(cè)),2010:741-744.
[8]徐曉昭,沈蘭蓀,劉長(zhǎng)江.顏色校正方法及其在圖像處理中的應(yīng)用[J].計(jì)算機(jī)應(yīng)用研究,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.