吉愛萍, 陳未如, 楊 碩
(沈陽化工大學 計算機科學與技術學院, 遼寧 沈陽 110142)
運動目標檢測廣泛應用于公共安全、智能交通、智能視頻處理等領域,是視頻和圖像處理領域的重要研究方向.運動目標檢測是整個視頻監控系統中非常關鍵的一步,準確實時地提取出目標是后續目標跟蹤以及行為理解等處理的基礎.目前,已有的運動目標檢測方法大致可以分為3類:幀間差分法[1-2]、背景差分法[3-5]和光流法[6].幀間差分法主要利用視頻圖像序列中連續的2幀或3幀的差異來檢測運動區域,算法簡單易于實現,能在動態背景條件下完成運動目標檢測.但是幀差法檢測出的目標不完整,只能檢測出目標的邊界,同時,對于運動過快和過慢的物體需要掌握好合適的時間間隔.背景差分法分割出運動目標是通過對輸入圖像與背景圖像進行比較,相對于幀差法背景差分法可以較完整地提取出運動目標,但是消耗內存大,適用范圍受限,而且對光照和外部條件造成的動態場景變化過于敏感.其研究重點主要是建立背景模型與更新背景模型,混合高斯模型(GMM)[7]和ViBe算法是最具代表性的.高斯混合模型基本思想是利用統計值來表示背景,從而建立背景模型.高斯模型能夠實時地更新背景信息,有效地克服背景擾動、攝像機抖動等產生的噪聲.但是高斯混合模型計算量大,并且在光照較強的環境下檢測效果不是很好,不能處理陰影問題,無法精確處理運動緩慢的物體.光流場是包含兩個分量的速度矢量場,光流法通過建立光流方程來確定運動像素的矢量狀態,對其進行提取和跟蹤.光流法的優點是可以適用于背景變化較快以及攝像機發生運動等復雜的場景中.但是該算法復雜度高,實時檢測時對硬件要求也較高,并且難以適應光照等情況.
ViBe算法[8-9]是一種像素級視頻背景建模或前景檢測的算法,由Oliver Barnich等學者在2009年提出,實時性好、適應性高、魯棒性強,相比較于所熟知的幾種算法ViBe算法在不同環境下的檢測效果比較好,硬件內存占用少,思想簡單易于實現,適用于多種復雜場景.但算法也存在一些問題,例如鬼影、運動目標變為靜止、檢測目標不完整和陰影問題等.當運動目標從靜止到運動或者當背景模型的初始幀存在著運動目標時就會出現鬼影.鬼影是ViBe算法中存在的一個難點問題,如何快速有效消除鬼影是智能視覺監控系統中需要解決的實際問題.
一些研究者對鬼影問題也提出了改進,文獻[10]增加了鬼影抑制模塊,通過Otsu算法計算出最適合當前幀的分割閾值,除了傳統ViBe算法外再對前景像素點進行二次判別,該方法能夠很好地適應前景目標運動變化較大的情況,更好地抑制了鬼影同時保持較高較穩定的檢測率.文獻[11]通過擴大樣本的取值范圍來避免樣本的重復選取,用隔行更新的方式更新鄰域,避免了錯誤分類擴散;為了去除噪聲的影響,用小目標丟棄和空洞填充策略;通過添加陰影去除模塊,加強了對鬼影的抑制.文獻[12]通過將顏色信息與ViBe相結合,在RGB空間將像素點轉換到HSV顏色空間對顏色進行失真度比較,建立雙模型以減少計算量.文獻[13]采用比較局部區域背景模型和新來幀兩者像素值方差大小來判斷該區域存在的是鬼影還是靜止目標,然后采用不同的策略對鬼影和靜止目標的背景區域進行更新.對于普通場景和背景較為復雜的場景,文章改進算法均有效.文獻[14]通過用ViBe改進算法和模板匹配法對多行人場景進行了目標檢測,結合了原ViBe算法與幀間差分法使二值圖像中的鬼影消除速度加快.文獻[15]通過探測法和重新初始化鬼影區域來加速鬼影的消除,但是對于對陰影問題以及原本靜止的物體突然運動而產生的鬼影不能夠完全消除.綜上,本文提出了基于局部更改背景模型更新概率的改進ViBe算法,更加快速地消除了鬼影,同時也加快了運動目標靜止后融入到背景當中的速率.
在ViBe背景模型中,每個背景點都存儲了一個樣本集,然后通過比較新的像素值和樣本集來判斷是否屬于背景點.若新的觀察值屬于背景點,那么這個新的觀察值與樣本集中采樣值比較接近.記P(x)為x點處的像素值,N(x)={p1,p2,p3,…,pN}為x處的背景樣本集(樣本大小為N),SR(P(x))表示以x為中心R為半徑的區域,如果N(x)[{SR(P(x))∩{P1,P2,…,PN}}]大于一個給定的閾值#min,那么即可認為x點屬于背景.
該模型主要包括初始化背景模型、檢測前景目標和更新背景模型3個步驟.
第1步:初始化背景模型
一般的運動目標檢測算法在初始化背景模型時由一定長度的視頻序列完成,而ViBe算法主要利用單幀視頻序列就能完成背景模型的初始化.ViBe為每一個像素都建立一個容量為N的背景模型,記為N={p1,p2,p3,…,pN},如圖1所示.初始化時隨機選擇視頻的第1幀中當前像素的8鄰域的任意一點像素值存儲到當前像素點的背景模型當中,得到pi.此操作重復n次后就得到了初始的背景模型N.

