閆 銘,孫麗君,陳天飛
(1.糧食信息處理與控制教育部重點(diǎn)實(shí)驗(yàn)室,河南 鄭州 450001;2.鄭州市機(jī)器感知與智能系統(tǒng)重點(diǎn)實(shí)驗(yàn)室,河南 鄭州 450001;3.河南工業(yè)大學(xué) 電氣工程學(xué)院,河南 鄭州 450001;4.河南工業(yè)大學(xué) 信息科學(xué)與工程學(xué)院,河南 鄭州 450001)
移動(dòng)目標(biāo)檢測(cè)是指從視頻序列中將背景分離出去,得到前景目標(biāo),從而為后續(xù)進(jìn)行跟蹤、識(shí)別等任務(wù)打下基礎(chǔ),被廣泛應(yīng)用于智能監(jiān)控、無(wú)人駕駛、航空航天、國(guó)防軍事等領(lǐng)域。按照處理對(duì)象的不同,移動(dòng)目標(biāo)檢測(cè)可分為基于前景的移動(dòng)目標(biāo)檢測(cè)和基于背景的移動(dòng)目標(biāo)檢測(cè)。
ViBe 算法是一種基于背景的移動(dòng)目標(biāo)檢測(cè)方法?;赩iBe 算法的移動(dòng)目標(biāo)檢測(cè)是由Barnich 等人在2009年提出。使用ViBe 算法進(jìn)行移動(dòng)目標(biāo)檢測(cè)實(shí)時(shí)性好、魯棒性強(qiáng);其核心是背景模型的構(gòu)建與更新,使用第一幀圖像建立初始背景模型,速度較快。ViBe 算法利用每個(gè)像素點(diǎn)及其周邊鄰域像素點(diǎn)的信息,建立像素點(diǎn)信息的隨機(jī)鄰域傳播更新機(jī)制,使得每個(gè)像素點(diǎn)的值在其鄰域內(nèi)平滑傳播,增強(qiáng)算法適應(yīng)場(chǎng)景變化的能力。在背景發(fā)生微小變化時(shí),檢測(cè)出的噪聲點(diǎn)較少。ViBe 算法在靜態(tài)背景和變化小的背景中有較好的檢測(cè)效果,檢測(cè)速度快,但也存在“鬼影”問(wèn)題。
針對(duì)ViBe 算法存在的“鬼影”問(wèn)題,目前有兩種改進(jìn)方法:第一種是對(duì)初始化方式進(jìn)行改進(jìn);第二種是先找出“鬼影”區(qū)域,再對(duì)“鬼影”進(jìn)行處理。第一種改進(jìn)方法有中位數(shù)法、平均法等。張欽禮等人利用視頻序列中前幀圖像像素點(diǎn)的中位數(shù)進(jìn)行初始化。馬永杰等人使用改進(jìn)多幀平均法獲得真實(shí)背景的方式進(jìn)行初始化。針對(duì)第二種處理方法,莫邵文等人結(jié)合背景模型的視覺(jué)顯著性特征,判斷每個(gè)像素點(diǎn)的鬼影程度,然后采取措施消除“鬼影”。吳爾杰等人將區(qū)域像素值的方差作為“鬼影”區(qū)域的判別依據(jù),然后對(duì)“鬼影”進(jìn)行處理。
針對(duì)ViBe 算法存在“鬼影”現(xiàn)象的問(wèn)題,本文采用第一種方法對(duì)基本ViBe 算法進(jìn)行改進(jìn)。在初始化時(shí),初始背景模型的建立方式變?yōu)閺囊曨l序列前4 幀每個(gè)像素點(diǎn)的24 鄰域隨機(jī)抽取5 個(gè)像素點(diǎn)。
ViBe 算法從第一幀圖像每個(gè)像素點(diǎn)的8 鄰域抽?。ㄒ话闳?0)次作為初始背景模型。像素點(diǎn)()的8 鄰域如圖1 所示。
圖1 v(x)的8 鄰域
用()表示當(dāng)前檢測(cè)像素點(diǎn),用(())表示()的背景模型,ViBe 算法背景模型定義為:
在前景判斷時(shí),計(jì)算出當(dāng)前檢測(cè)像素點(diǎn)與其背景模型中樣本點(diǎn)的歐氏距離dist,然后比較dist 與距離閾值的大小。如果dist 的值小于等于的值,則匹配個(gè)數(shù)加1;反之則對(duì)其背景模型進(jìn)行更新。如果匹配個(gè)數(shù)小于等于閾值,則將當(dāng)前檢測(cè)像素點(diǎn)設(shè)定為前景點(diǎn),不對(duì)其背景模型進(jìn)行更新。
ViBe 算法示意圖如圖2 所示。圖中:,為二維顏色空間(,)的分量;()表示當(dāng)前檢測(cè)像素點(diǎn);為距離閾值,一般取20。以當(dāng)前檢測(cè)像素點(diǎn)()為圓心,距離閾值為半徑,形成一個(gè)圓,圓內(nèi)的像素樣本點(diǎn)離()的距離較近,相差較小。圓內(nèi)像素點(diǎn)越多,則說(shuō)明當(dāng)前檢測(cè)像素點(diǎn)越接近背景,當(dāng)前檢測(cè)像素點(diǎn)就有更大可能為背景點(diǎn)。如圖2 所示,當(dāng)前檢測(cè)像素點(diǎn)()與其對(duì)應(yīng)的背景模型中的像素點(diǎn)的歐氏距離小于等于的有7 個(gè)像素樣本點(diǎn),大于匹配閾值2,那么可以判定當(dāng)前檢測(cè)像素點(diǎn)()為背景點(diǎn)。
圖2 ViBe 算法示意圖
ViBe 算法的流程分為模型初始化、前景判斷、模型更新等幾個(gè)步驟。
1)模型初始化
從第一幀圖像每個(gè)像素點(diǎn)的8 鄰域重復(fù)(一般取20)次,隨機(jī)地選擇像素點(diǎn)構(gòu)建背景模型。
2)前景判斷
初始化后進(jìn)行前景判斷,計(jì)算出當(dāng)前檢測(cè)像素點(diǎn)與其背景模型中樣本點(diǎn)的歐氏距離。假設(shè)當(dāng)前檢測(cè)像素點(diǎn)()的像素值為(()),其背景模型中樣本點(diǎn)為v,v的像素值為(v),像素點(diǎn)()匹配v的個(gè)數(shù)為。當(dāng)滿(mǎn)足式(2)時(shí),說(shuō)明背景模型中有一個(gè)像素樣本點(diǎn)與()匹配,匹配個(gè)數(shù)的值加1。
當(dāng)比較完當(dāng)前像素點(diǎn)對(duì)應(yīng)的背景模型中的每個(gè)像素樣本點(diǎn)后,若匹配個(gè)數(shù)滿(mǎn)足式(3),則判斷當(dāng)前檢測(cè)像素點(diǎn)為背景點(diǎn)。
式中,為當(dāng)前檢測(cè)像素點(diǎn)與背景模型中樣本像素點(diǎn)匹配個(gè)數(shù)的閾值,一般取2。
3)模型更新
ViBe 算法采用的是保守型更新方式。與此同時(shí),為了克服這種更新方式的缺點(diǎn),將當(dāng)前檢測(cè)像素點(diǎn)的信息擴(kuò)展到其鄰域空間。定義更新參數(shù)(一般取16),如果當(dāng)前檢測(cè)像素點(diǎn)與其背景模型相匹配時(shí),以1的概率用當(dāng)前檢測(cè)像素點(diǎn)隨機(jī)更新其背景模型和其8 鄰域中像素點(diǎn)的背景模型。通過(guò)這種方式可以恢復(fù)移動(dòng)目標(biāo)運(yùn)動(dòng)過(guò)的地方,獲得更加準(zhǔn)確的移動(dòng)目標(biāo)檢測(cè)結(jié)果。
ViBe 算法在多數(shù)背景下都具有較好的檢測(cè)效果,但也存在“鬼影”問(wèn)題。“鬼影”是由很多連接在一起的像素點(diǎn)組成,在移動(dòng)目標(biāo)檢測(cè)結(jié)果中顯示為前景點(diǎn),但實(shí)際上是背景點(diǎn)。產(chǎn)生“鬼影”現(xiàn)象的原因是初始化時(shí)使用的第一幀圖像中含有移動(dòng)目標(biāo),在之后檢測(cè)的過(guò)程中會(huì)出現(xiàn)本應(yīng)是背景點(diǎn)的地方,檢測(cè)出的卻是前景點(diǎn),這樣的錯(cuò)判點(diǎn)聚集在一起就形成了“鬼影”區(qū)域。ViBe 算法“鬼影”現(xiàn)象示意圖如圖3 所示。
圖3 ViBe 算法“鬼影”現(xiàn)象示意圖
如圖3 所示,圖3a)為視頻序列中的第一幀圖像,并且?guī)в幸苿?dòng)目標(biāo),用藍(lán)色五邊形來(lái)代表,黃色為背景區(qū)域;圖3b)為視頻序列中的第幀圖像,移動(dòng)目標(biāo)與第一幀圖像相比發(fā)生了運(yùn)動(dòng),在圖像中的位置發(fā)生了變化;圖3c)為使用基本ViBe 算法得到的第幀圖像的移動(dòng)目標(biāo)檢測(cè)結(jié)果,可看出移動(dòng)目標(biāo)的檢測(cè)結(jié)果出現(xiàn)了重疊,發(fā)生了明顯的“鬼影”現(xiàn)象。視頻序列中第幀圖像正確的移動(dòng)目標(biāo)檢測(cè)結(jié)果如圖3d)所示。
采用視頻序列第一幀圖像進(jìn)行初始化,如果第一幀中含有移動(dòng)目標(biāo),則在視頻序列之后的檢測(cè)結(jié)果中,會(huì)出現(xiàn)在本應(yīng)是背景點(diǎn)的地方檢測(cè)出的卻是前景點(diǎn),很多這樣的點(diǎn)聚集在一起,就形成了“鬼影”區(qū)域。
ViBe 算法有隨機(jī)鄰域傳播更新機(jī)制,可以實(shí)現(xiàn)消除“鬼影”。假設(shè)當(dāng)前檢測(cè)像素點(diǎn)()為背景點(diǎn),像素值為(()),()的背景模型為(()),()為從像素點(diǎn)()的鄰域中隨機(jī)選擇得到的像素點(diǎn),()的背景模型為(())。在進(jìn)行背景更新時(shí),(())要更新到(())和(())中。那么“鬼影”區(qū)域邊緣點(diǎn)的背景模型會(huì)被()更新?!肮碛啊眳^(qū)域邊緣的像素點(diǎn)與邊緣鄰域的像素點(diǎn)很接近,因此“鬼影”區(qū)域邊緣的像素點(diǎn)會(huì)逐漸成為背景點(diǎn)。隨著檢測(cè)的不斷進(jìn)行,“鬼影”區(qū)域會(huì)慢慢消失。雖然ViBe 算法可以通過(guò)更新背景模型來(lái)將“鬼影”消除,但消除的過(guò)程相對(duì)緩慢。在實(shí)際檢測(cè)當(dāng)中,“鬼影”區(qū)域會(huì)存在較長(zhǎng)時(shí)間,同時(shí)由于“鬼影”的存在,在后續(xù)圖像檢測(cè)中,如果有移動(dòng)目標(biāo)經(jīng)過(guò)該區(qū)域時(shí),將檢測(cè)不出移動(dòng)目標(biāo)。
抑制“鬼影”現(xiàn)象的方法分為兩種:一種是改變算法的初始化方式;另一種是發(fā)現(xiàn)“鬼影”后再進(jìn)行抑制。本文采用第一種方式改變算法的初始化方式?;綱iBe算法在初始化時(shí),從第一幀圖像像素點(diǎn)的8 鄰域隨機(jī)抽取次,那么()的8 鄰域中像素點(diǎn)被重復(fù)選中的概率較大。當(dāng)像素點(diǎn)的值差別較大時(shí),選中的像素樣本點(diǎn)可能集中在少數(shù)幾個(gè)像素樣本點(diǎn)中,容易導(dǎo)致錯(cuò)誤分類(lèi),造成誤檢。
為了減輕使用第一幀圖像進(jìn)行初始化時(shí)可能出現(xiàn)的移動(dòng)目標(biāo)所帶來(lái)的“鬼影”問(wèn)題的影響,本文提出的改進(jìn)ViBe 算法使用前4 幀圖像進(jìn)行初始化,從前4 幀每個(gè)圖像像素點(diǎn)的24 鄰域隨機(jī)抽取5 個(gè)像素樣本點(diǎn)。這樣可以擴(kuò)大抽取的范圍,像素點(diǎn)鄰域內(nèi)每個(gè)像素點(diǎn)被抽到的概率變小,避免了像素樣本點(diǎn)的重復(fù)選取,可以減輕移動(dòng)目標(biāo)存在于視頻序列第一幀的影響。像素點(diǎn)()的24 鄰域如圖4 所示。
圖4 v(x)的24 鄰域
當(dāng)像素點(diǎn)()位于圖像的左上角時(shí),不再取像素點(diǎn)()在24 鄰域中間時(shí)的鄰域樣本點(diǎn),像素點(diǎn)()的24 鄰 域 如 圖5 所 示。
圖5 v(x)處于圖像左上角
當(dāng)像素點(diǎn)()位于圖像的右上角時(shí),此時(shí)像素點(diǎn)()的24 鄰域如圖6 所示。當(dāng)像素點(diǎn)()位于圖像的左下角時(shí),此時(shí)像素點(diǎn)()的24 鄰域如圖7 所示。當(dāng)像素點(diǎn)()位于圖像的右下角時(shí),此時(shí)像素點(diǎn)()的24 鄰域如圖8 所示。
圖6 v(x)處于圖像右上角
圖7 v(x)處于圖像左下角
圖8 v(x)處于圖像右下角
與此同時(shí),本文吸收其他改進(jìn)ViBe 算法的做法,為被檢測(cè)為前景的像素點(diǎn)設(shè)置計(jì)數(shù)器。對(duì)于視頻序列中同一位置的像素點(diǎn),如果連續(xù)多次被認(rèn)為前景點(diǎn),那么這一位置的像素點(diǎn)為背景點(diǎn)的可能性較大。因此,若像素點(diǎn)被認(rèn)為是前景點(diǎn)時(shí),計(jì)數(shù)器的值就加1。當(dāng)計(jì)數(shù)器的值大于或等于閾值時(shí),則認(rèn)為像素點(diǎn)被誤判為前景點(diǎn),此時(shí)應(yīng)在檢測(cè)結(jié)果中將此像素點(diǎn)判定為背景點(diǎn)。同時(shí)以1的概率用當(dāng)前像素點(diǎn)更新其背景模型。用()代表檢測(cè)結(jié)果中的點(diǎn),其定義如下:
式中:NUM 為計(jì)數(shù)器的值;為閾值,的取值根據(jù)移動(dòng)目標(biāo)的大小和速度來(lái)確定。
改進(jìn)ViBe 算法的流程分為模型初始化、前景判斷、模型更新等幾個(gè)步驟。首先,輸入視頻序列,對(duì)視頻序列內(nèi)的圖像進(jìn)行灰度化。使用灰度化后的視頻序列的前4 幀進(jìn)行初始化。在前4 幀圖像每個(gè)像素點(diǎn)的24 鄰域隨機(jī)抽取5 個(gè)像素點(diǎn)。然后從視頻序列的第5 幀開(kāi)始進(jìn)行檢測(cè),判斷當(dāng)前檢測(cè)像素點(diǎn)與背景模型中的樣本點(diǎn)的歐氏距離是否小于等于。若距離大于,則驗(yàn)證背景模型中的下一個(gè)樣本點(diǎn),反之匹配個(gè)數(shù)加1。當(dāng)匹配個(gè)數(shù)大于等于閾值時(shí),更新當(dāng)前檢測(cè)像素點(diǎn)的背景模型。如果匹配個(gè)數(shù)小于閾值,則進(jìn)行前景描述。將計(jì)數(shù)器的值加1,按照式(4)進(jìn)行處理可得到移動(dòng)目標(biāo)檢測(cè)結(jié)果。改進(jìn)ViBe 算法流程如圖9 所示。
圖9 改進(jìn)ViBe 算法流程
為了檢驗(yàn)本文提出的改進(jìn)ViBe 算法的效果,需要使用CDW?2014 數(shù)據(jù)集中的highway 數(shù)據(jù)集、pedestrians數(shù)據(jù)集以及PETS2009 數(shù)據(jù)集中的Views_001 數(shù)據(jù)集。highway 數(shù)據(jù)集由1700 幀汽車(chē)圖像組成。pedestrians 數(shù)據(jù)集由1099 幀固定攝像機(jī)拍攝的行人行走圖像組成。Views_001 數(shù)據(jù)集由795 幀固定攝像機(jī)拍攝的行人行走圖像組成,行人行走的速度較快,視頻序列的第一幀圖像包含移動(dòng)目標(biāo)——行人。通過(guò)Matlab R2014a 實(shí)現(xiàn)基本ViBe 算法和本文提出的改進(jìn)ViBe 算法。在highway數(shù)據(jù)集、pedestrians 數(shù)據(jù)集和Views_001 數(shù)據(jù)集上進(jìn)行驗(yàn)證,使用基本ViBe 算法和本文提出的改進(jìn)ViBe 算法得到的移動(dòng)目標(biāo)檢測(cè)結(jié)果如圖10~圖12 所示。
圖10 在highway 數(shù)據(jù)集上的移動(dòng)目標(biāo)檢測(cè)結(jié)果
圖12 在Views_001 數(shù)據(jù)集上的移動(dòng)目標(biāo)檢測(cè)結(jié)果
由圖10 可知,圖10f)、圖10g)中發(fā)生了“鬼影”現(xiàn)象。這是因?yàn)閔ighway 數(shù)據(jù)集第一幀圖像存在待檢測(cè)的移動(dòng)目標(biāo)——汽車(chē)。從使用基本ViBe 算法在highway數(shù)據(jù)集第110 幀圖像的移動(dòng)目標(biāo)檢測(cè)結(jié)果可以看出,“鬼影”現(xiàn)象消失。從圖10i)~圖10l)可以看出,使用改進(jìn)ViBe 算法從highway 數(shù)據(jù)集第50 幀圖像的移動(dòng)目標(biāo)檢測(cè)結(jié)果開(kāi)始,“鬼影”現(xiàn)象消失。這說(shuō)明改進(jìn)ViBe 算法消除“鬼影”現(xiàn)象的速度比基本ViBe 算法快。
圖11e)~圖11h)為使用基本ViBe 算法得到的檢測(cè)結(jié)果,移動(dòng)目標(biāo)——行人被有效檢出。圖11i)~圖11l)為使用改進(jìn)ViBe 算法得到的檢測(cè)結(jié)果,移動(dòng)目標(biāo)——行人被有效檢測(cè)出,且得到的檢測(cè)結(jié)果中噪聲很少。
圖11 在pedestrians 數(shù)據(jù)集上的移動(dòng)目標(biāo)檢測(cè)結(jié)果
由圖12e)~圖12h)可以看出,使用ViBe 算法在前90 幀圖像的檢測(cè)結(jié)果中出現(xiàn)了“鬼影”現(xiàn)象,造成了錯(cuò)誤檢測(cè)。由于數(shù)據(jù)集第一幀圖像存在移動(dòng)目標(biāo),因此在第10 幀的檢測(cè)結(jié)果中,本應(yīng)檢測(cè)出3 個(gè)行人,但在圖12e)中檢測(cè)出6 個(gè)行人,出現(xiàn)3 個(gè)行人的“鬼影”。在第30幀的檢測(cè)結(jié)果中,本應(yīng)檢測(cè)出5個(gè)行人,但在圖12f)中檢測(cè)出6 個(gè)行人。有2 個(gè)行人的“鬼影”已經(jīng)消除,只剩下1 個(gè)行人的“鬼影”。在第60 幀圖像的檢測(cè)結(jié)果中,“鬼影”現(xiàn)象依然存在。直至檢測(cè)到第90 幀圖像時(shí),“鬼影”現(xiàn)象才完全消失。從圖12i)~圖12l)可以看出,改進(jìn)ViBe 算法可以有效地檢測(cè)出行人,檢測(cè)結(jié)果中的噪聲比基本ViBe 算法的檢測(cè)結(jié)果少。如圖12i)所示,從Views_001 數(shù)據(jù)集第10 幀圖像的移動(dòng)目標(biāo)檢測(cè)結(jié)果可以看出,應(yīng)檢出3 個(gè)行人,實(shí)際檢出3 個(gè)行人。后續(xù)檢測(cè)結(jié)果中沒(méi)有出現(xiàn)“鬼影”現(xiàn)象。這說(shuō)明改進(jìn)ViBe 算法消除“鬼影”現(xiàn)象的速度比基本ViBe 算法快。
根據(jù)以上實(shí)驗(yàn)結(jié)果可知,本文提出的改進(jìn)ViBe 算法在三個(gè)數(shù)據(jù)集上都有很好的效果,可以有效消除“鬼影”現(xiàn)象,且消除“鬼影”現(xiàn)象的速度比基本ViBe 算法更快,檢測(cè)效果得到改善。這說(shuō)明本文提出的改進(jìn)算法與基本的ViBe 算法相比,性能更好,魯棒性更好。
針對(duì)ViBe 算法存在“鬼影”現(xiàn)象的問(wèn)題,本文提出一種改進(jìn)方法。初始化時(shí),背景模型的構(gòu)建方式從在第一幀圖像每個(gè)像素點(diǎn)的8 鄰域抽取20 次,變?yōu)閺那? 幀每個(gè)像素點(diǎn)的24 鄰域隨機(jī)抽取5 個(gè)像素點(diǎn)。在highway數(shù)據(jù)集、pedestrians 數(shù)據(jù)集和Views_001 數(shù)據(jù)集上對(duì)本文提出的改進(jìn)ViBe 算法進(jìn)行驗(yàn)證。移動(dòng)目標(biāo)檢測(cè)結(jié)果表明,本文提出的改進(jìn)ViBe 算法與基本ViBe 算法相比,能夠加快“鬼影”現(xiàn)象的消除,檢測(cè)效果更好。下一步將在其他復(fù)雜場(chǎng)景中對(duì)本文提出的改進(jìn)ViBe 算法進(jìn)行驗(yàn)證和優(yōu)化。