1,CodeBook的來源
先考慮平均背景的建模方法。該方法是針對每一個像素,累積若干幀的像素值,然后計算平均值和方差,以此來建立背景模型,相當於模型的每一個像素含有兩個特征值,這兩個特征值只是單純的統計量,沒有記錄該像素值的歷史起伏,即沒有考慮時間序列和噪聲干擾,不具備魯棒性,因此建模時不能有運動前景的部分,要求光線保持不變。
如果我們考慮到時間起伏序列建模,比如利用60幀圖像建模,對於每一個像素點會產生60個像素值,分別給他們加上60個相關的權值,或者進一步統計不同像素值出現的頻次或者距離,以此來排除噪聲,這樣能夠模擬復雜的背景,但是會帶來巨大的內存消耗。
如果我們對該像素值起伏的動態范圍進行壓縮,壓縮的依據是像素值之間的大小距離,即當前觀測值與歷史的記錄值對比,如果兩個值接近,就歸為一類,也就是隸屬同一個碼元(CodeWord),如果差別過大,就以當前觀測值新建一個碼元,因為背景的變化情況遠小於前景,所以壓縮之后我們就得到了只含有若個碼元的一個編碼本(CodeBook),這個編碼本不僅能夠模擬復雜背景,同時大大減少內存消耗。此外,對每個碼元的更新頻率進行監督,剔除那些頻率低的(誤跑進來的動態前景),不僅排除了噪聲,同時也允許有移動前景的背景當做學習資料。這便是CodeBook的核心思想。
2,CodeBook的實現
CodeBook執行前景分割主要分為三個過程,即背景建模、清除陳舊碼元、前景分割,分別對應如下三個函數updateCodeBook(), clearStaleEntries(), backgroudDiff()。
2.1 結構及主要參數
CodeBook算法為當前圖像的每一個像素建立一個CodeBook(CB)結構,每個CodeBook結構又由多個碼元CodeWord(CW)組成。
CB和CW的形式如下:
CB={CW1,CW2,…CWn,t}
CW={learnHigh[],learnLow[],max[],min[],t_last_updata,stale}
其中n為一個CB中所包含的CW的數目,當n太小時,退化為簡單背景,當n較大時可以對復雜背景進行建模。CW是一個6元組結構,在整個算法流程中,主要包括以下參數:
maxMod[]:用訓練好的背景模型進行前景分割時的調節量,判斷點是否小於max[] + maxMod[]);
minMod[]:用訓練好的背景模型進行前景分割時的調節量,判斷點是否小於min[] -minMod[]);
cbBounds[]:訓練背景模型時用到,相當於控制模型的增長速率,更新learnHigh[]和learnLow[]。
learnHigh[]:背景的學習上界限,當新像素進來時判斷其是否屬於該碼元;
learnLow[]:背景的學習下界限,當新像素進來時判斷其是否屬於該碼元;
max[]: 背景學習中不斷更新,記錄當前碼元的最大值,在前景分割時,與MaxMod[]配合,判斷像素是前景還是背景;
min[]: 背景學習中不斷更新,記錄當前碼元的最小值,在前景分割時,與MinMod[]配合,判斷像素是前景還是背景;
此外,為了剔除陳舊碼元,給每個CB和CW都加入了若干時間標簽,比如CB的t,記錄CB更新的次數,CW的t_last_updata和stale,t_last_updata記錄了該CW上次更新的時間,stale記錄了CW的擱淺時間,stale=t-l_last_updata。
2.2 背景建模
遍歷每一個像素,假設針對某個像素I(x,y),遍歷其對應的CodeBook的每一個碼元,分通道檢測learnHighI(x,y)learnLow?如果滿足條件,則更新該碼元的t_last_updata,若max<I(x,y),更新max=I(x,y), 若min>I(x,y), 更新min=I(x, y),若learnHigh<I(x,y)+cbBounds,緩慢增加學習上限learnHigh+1, 若learnLow>I(x,y)-cbBounds,降低學習下線learnLow-1。
如果不滿足條件,則創建一個新的碼元,learnHign=I(x,y)+cbBounds,learnLow=I(x,y)-cbBounds, max=min=I(x,y)。
更新所有的時間標簽。
2.3 清除陳舊碼元
背景建模一段時間后,需要定期清除陳舊碼元,針對每一個CodeBook,根據經驗將其時間t的一半當做閾值,遍歷所有碼元,將與之對應的時間標簽stale與閾值比較,大於閾值的則刪除,閾值之內的保留,同時更新時間標簽。
2.4,前景分割
前景分割也就是利用訓練好的CodeBook進行運動檢測,遍歷該像素對應的CodeBook的所有碼元,如果其中一個碼元滿足當前像素I(x,y)min-minMod且I(x,y)max+maxMod,則判斷該像素屬於背景,如果一個條件不滿足,則屬於前景。
3,CodeBook的優缺點以及改進
優點:
室內室外都能工作很好,能夠適應小范圍周期性運動的背景(經典例子,風中搖曳的樹)以及燈光緩慢變化或者有規律的變化,訓練過程不需要完全干凈無前景的背景,適應有前景目標移動的背景建模。
不足:
如果背景發生全局變化,比如打開或者關閉燈,不同時候的陽光,這個時候密碼本會失效。解決方法:針對可能出現的全局背景,訓練不同背景下的CodeBook,並自動檢測背景環境進行模型切換。
背景局部發生變化,背景與前景都是相對而言,比如背景里進入一輛汽車,汽車停止不再移動,變成背景的一部分,CodeBook並不能判斷這一類情形。解決方法:多層CodeBook建模,一層永久背景模型,一層緩存背景模型,如果部分前景在混存背景模型存在時間足夠長,則移入永久背景模型進行檢測。
此外,我們比較的特征都是基於像素值這一最原始的特征,可以提取一些加工過的特征比如Gaussian/LBP來建立CodeBook.
4,參考資料
《學習OpenCV》;
百度百科——codebook;
Tornadomeet博客——前景檢測算法_1(codebook和平均背景法)