引言
隨著視頻監(jiān)控的普及,智能視頻監(jiān)控是當前備受關注的前沿技術,該技術主要利用計算機視覺和視頻分析的方法對視頻圖像序列進行自動分析,從而實現對動態(tài)場景中目標的定位、識別和跟蹤,分析判斷目標行為,得出對圖像內容含義的理解以及對客觀場景的解釋。在視頻監(jiān)控系統(tǒng)中,車輛的檢測在交通方面意義重大。同時隨著視頻車輛檢測技術的發(fā)展,人們已不滿足于僅僅檢測出車輛,在國外,FHWA(美國聯邦公路局)就進一步利用此技術來提取交通參數,如交通流量,十字路口的車輛轉向信息等。
對車輛的檢測和計數,可以檢測交通路口的車流量,通過對車輛的檢測可以實現對車輛堵塞和車禍進行報警等功能。
1 車輛檢測和計數系統(tǒng)的實現步驟
1.1 提取目標物體
對車輛的檢測,首先要把“車”的圖像從背景中提取出來。由于針對交通系統(tǒng)中的車輛,特別是交通路口的車輛,一般都是運動物體,因而可以運用運動目標檢測技術,將車輛從靜止的背景中分離出來再進行分析。視頻監(jiān)控中常見的運動目標檢測算法主要有3類:光流法,鄰幀差法和減背景方法。光流法的優(yōu)點是對動態(tài)環(huán)境有很好的適應性,但復雜度高,抗噪性差,難以符合視覺監(jiān)視實時處理的要求;鄰幀差法雖然算法簡單,易于實時監(jiān)控,但難以獲得精確目標,容易產生空洞;減背景技術是最為常用的,它把序列中的每幀與固定的靜止參考幀(如靜止的背景)做幀差,若像素的差值大于某一閾值,就判斷此像素物體為運動目標上的。閾值操作后得到的結果直接將給出了目標的位置、大小、形狀等信息。綜合分析,這里采用減背景法。
運動目標檢測的視頻處理過程如圖1所示。
圖1運動目標檢測的處理過程
1.2 常用檢測方法的原理及實現方法
1.2.1 背景差法
背景差法⑵首先選取背景中的一幅或幾幅圖像的平均作為背景圖像,然后把以后的序列圖像當前幀和背景圖像相減,并進行背景消去操作。若所得到的像素數大于某一閾值,則判定被監(jiān)視場景中有運動物體,從而得到運動目標。這種差分法對于復雜背景下的運動物體檢測效果較好,一般能夠提供最完整的特征數據,而且計算量小,實用價值大。缺點是受光線、天氣等外界條件的影響較大。通常可以通過背景建模來進行背景模型的動態(tài)更新以實現背景圖像的建模和自適應更新,以減少場景變化對視頻圖像檢測分割的影響。
背景差法的實現原理和實現方法如下:設在To時刻保存一幀圖像做為背景圖像保存為backimage,然后循環(huán)從視頻中取一幀圖像,設T;時刻取一幀圖像保存為temp臨時圖像,將backimage和temp
相減即得到差值圖像difference,再對difference進行灰度變換、二值變換等處理,即可較好的分離出前景物體。也可以先將backimage和temp轉換成單通道灰度圖像再進行相減,這樣把兩幅度的灰度值相減,如果backimage和temp完全一樣,則相減的值為0,即為一幅全黑的圖像;而兩幅圖相減后不為0的區(qū)域即為前景物體所在區(qū)域。其差分公式如下:
difference(x,y)=temp(x,y)一backimage(x,y)
在OpenCV中實現差分該功能的函數是:
cvAbsDiff(backimage,temp,difference)
1.2.2 二值化
一幅圖像包括目標物體、背景還有噪聲,要想從多值的數字圖像中直接提取出目標物體,最常用的方法就是設定一個閾值T,用T將圖像的數據分成兩部分:大于T的像素群和小于T的像素群。這是研究灰度變換的最特殊的方法,稱為圖像的二值化。把圖像轉換為只有黑白兩種顏色的圖像,會便于圖像的后期分析與處理,也易于觀察。
二值圖像的獲取可以通過下面方法得到:
1.2.3 形態(tài)學濾波法
在實際處理過程中,由于傳感器本身的光學特性以及傳輸線路的影響,可能會在每一幀圖像中產生一定的噪聲,從而給目標檢測帶來困難。為提高目標檢測的有效性和正確性,有必要對Bi(x,y)圖像進行形態(tài)處理以消除噪聲。
其實現方法是對二值化后的圖像進行膨脹、腐蝕等形態(tài)學濾波,這可以在OpenCV中由函數Smooth()和DilateO及ErodeO實現,其中腐蝕Erode()和膨脹Dilate。對濾波的效果起主要作用。
1.2.4 背景建模方法
背景差法的原理很容易理解,但是,這樣的減背景很容易受光照等環(huán)境物體的影響,背景差法的研究主要集中在背景建模的研究上,即主要研究如何實現背景圖像的建模和自適應更新m,使背景能夠不斷接近理想狀態(tài),以期減少場景變化對視頻圖像檢測的影響。目前的背景建模E方法主要有時間差分法(temporaldifference),中值濾波法(average\medianfiltering),W4方法、混合高斯法(mixtureofGauss)、隱馬爾科夫模型(hiddenMarkovmodels,HMM)等。
本設計中采用運行期均值法來實現背景建模。運行期均值法(runningaverage)是中值濾波法的改進算法,其思想是通過引入學習率a來體現背景圖像對場景變化的響應。a越低,則前景的變化越不會影響背景,a一般取0.05左右,可以根據反復實驗調節(jié)a的大小,以找到最合適的a值。
設實時加權的圖像為movingAverage,則:
movingAverage(x,y)=(1—a)?movingAverage(x,y)+aimage(x,y)
上述公式中,右邊的movingAverage(x,y)和image(a:,y)均為前一時刻匸―i時背景圖像和當前圖像的灰度值,公式左邊的movingAverage(x,y)為當前時t1的背景圖像各像素的灰度值。用變換過后的movingAverage優(yōu)化temp,即可實現背景的建模,這樣可減少環(huán)境變化對背景差法的影響,提高背景差法的適應性。
1.3 分析目標物體
通過對視頻中運動車輛的提取,一般都可以得到提取的目標物體(即車輛),接下來就可以對系統(tǒng)進行車輛計數功能的設計。
算法中,通過函數cvFindContours()來實現在二值圖像中尋找輪廓,并用函數cvBoundingRect()獲得矩形框的數據。
可以通過對圖像中矩形框的數目的計算來對車輛的數目進行計數,但是該方法也存在以下幾個問題:
首先,對視頻的處理實際上是把視頻分成一幀一幀的圖像進行處理,單純的根據矩形框的數目進行車輛計數會造成車輛的重復計數,因為同一輛車會在幾幀甚至幾十幀圖像中出現;
其次是對停止車輛的處理,若車輛駛入畫面停了一段時間又繼續(xù)前進,那么,就必須要防止車輛的重復計數;
第三是車輛重疊問題,由于二值圖像的缺陷,重疊的車輛會被同一個矩形框圈出,從而造成車輛的少計數,因此,這里也需要通過算法對這個問題進行處理和解決。
在算法中,可循環(huán)對每一個圈出的矩形框進行處理。對一個矩形框,首先求取其中心點的值aryX,以及寬、高等基本數據。為了避免車輛的重復計數,可利用邊界進行計數,并定義兩個邊界變量closetoleft和closetoright0操作時可首先根據aryX的值判斷車輛是否處于邊界,若處于邊界且未完全進入畫面,則不斷更新邊界值,即令closetoleft(closetoright)=aryX,并根據上一幀圖像的邊界量closetoleft(closetoright)判斷車輛是否剛剛進入畫面。若剛剛進入畫面,則根據aryX和preX的比較來判斷車的行駛方向是進入還是出去,并對于剛進入的車輛進行計數,其余情況不計數,這樣就可以避免重復計數,這樣,即使車輛在畫面中停頓后又開始運動也不會重復計數。實現這一功能的算法流程圖如圖2所示。
在尋找輪廓過程中,由于二值圖像的缺陷會把重疊在一起的車輛算成是一個大的矩形框,因此,如果只在找到符合條件的矩形框后就令numcar自增1,則可能會造成車輛的誤測,會少計算重疊的車輛。這里可以利用算法解決,因為在實際路況中,車的大小是有限的,如果程序框出的矩形框面積過大,則大部分原因可能是車輛重疊造成的,所以,當矩形框面積過大時,通常認為是多輛車重疊的結果,設計時可以設定幾個門限面積值,然后根據矩形框面積的大小是否大于門限面積值來決定numcar自增幾次。門限面積值的設定可以通過反復的實驗來確定,一個最合適的值可使誤差達到最小。實現該功能的流程圖如圖3所示。
圖3車輛計數流程圖
當然也可以采用其他方法:可限定一個時間閾值T,檢測到某一目標車輛在背景中停滯時間過久或者活動太小以至于可以忽略,則可認為該地點發(fā)生了交通堵塞或者車禍事件,此時系統(tǒng)則應發(fā)出報警。
2 車輛檢測技術與程序實驗
本設計是基于OpenCV庫來進行的,可在Windowsxp及Visualc++6.0的環(huán)境下運行調試,本實驗所采用的視頻序列是分辨率為352X240的AVI格式的彩色視頻流,其處理速度為24幀/s。
2.1 背景的獲取和更新
現舉例說明,圖4所示為開始提取的背景,圖5為有一輛車駛過時的背景。比較圖4和圖5可以看到,雖然有車橫穿場景,但是背景并沒有任何變化,這樣,就可使用運行期均值法,在每一步都對背景進行更新和均值運算,從而避免誤差的累積,提高背景的適應性。
2.2 形態(tài)學濾波
一般情況下,在視頻中提取運動物體,不可避免地會產生噪聲,對圖像進行形態(tài)學濾波可以在一定程度上消除這種噪聲,提高目標檢測的有效性和正確性。圖6所示為形態(tài)學濾波處理前后,車輛的提取效果。實際上,若不進行形態(tài)學濾波,對運動物體的提取十分不準確,因而可能無法進行計數等后續(xù)處理。而形態(tài)學濾波后,則可以大大提高計算的準確性。
圖7所示為視頻中只有一輛車駛過的情況,實驗證明,若畫面中車輛一輛一輛地順序駛過而無重疊,其計算流量的準確度可達99%以上,但是,在實際路況中,這種情況發(fā)生的概率非常小。而圖8所示為有兩輛車重疊時的車輛計數,該情況下,本程序仍可以正確地計算出車輛的數目。
圖9中,車輛將要駛出邊界,這種情況下,程序仍然能將運動物體輪廓框出,但這個時候,矩形框的面積均與物體本身面積差距很大,如果此時仍然對矩形框進行計數,就會產生很大誤差,而本文的邊界計數法恰好可以避免這一誤判。
圖10所示是當一段視頻分析完成后輸出計數結果。由于程序采用了邊緣計數法,所以,對視頻監(jiān)控的角度有一定要求,視角最好與車輛呈90°,角度條件越好,準確度越高;反之,如果角度條件不好,則測試的準確率可能也會下降。
需要說明的是,本系統(tǒng)僅適用于白天,即日光條件下對車輛的計數。而對于夜晚車輛的計數,則可以采用數車燈的方式,對此,本文不做介紹。
3 結論
本文對基于視頻的車輛檢測技術算法的實現和實驗結果進行了介紹,通過分析邊界值,可以避免重復計算車輛??紤]到車輛重疊的情況,利用該算法進行處理,可以減少車輛計數中的各種誤判?;究梢詫崿F交通路口車輛計數功能。
該算法的優(yōu)點有:
(1)該算法能自動提取背景并自動更新背景;
(2)在角度合適條件下,計算車流量的準確度可達98%以上;
(3)實時性好,可同步處理視頻;
(4)對視頻噪聲有較強適應性;
(5)可以長時間無故障運行,并且操作簡單。
事實上,該算法也存在一定的問題,需要進一步的工作。
由于智能視頻監(jiān)控系統(tǒng)的實際應用環(huán)境比較復雜多樣,如何使智能視頻監(jiān)控系統(tǒng)實現快速、高準確性和高魯棒性的實時監(jiān)控,將是一個長期的研究課題,從目前來看,該算法還有很多問題需要進一步的深入探索。
無論如何,該設計基本完成了車輛的檢測與計數功能,但是系統(tǒng)的魯棒性不高,對視頻的角度有要求,而且角度對系統(tǒng)的準確度影響很大,此外,還有車輛重疊、車輛速度等因素影響系統(tǒng)的計數精度。為了提高該系統(tǒng)的準確度和魯棒性,解決系統(tǒng)存在的問題,本文特為今后的工作提出以下幾種設想:
(1)對于車輛重疊問題,從模式識別角度可以釆用升維的方法來分開重疊車輛,如從正面和側面兩個角度聯合對車輛進行檢測和計算,這樣可以使系統(tǒng)的魯棒性和準確度增加,但同時也會增加該程序的復雜度和成本。
(2)加入角度判據,可以預置攝像頭與汽車的角度,在對車輛的檢測中可通過角度的換算來增強系統(tǒng)的準確性,減小角度的限制,但這種方法適應性差,對本設計中釆用的矩形框計數法無法應用,而且對該角度重疊車輛仍然無法分離。
(3)不采用二值圖像,直接運用彩色圖像,通過車輛之間的色差區(qū)分車輛。如果色彩變化的邊緣頻譜密度大,還可利用一些圖像的特點分割目標物體。當然,也可以解決重疊車輛和角度問題,但是要充分考慮光照對色彩的影響。