ViBe算法:ViBe - a powerful technique for background detection and subtraction in video sequenceshtml
算法官網:http://www2.ulg.ac.be/telecom/research/vibe/linux
描述:c++
ViBe是一種像素級視頻背景建模或前景檢測的算法,效果優於所熟知的幾種算法,對硬件內存佔用也少。web
Code:算法
算法執行效率測試程序,windows和linux操做系統下的程序和c/c++文件均可以在做者官網下載,以下:windows
Windows and Linux users: a benchmarking program to evaluate the time needed by ViBe on your platform and on your own sequences! Download an archive zip archive [15 MB] to evaluate the time needed by ViBe on your platform (Windows or Linux [Wine]), and on your own sequences. A program for Windows and Linux. Download an archive zip archive [16 MB] to use ViBe on Windows (or under Wine in Linux).
The program allows you to: (1) save the result for your own images, (2) change the few parameters of ViBe to experiment with, and (3) reproduce our results. Linux: link a C/C++ object file to your own code. We provide the object (compiled) code of ViBe for non-commercial applications. Under Linux, download the32 bits zip file, or the 64 bits zip file. Details on this page.app
固然,在使用ViBe算法時應該遵循算法官網的License。less
算法的主要優點:dom
內存佔用少,一個像素須要做一次比較,佔用一個字節的內存;jsp
無參數法;
可直接應用在產品中,軟硬件兼容性好;
性能優於混合高斯,參數化方法,SACON等;
像素級算法,視頻處理中的預處理關鍵步驟;
背景模型及時初始化;
具備較好的抗噪能力。
參考文獻:
背景差方法實現運動物體檢測面臨的挑戰主要有:必須適應環境的變化(好比光照的變化形成圖像色度的變化); 相機抖動引發畫面的抖動(好比手持相機拍照時候的移動);圖像中密集出現的物體(好比樹葉或樹幹等密集出現的物體,要正確的檢測出來);必須可以正確的檢測出背景物體的改變(好比新停下的車必須及時的歸爲背景物體,而有靜止開始移動的物體也須要及時的檢測出來)。物體檢測中每每會出現Ghost區域,Ghost區域也就是指當一個本來靜止的物體開始運動,背靜差檢測算法可能會將原來該物體所覆蓋的區域錯誤的檢測爲運動的,這塊區域就成爲Ghost,固然原來運動的物體變爲靜止的也會引入Ghost區域,Ghost區域在檢測中必須被儘快的消除。一個Ghost區域的實例如圖Fig.1,在圖中能夠發現相比於原圖,檢測的結果中錯誤的多出現了兩我的的形狀,這就是Ghost。
Fig 1
ViBe算法詳解:
ViBe檢測方法
ViBe是本篇論文中所提出的一個檢測方法,相比於其餘方法它有不少的不一樣和優勢。具體的思想就是爲每一個像素點存儲了一個樣本集,樣本集中採樣值就是該像素點過去的像素值和其鄰居點的像素值,而後將每個新的像素值和樣本集進行比較來判斷是否屬於背景點。該模型主要包括三個方面:模型的工做原理;模型的初始化方法;模型的更新策略。
模型的工做原理
背景物體就是指靜止的或是很是緩慢的移動的物體,而前景物體就對應移動的物體。因此咱們能夠把物體檢測看出一個分類問題,也就是來肯定一個像素點是否屬於背景點。在ViBe模型中,背景模型爲每一個背景點存儲了一個樣本集,而後將每個新的像素值和樣本集進行比較來判斷是否屬於背景點。能夠知道若是一個新的觀察值屬於背景點那麼它應該和樣本集中的採樣值比較接近。
具體的講,咱們記v(x):x點處的像素值;M(x)={V1,V2,…VN}爲x處的背景樣本集(樣本集大小爲N);SR(v(x)):以x爲中心R爲半徑的區域,若是M(x) [{SR(v(x))∩ {v1,v2, . . . , vN}}]大於一個給定的閾值#min,那麼就認爲x點屬於背景點。
模型的初始化方法
初始化就是創建背景模型的過程。通用的檢測算法的初始化須要必定長度的視頻序列來完成,一般要耗費數秒的時間,這極大的影戲的檢測的實時性,對於手持相機實時拍照來說並不合適。ViBe的初始化僅僅經過一幀圖像便可完成。ViBe初始化就是填充像素的樣本集的過程可是因爲在一幀圖像中不可能包含像素點的時空分佈信息,咱們利用了相近像素點擁有相近的時空分佈特性,具體來說就是:對於一個像素點,隨機的選擇它的鄰居點的像素值做爲它的模型樣本值。M0(x) = {v0(y | y ∈NG(x))},t=0初始時刻,NG(x)即爲鄰居點 。這種初始化方法優勢是對於噪聲的反應比較靈敏,計算量小速度快,能夠很快的進行運動物體的檢測,缺點是容易引入Ghost區域。
模型的更新策略
背景模型的更新就是使得背景模型可以適應背景的不斷變化,好比光照的變化,背景物體的變動等等。保守的更新策略:前景點永遠不會被用來填充背景模型,會引發死鎖,好比初始化的時候若是一塊靜止的區域被錯誤的檢測爲運動的,那麼在這種策略下它永遠會被當作運動的物體來對待;Blind策略:對死鎖不敏感,前景背景均可以來更新背景模型,缺點是緩慢移動的物體會融入背景中沒法被檢測出來。在本方法中採用的更新策略是保守的更新策略+前景點計數方法。前景點計數:對像素點進行統計,若是某個像素點連續N次被檢測爲前景,則將其更新爲背景點。
隨機的子採樣:在每個新的視頻幀中都去更新背景模型中的每個像素點的樣本值是沒有必要的,當一個像素點被分類爲背景點時,它有1/ φ的機率去更新背景模型。
具體的更新方法:每個背景點有1/ φ的機率去更新本身的模型樣本值,同時也有1/ φ的機率去更新它的鄰居點的模型樣本值。更新鄰居的樣本值利用了像素值的空間傳播特性,背景模型逐漸向外擴 散,這也有利於Ghost區域的更快的識別。同時當前景點計數達到臨界值時將其變爲背景,並有1/ φ的機率去更新本身的模型樣本值。
在選擇要替換的樣本集中的樣本值時候,咱們是隨機選取一個樣本值進行更新,這樣能夠保證樣本值的平滑的生命週期因爲是隨機的更新,這樣一個樣本值在時刻t不被更新的機率是 (N-1)/N,假設時間是連續的,那麼在dt的時間過去後,樣本值仍然保留的機率是
也能夠寫做,
這就代表一個樣本值在模型中是否被替換與時間t無關 ,隨機策略是合適的。
ViBe實驗結果
在實驗中,咱們和其餘的一些檢測算法在檢測準確率和算法的計算量方面都進行了比較,實驗代表咱們的方法檢測效果明顯要好不少,對於光照的變化和相機抖動等的效果都十分穩定,並且計算量很是小,內存佔用較少,這就使得該方法可以用於嵌入手持照相機中。一些具體的實驗效果和數據以下
Fig.2檢測效果對比
Fig.3相機的移動
Fig.4 Ghost區域消融,圖中的光亮的地板
Fig.5檢測正確率 Fig.6算法處理速度
總結
在這片文章中,咱們提出了一個新的背靜差算法-ViBe,和之前相比它具備三個不一樣點。首先,咱們提出了一個新的分類模型。其次,咱們介紹了ViBe如何初始化,它只須要一幀圖像便可完成初始化,而其餘的算法一般須要等待數秒去完成初始化,這對於嵌入照相機中的要求實時性比較高的和一些比較短的視頻序列頗有幫助。 最後,咱們提出了本身的更新策略,相比於其餘算法將樣本值在模型中保存一個固定的時間,咱們採用隨機的替換更新樣本值,通過證實這樣能夠保證樣本值的一個指數衰減的平滑生命週期,而且可使得背景模型很好的適應視頻場景的變化,從而達到更好的檢測效果。
經過一系列實驗代表ViBe方法相比於其餘的一些檢測算法具備計算量小、內存佔用少、處理速度快、檢測效果好、有更快的Ghost區域消融速度和應對噪聲穩定可靠的特色,而且很是適合嵌入照相機等要求計算量小和內存佔用少的情境中。
效果圖:
對應的Code下載地址:
http://pan.baidu.com/share/link?shareid=409860&uk=3373051938