劉 馨 ,馬宏鋒 ,2,王宏斌
(1.蘭州工業(yè)學(xué)院電子信息工程系,甘肅蘭州730050;2.蘭州交通大學(xué)電子與信息工程學(xué)院,甘肅蘭州 730070)
隨著我國(guó)經(jīng)濟(jì)建設(shè)的快速發(fā)展,城市人口和機(jī)動(dòng)車輛急劇增加,交通擁擠堵塞嚴(yán)重,因此如何有效管理交通信息對(duì)解決城市交通問題起到越來越重要的意義。由于運(yùn)動(dòng)目標(biāo)的視頻圖像序列中提供了豐富的信息,這是智能交通監(jiān)控系統(tǒng)研究的熱點(diǎn),其中如何準(zhǔn)確地檢測(cè)出視頻圖像中的運(yùn)動(dòng)目標(biāo)直接影響監(jiān)控系統(tǒng)的效果。
本文采用VC++6.0、DirectShow和OpenCV2.0技術(shù),實(shí)現(xiàn)了一個(gè)基于視頻的交通車輛檢測(cè)系統(tǒng),主要工作體現(xiàn)在以下幾個(gè)方面:1采用DirectShow技術(shù)獲取視頻信號(hào)中的圖像幀;2采用OpenCV庫(kù)對(duì)圖像進(jìn)行處理并提取出感興趣的區(qū)域;3采用基于多幀平均算法的背景差分法將感興趣區(qū)域中的運(yùn)動(dòng)車輛檢測(cè)出來。
DirectShow是微軟公司在ActiveMovie和Video for Windows的基礎(chǔ)上推出的新一代基于COM(compo?nent object model,COM)的流媒體處理的開發(fā)包,采用Filter Graph來管理整個(gè)數(shù)據(jù)流的處理過程,可從采集卡上捕捉數(shù)據(jù)并用于后期處理[1]。DirectShow可將應(yīng)用程序和硬件設(shè)備隔離開來,它即支持各種媒體格式(如Avi,Mp3,Asf等),也支持WDM和VFW驅(qū)動(dòng)的采集卡,為媒體流的采集提供有力的支持。
DirectShow的基本構(gòu)建模塊稱為濾波器(Filter)組件,DirectShow可將數(shù)據(jù)流的處理過程分解成若干步驟,每一步由一個(gè)Filter來完成。Filter可根據(jù)功能的不同分為3類:Source Filters,Transform Filters和Ren?dering Filters。Source filters主要負(fù)責(zé)取得數(shù)據(jù),數(shù)據(jù)源可以是文件、因特網(wǎng)、或者計(jì)算機(jī)里的采集卡、數(shù)字?jǐn)z像機(jī)等;Transform Filters主要負(fù)責(zé)數(shù)據(jù)的格式轉(zhuǎn)換、數(shù)據(jù)流的分解或集合、傳輸;Rendering Filters主要負(fù)責(zé)將數(shù)據(jù)送給聲卡、顯卡進(jìn)行多媒體演示,或者將輸出文件存儲(chǔ)或發(fā)布。Filters之間通過Pin進(jìn)行連接構(gòu)成濾波器圖(Filter Graph),通過Filter Graph Manager控制一系列的數(shù)據(jù)處理過程[2]。此時(shí)的媒體數(shù)據(jù)已經(jīng)轉(zhuǎn)換為一幀一幀的圖像,便方便一張一張捕捉下來。
OpenCV是Intel開源計(jì)算機(jī)視覺庫(kù),主要由一系列C函數(shù)和少量的C++類構(gòu)成,實(shí)現(xiàn)圖像處理和計(jì)算機(jī)視覺方面的相關(guān)算法。OpenCV獨(dú)立于操作系統(tǒng)、硬件和圖形管理器,具有通用的視頻圖像載入、保存和獲取模塊,便于實(shí)時(shí)應(yīng)用程序的開發(fā)。
OpenCV中封裝了很多針對(duì)視頻流的處理函數(shù),主要有以下3種[3]:
1)利用HighGUI庫(kù)實(shí)現(xiàn)對(duì)視頻的輸入、輸出及處理,由于HighGUI庫(kù)為用戶提供簡(jiǎn)單的用戶接口,方便獲取攝像頭和采集卡的視頻流;
2)由于OpenCV集成了DirectShow模塊,可采用該技術(shù)進(jìn)行視頻流處理;
3)采用Opencv提供的CvCam庫(kù)對(duì)視頻流進(jìn)行處理。
這3種方法相比,HighGUI只是用來建立快速軟件原型或試驗(yàn)用,在生產(chǎn)中應(yīng)用還有待完善,CvCam最初作為多攝像頭同步使用,在今后的OpenCV版本中逐步淘汰,故本文采用DirectShow模塊進(jìn)行視頻流采集和處理。
本文設(shè)計(jì)的車輛檢測(cè)模塊是由采集設(shè)備和基于PC的軟件處理系統(tǒng)組成,完成在PC機(jī)上進(jìn)行現(xiàn)場(chǎng)采集,并實(shí)時(shí)處理視頻圖像的目的。從功能上來說該模塊主要有3部分構(gòu)成:
1)視頻發(fā)送:主要負(fù)責(zé)提供視頻圖像信號(hào);
2)視頻采集:視頻采集卡用PC機(jī)上的軟件封裝;采集到的原始視頻信號(hào)將暫時(shí)存在PC機(jī)的內(nèi)存上,由負(fù)責(zé)視頻處理的Filter在內(nèi)存中直接讀取并進(jìn)行相關(guān)算法處理,這樣可以繞過硬盤讀取速度的瓶頸,降低對(duì)硬件的依賴;
3)視頻處理:將背景差分算法結(jié)合OpenCV庫(kù)進(jìn)行模塊化封裝。
圖像采集模塊是將攝像機(jī)傳輸過來的視頻圖像通過視頻采集卡將其數(shù)字化,按每秒1~25幀的速率捕捉圖像傳輸給PC機(jī)進(jìn)行相關(guān)處理并顯示。DirectShow定義了標(biāo)準(zhǔn)組件來處理流媒體數(shù)據(jù),開發(fā)人員只需要調(diào)用API函數(shù)來實(shí)現(xiàn)對(duì)流媒體的控制,處理一般的視頻捕捉問題。
這里定義了CDXGraph.cpp類封裝了Filter Graph[4],