圖1 ViBe背景模型Fig.1 ViBe background model
第2步:前景目標檢測
從第2幀開始,標記當前像素點x的像素值為P(x),R為閾值,計算{P(x)-R,P(x)+R}區間與x的背景模型相交的樣本集個數:
#{{P(x)-R,P(x)+R}∩N(x)}
(1)
若相交樣本集個數大于等于#min,則判斷當前像素點為背景,否則為前景值.
第3步:更新背景模型
ViBe采用無記憶更新策略,并且前景像素值永不會被充當背景模型.當一個像素點被判斷為背景點時就要對此點和它的鄰域進行背景模型更新.從N幀背景模型中隨機選擇一幀t(x),用新一幀中被判斷為背景點的像素值更新t(x)中對應的點,然后再用此像素值隨機更新t(x)8鄰域任一點像素值,完成背景模型的更新.
ViBe算法思想簡單易于實現,運算效率高,是一種非參數背景建模算法,具有良好的實時性和適應性.但其算法本身也存在局限性,鬼影和靜止目標就是兩個比較典型的問題.
1.2.1 鬼影
ViBe的初始化非常迅速,一般從第一幀開始初始化背景模型,如果第一幀當中含有運動目標,那么ViBe算法將會錯誤的將運動目標當做背景像素進行建模,不但會檢測到運動目標還會在目標的原始位置檢測到一個虛假的運動區域,即鬼影.或者當長時間靜止的物體開始運動時背景模型的更新速率比較慢,也會出現鬼影.
1.2.2 靜止目標問題
如果運動目標長時間沒有運動就會被背景逐漸吸收,這就是靜止目標區域.目前,有兩種情況可以產生靜止目標:(1)物體從運動狀態變為靜止狀態,此時ViBe背景模型在更新過程中會將靜止目標逐漸吸收融入背景中去;(2)當物體運動十分緩慢時,ViBe算法也會錯誤的將其當成靜止目標逐漸融入進背景中去.
在原始ViBe算法中,鬼影是隨著背景模型的更新才慢慢消除掉的,這需要很長一段時間.另外當運動目標突然靜止時,ViBe算法會在長時間內將該目標判斷為運動目標,需要經過很多幀后才能融合進背景中, 這樣不但降低了運動目標檢測的實時性也增加了后續的運算量.本文在原始ViBe檢測算法的基礎上稍作改進,快速地抑制了鬼影并且加快了運動目標靜止后融入到背景中的速度.
考慮到鬼影的存在以及原始ViBe算法在消除鬼影方面速率較慢等原因,依據鬼影的性質對原始算法進行改進,加快了鬼影的消除速度,解決了運動目標靜止過程中融入背景緩慢的問題.
在原始的ViBe檢測算法中,鬼影是被誤判為前景的背景像素點.首先對當前像素進行采樣,每個像素點保存10~15個采樣值,然后對當前像素點與采樣集進行匹配,如果這個匹配值大于所給定的閾值(一般為3),則判斷此像素點為背景點,否則為前景點.當這個匹配值滿足一定的概率之后,則更新背景像素.若當前像素點已經被判斷是背景像素,根據相鄰像素點空間一致性原則,其周圍鄰域像素與當前像素值相差不多,也可能為背景,那么當前像素則會傳播到其鄰域中去.根據這個原理,本文在原始算法上做出了一些改進.原始算法在處理當前幀中的像素時,通常是按照一定的規則由左至右、由上到下進行掃描,這樣增加了計算量,減慢了檢測速度.本文只需要檢測靜止運動目標的邊緣像素,如果其邊緣像素值前后兩幀未發生明顯變化,那么此像素點為鬼影的可能性很大,則將其背景模型更新概率加大幾倍,使其自適應地更新背景模型.
鬼影是被誤判的前景像素點,在同一時刻,相鄰像素點的像素值相差不大.在原始ViBe檢測算法中,被誤判的前景像素點需要達到一定幀數之后才能被發現為鬼影,然后再經過一定幀數后才能被消除,這樣大大減慢了檢測效率.本文從被分割出來的前景像素邊緣入手,將前后兩幀的邊緣像素值做與運算,如果結果一致,那么加大背景的更新速率,達到快速消除鬼影的目的,具體過程如圖2所示.
首先根據原始ViBe檢測算法對運動目標進行檢測,分割出前景運動目標.此時,計算分割圖像的邊緣gseg,用gNow表示當前幀,gPre表示上一幀,為使gNow和gPre始終相差一幀,將gNow 復制給gPre,然后對分割圖像的邊緣求像素及與運算.如果gNow與gPre不一致,那么則判斷當前幀邊緣像素為前景目標,如果gNow與gPre一致,那么很可能這個邊緣像素為偽前景目標,此時加大背景模型的更新概率為pheiFast,這樣加大更新概率就能快速地消除鬼影.具體過程為:
(1) 輸入視頻序列S={S1,S2,S3,…,Sn};
(2) 初始化背景建模,N={v1,v2,v3,…,vN},N=20;
(3) 用原始ViBe檢測算法對當前幀Si進行運動目標檢提取:
#{{v(x)-R,v(x)+R}∩M(x)}
(2)
v(x)為當前點像素值,R為閾值,其值為15,#為{v(x)-R,v(x)+R}區間與x的背景模型相交的樣本集個數,若#>min則判斷v(x)為背景,否則為前景,此時min=4.
(4) 標記靜止目標邊緣Gi,對邊緣圖像當前幀與前一幀做像素級與運算:
(3)
(5) 如果判斷為背景圖像,則與運動目標以及靜止目標非邊緣區域一樣采用原始更新策略pheiSlow更新,此時phei=16,pheiSlow=Phei*6;判斷為偽運動目標的區域則加大更新概率pheiFast進行更新,pheiFast=Phei/4.
(6) 重復步驟 (2)~(5),直至所有的偽運動目標區域被消除,終止循環并返回計算結果.

