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和平均背景法)
算法