視頻流每次經(jīng)過Filter時(shí),都會(huì)調(diào)用Transform函數(shù)進(jìn)行數(shù)據(jù)處理,即將SourceFile的數(shù)據(jù)流轉(zhuǎn)換為OpenCV可以處理的圖像信息,并運(yùn)用背景差分法對(duì)圖像進(jìn)行檢測(cè)并輸出。由于DirectShow和OpenCV中數(shù)據(jù)結(jié)構(gòu)不同,但包含相同的數(shù)據(jù)內(nèi)容,因此兩者之間要完成數(shù)據(jù)的轉(zhuǎn)換。也就是在OpenCV相關(guān)函數(shù)初始化后,將DirectShow所支持的數(shù)據(jù)結(jié)構(gòu)中的圖像數(shù)據(jù)拷貝到OpenCV所支持的圖像數(shù)據(jù)部分,進(jìn)一步完成車輛檢測(cè)算法的核心部分。
背景差分法是利用當(dāng)前幀圖像與背景圖像做差分來提取感興趣區(qū)域的一種常用的運(yùn)動(dòng)目標(biāo)檢測(cè)算法[5]。本文基于背景差法的車輛檢測(cè)算法思想如下:
1)使用DirectShow獲取交通視頻中一幀一幀連續(xù)的圖像,并進(jìn)行灰度化和平滑處理;
2)初始背景建立。為了不使初始背景失真,采用多幀圖像統(tǒng)計(jì)求平均值的方法,避免因第一幀有運(yùn)動(dòng)目標(biāo)而導(dǎo)致背景檢測(cè)出現(xiàn)錯(cuò)誤的物體團(tuán)塊。即在幀序列號(hào)frameNum<50,使用進(jìn)行背景加權(quán)疊加。當(dāng)fra?meNum=50時(shí),采用平均值法求得的初始背景;
3)將當(dāng)前幀與背景圖中值濾波后進(jìn)行差分運(yùn)算,同時(shí)統(tǒng)計(jì)計(jì)算其直方圖的灰度級(jí);
4)采用OSTU算法求閾值,即計(jì)算從1至m的每個(gè)灰度級(jí),并計(jì)算類內(nèi)方差和類間方差,具有最大方差的T即為該閾值;
5)更新背景,并提取出感興趣的區(qū)域,并將其二值化;
6)根據(jù)連續(xù)幀的二值化圖像檢測(cè)出新進(jìn)入的車輛,從而完成車輛的檢測(cè)。
由于交通場(chǎng)景中環(huán)境的變化,導(dǎo)致背景圖像會(huì)隨時(shí)發(fā)生變化,如果直接將當(dāng)前圖像和未更新的背景圖像進(jìn)行差分,會(huì)產(chǎn)生大量誤差,因此如何建立合適的背景模型是背景差法需要解決的關(guān)鍵問題之一。
本文采用多幀圖像統(tǒng)計(jì)平均算法[6]來確定初始背景圖像,首先利用統(tǒng)計(jì)直方圖的方法估計(jì)每一個(gè)位置處每一種可能像素灰度值出現(xiàn)的次數(shù),出現(xiàn)次數(shù)最多的位置即作為背景點(diǎn)