圖2 改進算法流程Fig.2 The flow diagram of improved algorithm
實驗環境為配置opencv2.3.1的visual studio2010,運行在聯想YangTianA6000k-00上,內存4.0 GB,處理器為Intel core i3 3.40 GHz.視頻由Dell vostro1405 USB攝像頭拍攝,幀速率為24幀/s,分辨率為640×480.
本文一共進行4組實驗,分別是戶外條件下鬼影消除和運動目標突然靜止,以及室內環境下本文改進ViBe算法對上述兩種情況的處理.經過實驗發現,改進ViBe算法效果十分明顯,鬼影處理速度明顯大于原始ViBe算法,對于突然靜止的運動目標也能很快地融入到背景中去.
圖3所示為戶外車輛自然運動的真實場景,由于ViBe算法用第一幀作為初始幀初始化背景模型,此時一輛行駛的車輛出現在背景模型中,故第18幀時可以清楚地看見檢測結果中出現了鬼影.改進ViBe算法在83幀時鬼影基本已經被消除,而原始ViBe算法則在第479幀才將鬼影消除完畢,由實驗對比結果可知改進ViBe算法確實比原始ViBe算法更加快速有效地消除了鬼影.
圖4為戶外條件下偽前景像素數量隨時間逐漸減少的情況.改進ViBe算法的下降速度遠快于原始ViBe算法,并在83幀時偽前景幾乎消失干凈,偽前景像素的持續時間為83幀;而原始ViBe算法直到479幀時才消失干凈,持續時間大概為本文算法的6倍.
圖5展示的是在戶外條件下原始ViBe算法與改進ViBe算法當中靜止目標像素數量隨時間變化的情況:改進ViBe算法在第962幀時鬼影(白點)已經基本消失干凈,其存在時間為285幀,而原始ViBe算法直到第1933幀才將靜止目標融入到背景中去.改進ViBe算法在戶外消除靜止目標方面比原始ViBe算法快了近4.4倍.
在運動目標檢測過程中,如果運動物體突然靜止,而背景模型更新速率較慢,就會在前景目標中出現靜止的目標.如圖6所示,第497幀時運動的車輛駛入畫面,在第677幀時靜止不動,此時原始ViBe算法處理下的前景目標包含了未融入背景中去的靜止車輛.在第962幀時改進ViBe算法基本已經將靜止目標融入進背景中,而原始ViBe算法則需要在第1939幀時才將靜止車輛融入進去.
為了說明改進ViBe算法的性能,將原始ViBe算法與改進ViBe算法抑制鬼影的速度進行比較,結果如表1所示,在戶外條件下,原始ViBe算法對鬼影的抑制以及靜止目標的消除均較改進ViBe算法速度慢.

