|
一、運(yùn)動(dòng)目標(biāo)檢測(cè)簡(jiǎn)介
視頻中的運(yùn)動(dòng)目標(biāo)檢測(cè)這一塊現(xiàn)在的方法實(shí)在是太多了。運(yùn)動(dòng)目標(biāo)檢測(cè)的算法依照目標(biāo)與攝像機(jī)之間的關(guān)系可以分為靜態(tài)背景下運(yùn)動(dòng)檢測(cè)和動(dòng)態(tài)背景下運(yùn)動(dòng)檢測(cè)。先簡(jiǎn)單從視頻中的背景類型來討論。 靜態(tài)背景下的目標(biāo)檢測(cè),就是從序列圖像中將實(shí)際的變化區(qū)域和背景區(qū)分開了。在背景靜止的大前提下進(jìn)行運(yùn)動(dòng)目標(biāo)檢測(cè)的方法有很多,這些方法比較側(cè)重于背景擾動(dòng)小噪聲的消除,如: 1.背景差分法 2.幀間差分法 3.光流法 4.混合高斯模型(GMM) 5.碼本(codebook) 還有這些方法的變種,例如三幀差分,五幀差分,或者這些方法的結(jié)合。 運(yùn)動(dòng)背景下的目標(biāo)檢測(cè),相對(duì)于靜態(tài)背景而言,算法的思路就有所區(qū)別了,一般會(huì)更加側(cè)重于匹配,需要進(jìn)行圖像的全局運(yùn)動(dòng)估計(jì)與補(bǔ)償。因?yàn)樵谀繕?biāo)和背景同時(shí)運(yùn)動(dòng)的情況下,是無法簡(jiǎn)單的根據(jù)運(yùn)動(dòng)來判斷的。運(yùn)動(dòng)背景下的運(yùn)動(dòng)目標(biāo)檢測(cè)算法也有很多,如 1.塊匹配 2.光流估計(jì) 這些方法總得來在不同的環(huán)境下說各有各自的特點(diǎn)吧,也不見得簡(jiǎn)單的算法就一定比復(fù)雜的要弱。有一些博客已經(jīng)對(duì)這些方法進(jìn)行了對(duì)比和評(píng)估,有興趣的同學(xué)可以參考這些
(摘自http://blog.csdn.net/zouxy09/article/details/9622401) 推薦一個(gè)牛逼的庫:http://code.google.com/p/bgslibrary/ 里面包含了各種背景減除的方法,可以讓自己少做很多力氣活。 還有一篇評(píng)估的博文http://www.cnblogs.com/xrwang/archive/2010/02/21/ForegroundDetection.html
二、GMM算法簡(jiǎn)介
不得不提的是其中的GMM算法(可以參考 Adaptive background mixture models for real-time tracking),這種算法在我平時(shí)要用到運(yùn)動(dòng)檢測(cè)的時(shí)候一般都會(huì)直接用,原因有兩個(gè),第一,效果確實(shí)不錯(cuò),噪聲可以很快消除,第二,opencv包含了GMM算法,可以直接調(diào)用,非常省事。
GMM簡(jiǎn)單講,將輸入圖像的像素與背景模型進(jìn)行對(duì)比,和背景模型相似性比較高的點(diǎn)視為背景,和背景模型相似性比較低的點(diǎn)視為前景,再利用形態(tài)學(xué)的方法進(jìn)行運(yùn)動(dòng)目標(biāo)提取。混合高斯模型是由K個(gè)(基本為3到5個(gè))單高斯模型加權(quán)組成的。在獲取新的一幀圖像之后,如果當(dāng)前圖像中的像素點(diǎn)與該像素的K個(gè)模型中的某一個(gè)匹配度比較高,則視為背景,并將當(dāng)前幀的像素作為一個(gè)新模型,更新已存在的K個(gè)模型。如果匹配度比較低,則為前景點(diǎn)。整個(gè)混合高斯模型算法主要是有方差和均值兩個(gè)參數(shù),對(duì)于這兩個(gè)參數(shù)采取不同的學(xué)習(xí)機(jī)制,直接影響該算法的正確性、穩(wěn)定性和收斂性。代碼網(wǎng)上到處都有,例如http://blog.csdn.net/pi9nc/article/details/21717669,需要的同學(xué)可以去看看。
三 、ViBe算法
不過,我今天介紹的主角并不是GMM,而是ViBe算法。在網(wǎng)上各處看到ViBe算法是個(gè)很牛逼的算法,據(jù)說還把GMM給PK下去了,所以我就拜讀了原文 ViBe: a powerful random technique to estimate the background in video sequences。 ViBe算法是由Olivier Barnich 和 Marc Van Droogenbroeck在2011年提出的一種背景建模方法。該算法采用鄰域像素來創(chuàng)建背景模型,通過比對(duì)背景模型和當(dāng)前輸入像素值來檢測(cè)前景,可以細(xì)分為三個(gè)步驟: 第一步,初始化單幀圖像中每個(gè)像素點(diǎn)的背景模型。假設(shè)每一個(gè)像素和其鄰域像素的像素值在空域上有相似的分布?;谶@種假設(shè),每一個(gè)像素模型都可以用其鄰域中的像素來表示。為了保證背景模型符合統(tǒng)計(jì)學(xué)規(guī)律,鄰域的范圍要足夠大。當(dāng)輸入第一幀圖像時(shí),即t=0時(shí),像素的背景模型
 
其中, 表示空域上相鄰的像素值, 表示當(dāng)前點(diǎn)的像素值。在N次的初始化的過程中, 中的像素點(diǎn) 被選中的可能次數(shù)為L(zhǎng)=1,2,3,…,N。
第二步,對(duì)后續(xù)的圖像序列進(jìn)行前景目標(biāo)分割操作。當(dāng)t=k時(shí),像素點(diǎn) 的背景模型為 ,像素值為 。按照下面判斷該像素值是否為前景。

這里上標(biāo)r是隨機(jī)選的;T是預(yù)先設(shè)置好的閾值。當(dāng) 滿足符合背景#N次時(shí),我們認(rèn)為像素點(diǎn) 為背景,否則為前景。
第三步,背景模型更新方法。ViBe算法的更新在時(shí)間和空間上都具有隨機(jī)性。 時(shí)間上的隨機(jī)性。在N個(gè)背景模型中隨機(jī)抽取一個(gè),設(shè)為圖像 ,圖2-1表示了圖像 的x位置及其八鄰域內(nèi)的像素。當(dāng)我們得到新的一幀圖像 時(shí),如果圖像 中的x位置對(duì)應(yīng)的像素 被判斷為背景,則 需要被更新。這個(gè)抽取的過程體現(xiàn)了時(shí)間上的隨機(jī)性。 空間上的隨機(jī)性。在 的八鄰域中隨機(jī)抽取一個(gè)像素 ,用 的來替換掉 ,這體現(xiàn)了模型更新空間上的隨機(jī)性。
以上便是更新的過程,即用 來更新 及其八鄰域。采用八鄰域更新的方法,可以去除由于獲取的視頻細(xì)微抖動(dòng)(攝像機(jī)抖動(dòng)、目標(biāo)微動(dòng))而產(chǎn)生的重影和誤差,讓檢測(cè)目標(biāo)更加準(zhǔn)確。

在一般情況下,背景并不會(huì)發(fā)生較大的變化,所以每次背景模型更新的個(gè)數(shù)UpdateNum應(yīng)該是相近的。因此我們把第一幀背景更新的次數(shù)InitNum作為比較值,符合下面公式則對(duì)背景模型進(jìn)行重新初始化,這樣可以避免由于大面積的光照變化導(dǎo)致的誤判。

視頻中的初始幀可能是包含目標(biāo)的,常規(guī)的背景建模算法往往無法快速消除Ghost區(qū)域,這對(duì)于前景檢測(cè)是不利的。Vibe算法更新模型時(shí)利用了該像素值的空間傳播特性,背景模型逐漸向外擴(kuò)散,這也有利于Ghost區(qū)域的更快的識(shí)別并且消除。下面以ViBe算法下的交通視頻前景檢測(cè)為例

如圖上圖所示為ViBe算法下前景檢測(cè)的效果,紅色矩形框表示了出現(xiàn)的比較顯著的Ghost區(qū)域。在第10幀之前,Ghost區(qū)域殘留嚴(yán)重,隨著模型的不斷更新,Ghost區(qū)域不斷消失在第40幀以后,Ghost區(qū)域已經(jīng)完全消失了。說明了Vibe算法在前景檢測(cè)和背景模型更新上的優(yōu)勢(shì)。
代碼地址:http://download.csdn.net/detail/zhuangxiaobin/7360113
|