該方法原理簡(jiǎn)單,但運(yùn)算量較大,對(duì)背景變化的反應(yīng)較慢。為了解決該問題,考慮將某點(diǎn)的灰度范圍等分為若干個(gè)區(qū)間,這樣原本統(tǒng)計(jì)某一位置處的像素灰度值的次數(shù)轉(zhuǎn)變?yōu)榻y(tǒng)計(jì)該像素落在各區(qū)間段的次數(shù),也就是計(jì)算落在每個(gè)區(qū)間內(nèi)像素點(diǎn)的灰度值的平均值μ和區(qū)間的計(jì)數(shù)統(tǒng)計(jì)S[7]。
當(dāng)前i幀在第n個(gè)區(qū)間上的均值μi,n的表達(dá)式可參照多幀平均的更新公式,即

式中:μi,n表示更新后的背景在第n個(gè)區(qū)間上的均值;μi-1,n( )x,y表示當(dāng)前背景在第n個(gè)區(qū)間上的均值;α表示權(quán)值。
對(duì)幀中的每個(gè)像素點(diǎn)計(jì)算μi,n和Si,n后,比較不同區(qū)間段的Si,n,具有最大Si,n的區(qū)間的μi,n即為背景。
在OpenCV中提供了完成該功能的函數(shù),其定義[8]如下所示:

其中:image為輸入圖像指針;acc為累加結(jié)果指針;al?pha為累加權(quán)重;mask為蒙板圖指針。當(dāng)mask為NULL時(shí),image圖像中的每一個(gè)像素點(diǎn)以alpha為權(quán)重累加到acc中;若mask不為NULL時(shí),只將mask中對(duì)應(yīng)像素值為1的image中的像素點(diǎn)的灰度值累加到acc中,這樣就完成了不同區(qū)間內(nèi)像素點(diǎn)的累加,之后將其累加值求平均值得到背景圖像。

圖1 多幀圖像統(tǒng)計(jì)平均算法得到的背景圖像Fig.1 Background image gained by the algorithm of multi-frame average
圖1為多幀圖像統(tǒng)計(jì)平均算法得到的背景圖像,其中(a)為含有運(yùn)動(dòng)目標(biāo)的原始圖像;(b)為由該算法生成的灰度背景圖像。從圖中可見,背景圖像總體保持了一個(gè)相對(duì)純凈的背景環(huán)境,為進(jìn)一步運(yùn)動(dòng)目標(biāo)的檢測(cè)奠定了基礎(chǔ)。
本文實(shí)驗(yàn)環(huán)境如下:
1)硬件條件:PC機(jī)一臺(tái)(奔4CPU,256M內(nèi)存,20G硬盤);DeckLink采集卡一塊(采用PCI接口)
2)軟件條件:Windows xp系統(tǒng),VC++6.0,OpenCV 2.0,DirectShow
實(shí)驗(yàn)中選取兩個(gè)不同環(huán)境對(duì)系統(tǒng)加以評(píng)價(jià),將漏檢率和準(zhǔn)確率[9]作為指標(biāo)評(píng)價(jià)系統(tǒng)的性能。其定義如下:

檢測(cè)結(jié)果如圖2和圖3所示。

圖2 在場(chǎng)景1下運(yùn)動(dòng)車輛檢測(cè)效果比較Fig.2 Effects of moving vehicle detection in the scene 1

圖3 在場(chǎng)景2下運(yùn)動(dòng)車輛檢測(cè)效果比較Fig.3 Effects of moving vehicle detection in the scene 2
兩個(gè)場(chǎng)景下目標(biāo)檢測(cè)的準(zhǔn)確性如表1所示。

表1 運(yùn)動(dòng)目標(biāo)提取結(jié)果統(tǒng)計(jì)Tab.1 Statistic results of moving object extraction
通過實(shí)驗(yàn)結(jié)果可以看出,利用本算法可以比較完整地將運(yùn)動(dòng)目標(biāo)從背景區(qū)域中分離出來,得到比較理想的檢測(cè)效果;在PC機(jī)上每秒鐘可處理18幀的圖像,提高了算法的實(shí)時(shí)性和可靠性,但在下雨或光照強(qiáng)烈的場(chǎng)景下,車輛的檢測(cè)準(zhǔn)確率有所下降,還需進(jìn)一步改進(jìn)。
以城市交通監(jiān)控場(chǎng)景為背景,檢測(cè)視頻中的運(yùn)動(dòng)目標(biāo),采用VC+6.0、DirectShow和OpenCV技術(shù)設(shè)計(jì)實(shí)現(xiàn)了一個(gè)基于多幀平均的背景差分法的車輛檢測(cè)系統(tǒng)。運(yùn)動(dòng)DirectShow對(duì)各種視頻格式文件編碼,實(shí)現(xiàn)對(duì)流媒體的捕捉、回放和幀操作,使用Opencv庫(kù)對(duì)捕獲的圖像幀進(jìn)行灰度化、平滑處理、幀間差分等處理,根據(jù)多幀平均的背景差分算法檢測(cè)運(yùn)動(dòng)車輛。同時(shí)將該算法應(yīng)用于不同場(chǎng)景下,進(jìn)一步驗(yàn)證了該算法的正確性。通過實(shí)驗(yàn)結(jié)果可知,基于改進(jìn)的背景差分法的交通檢測(cè)系統(tǒng)能較好的檢測(cè)出運(yùn)動(dòng)目標(biāo),算法的復(fù)雜度不高,實(shí)時(shí)性較好,具有較高的可行性和廣泛的應(yīng)用前景。
[1]陸其明.DirectShow開發(fā)指南[M].北京:清華大學(xué)出版社,2003:12-34.
[2]陳寧,劉宏剛,張向東,等.基于DirectShow技術(shù)的視頻采集方案的實(shí)現(xiàn)[J].電子科技,2007(2):66-69.
[3]姜永成,周正干,任福君,等.基于OpenCV的移動(dòng)機(jī)器人視頻流采集與處理[J].機(jī)床與液壓,2010(8):40-43.
[4]潘攀.基于DirectShow的視頻監(jiān)控采集系統(tǒng)[J].現(xiàn)代計(jì)算機(jī),2010(8):156-158.
[5]張建飛.基于OpenCV的交通視頻運(yùn)動(dòng)目標(biāo)檢測(cè)與跟蹤[J].電子測(cè)量,2012(1):50-53.
[6] CHEUNG SEN-CHINGS,CHAND R.Robust techniques for background subtraction in urban traffic video[J].Proc SPIE,Video Communications and Image Processing,2004,53(8):881-892.
[7]石紅芹,呂方亮.基于雙置亂與奇異值分解的彩色圖像水印算法[J].華東交通大學(xué)學(xué)報(bào),2010,114(4):44-47.
[8]張學(xué)賀,張學(xué)東,丁寧.基于OpenCV的運(yùn)動(dòng)目標(biāo)檢測(cè)與跟蹤[J].遼寧科技大學(xué)學(xué)報(bào),2010(10):490-494.
[9]郭怡文,袁飛龍.基于背景差分的多車道車流量檢測(cè)系統(tǒng)[J].電光與控制,2010,9(17):90-93.