OpenCV 背景建模之CodeBook 2

2022-03-18 04:40:23 字數 2638 閱讀 8793

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=cw=

其中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,若maxi(x,y), 更新min=i(x, y),若learnhighi(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混合高斯背景建模

本文主要內容是乙個混合高斯背景建模 1 的opencv例子。想要了解mog原理可以參考混合高斯背景建模原理及實現 opencv的mog例子 如下 include stdafx.h include include include include include include include incl...

OpenCV之背景減除

背景減除,官網是這樣介紹的。背景減法 bs 是通過使用靜態相機來生成前景蒙版 即,包含屬於場景中的運動物件的畫素的二進位制影象 的通用且廣泛使用的技術。顧名思義,bs計算前景蒙版,在當前幀和背景模型之間執行減法運算,其中包含場景的靜態部分,或者更一般而言,考慮到所觀察場景的特徵,可以視為背景的所有內...

背景建模 基於碼本背景建模

一 概述 二 碼本背景模型建立 本演算法採用量化的方法來構建背景模型,針對每乙個畫素點連續取樣值的顏色距離和亮度範圍為每個畫素點構建乙個碼本,根據取樣值的變化情況,每個碼本中碼字的個數不同。假設訓練序列中單個畫素的序列取樣值為 x 它其中的每乙個元素都是乙個rgb 向量。設c 為該畫素的碼本,碼本中...