圖3 戶外鬼影抑制對比Fig.3 Comparison of outdoor ghost detection

圖4 戶外鬼影像素數量對比Fig.4 Comparison of outdoor ghost number

圖5 戶外靜止目標數量對比Fig.5 Comparison of outdoor static object detection

圖6 戶外消除靜止目標對比實驗結果Fig.6 Comparison of outdoor static object detection

表1 戶外算法消除鬼影(靜止目標)速度Table 1 Outdoor algorithm eliminating ghost (stationary target) speed s/幀
在室內環境下,本文的改進ViBe算法對鬼影的抑制效果也比較明顯,如圖7所示.
在第一幀是人物靜止,在第105幀時起身開始向對面走去,此時鬼影產生.改進ViBe算法在第182幀時基本消除了鬼影,而原始ViBe算法在第422幀時才將鬼影消除完畢.由此可見,在室內人工環境下改進ViBe算法對于鬼影的抑制也是比較快速和有效的.
如圖8所示,改進ViBe算法在室內環境下鬼影像素數量下降的速度要遠快于原始ViBe算法.
改進ViBe算法在第182時鬼影已經消除干凈,而此時原始算法鬼影數量還剩余將近5.8×103個.

圖7 室內鬼影抑制對比Fig.7 Comparison of indoor ghost detection

圖8 室內鬼影像素數量對比Fig.8 Comparison of indoor ghost number
室內靜止目標對比實驗結果如圖9所示.室內環境下第108幀開始人物開始推著椅子向對面運動,在第324幀時放下椅子獨自離開,此時椅子為靜止目標.通過實驗可以清楚地看見在第499幀時,通過改進ViBe算法,靜止目標基本消除完畢,而原始ViBe算法要在第960幀時才將靜止目標消除完畢.
改進ViBe算法與原始ViBe算法在室內消除靜止目標的速度對比如圖10所示.改進ViBe算法在499幀時靜止目標已經完全融入到背景中,而原始ViBe算法則要在960幀時才消除完畢.相比之下,改進ViBe算法較原始ViBe算法快了4倍.

圖9 室內消除靜止目標對比實驗結果Fig.9 Comparison of indoor static object detection

圖10 室內靜止目標數量對比Fig.10 Comparison of indoor static object detection
室內環境下原始ViBe算法和改進ViBe算法對鬼影和靜止目標抑制對比速度如表2所示.

表2 室內算法消除鬼影(靜止目標)速度Table 2 Indoor algorithm eliminating ghost (stationary target) speed s/幀
相比較于其他運動目標檢測算法而言,ViBe算法簡單高效并且魯棒性強,但是如何快速有效地消除鬼影和靜止目標一直都是ViBe檢測算法中的難點,很多學者就這兩種問題進行了研究與改進.本文提出的改進辦法是通過檢測分割圖像的邊緣像素來判斷其是否為偽運動目標,然后通過加大更新概率來對其進行消除,經過實驗驗證本文的改進ViBe算法能夠快速有效地消除鬼影并且對于運動中的物體突然靜止也能很快地融入到背景中去.由于本文只考慮邊緣所以對噪點的抑制也比較好.相比較于其他改進的ViBe算法而言,本文的改進ViBe算法簡單且高效,但是對于運動緩慢的物體,本文的改進ViBe算法對其檢測效果不是很明顯,緩慢運動的目標作為ViBe檢測算法中的難點,還有待于日后研究.本文改進的ViBe算法提高了運動目標檢測的時效性,為后續的目標跟蹤、識別、行為理解等打下了堅實的基礎.