ViBe 背景提取算法原理

本文由原始文檔的部分章節翻譯得到:

ViBe: A universal background subtraction algorithm for video sequences

Olivier Barnich and Marc Van Croogenbroeck, Member, IEEE

聲明:本文並非全文翻譯,本人並未聯繫作者取得授權,如有侵權,會立即刪除。

III. ViBe 算法描述

背景提取算法至少必須妥善處理以下 3 個方面的問題才能得到理想的結果:

  1. 算法的像素點模型怎樣得到並且怎樣工作?
  2. 像素點模型怎樣初始化?
  3. 怎樣在工作過程中更新像素點模型?

前述 3 個問題的答案會在本章內容中說明。

大多數論文都研究了問題 1 和問題 3。只有少部分論文討論了問題 2,而問題 2 卻是解決數字攝像場景下快速響應的關鍵。

而且,在大多數情況下,像素點模型和更新策略缺少關聯性。比如,一些算法計算當前像素值值 p 和模型值 b 差值的絕對值,如果該值小於門限值 T 時認爲當前像素點爲背景。爲了適應時間變化,用 p 值的統計方差更新 T 值,但是該統計方差卻由時間域平均計算得到。於是,這種門限值 T 的調整速率完全由當前幀率和背景像素點數目決定,但是對於由網絡帶寬決定幀率的網絡攝像機而言,這種方式並不合適。

接下來描述的背景提取算法稱爲 ViBe (VIsual Background Extractor)。附錄 A 中 C 語言形式的僞代碼可以供讀者參考。

A. 像素模型及背景判定

目前幾乎所有的背景判定算法都是在給定色域空間,計算每個背景像素點的概率密度函數(pdf: probability density function)(或者給定像素點的統計學參數,比如均值或者方差),再由 pdf 進行計算完成判定。

對於高斯分佈而言,由於均值和方差完全足以決定 pdf,因此沒有任何區別。儘管主流的背景提取算法都是基於 pdf 或者統計參數,但是卻很少有對於此類統計顯著性的研究。

事實上,有效的背景提取計算並不一定必須使用 pdf。一種替代方案就是使用實際觀察得到的像素值構建像素點模型以達到,隨着時間增長而增大的統計顯著性。這種方案最基本的假設就是已經被觀察到的像素值再次出現的概率要大於未被觀察到的像素值。

不選擇 pdf 算法的原因在於:pdf 模型的偏差十分普遍,計算相當複雜,對異常值比較敏感,而且,pdf 的計算還涉及到統計樣本數目選取的問題。

如果我們把背景提取問題作爲一個分類問題看待,爲了排除異常值的干擾,我們可以根據一個新的像素點值在指定顏色空間的鄰近值來對該像素點進行分類。基於這種思想,我們選用一組採樣值的集合作爲背景像素點模型,而不是一個精確計算的模型。這種辦法與主流算法最大的區別就在於,不用計算 pdf,而且只需要將像素值與模型中的各採樣值進行比較即可。像素值會與集合中部分採樣值接近,而與大多數採樣值差異區大。這種方法的思想就是,少量數值相近的採樣值比單純大量的採樣值更容易估計出背景像素值的統計分佈。在某種意義上與 pdf 算法中排除 pdf 極值或者 pdf 區域截取是一樣的思想。爲了保證像素點模型的準確性,背景像素點採樣必須謹慎,只有真正的背景像素點才能加入到模型中去。

(譯者:以下的內容都是針對座標 x 的 1 個像素點的判斷,圖像中所有像素點都得進行相同的判斷計算,並使用獨立的像素點模型。)

假設 v(x)v(x) 爲圖像中座標爲 x 的像素點在當前色域中的數值,用 viv_{i} 表示序號爲 i 的背景採樣值。x 像素點的 N 個背景採樣值的集合表示爲M(x)={v1,v2,...,vN}M(x)=\{v_{1}, v_{2}, ..., v_{N}\}。N 個採樣值來源於之前的圖像幀。爲方便理解,我們暫時不考慮時間對採樣值集合的影響。

爲了對 v(x)v(x) 進行背景判斷,我們需要找到其與 M(x)M(x) 像素點模型中的最爲接近的採樣點。在當前色域中,以 v(x)v(x) 爲中心,R 爲半徑定義一個空間區域 SR((v(x))S_{R}\big((v(x)\big),將落入該區域的採樣點的數目稱爲基數(cardinality,用 # 表示)。如果基數大於等於指定的門限值 #min,則當前像素點被認爲是背景:
#{SR(v(x))M(x)}#min \#\{S_{R}\big(v(x)\big)\cap M(x)\}\geq \#min
根據上式,像素點的分類計算包括:v(x) 與 M(x) 中 N 個採樣點的距離計算,以及距離值與半徑 R 值的比較。

爲方便示意,假設當前色域分爲 2 個顏色通道(譯者:對於 RGB 色域的 3 個顏色通道,空間區域 SRS_{R} 會是一個圓球),下圖中採樣點 v2v_2v4v_4 包含於空間區域 SR((v(x))S_{R}\big((v(x)\big)

在這裏插入圖片描述

注意,分類的目標在於找到包含在空間區域 SR((v(x))S_{R}\big((v(x)\big) 範圍內的採樣點數目,如果數目已達到 #min,則可以停止計算 M(x) 中的其它採樣點。

很明顯,像素點模型的準確性由 2 個參數決定,半徑值 R,以及門限值 #min。經過實驗研究,較好的參數選擇是 R 值爲 20(單個顏色通道的灰度圖像),#min 值爲 2。在實際應用中即不需要對這 2 個參數進行自適應更新,也不需要根據不同的像素位置進行調整。

注意,由於 M(x) 集合內採樣點數目 N 和 #min 共同決定了分類標準,則當前像素點模型對當前像素值的敏感程序由比值 #minN\frac{\#min}{N} 決定,但是在所有的測試中該值保持固定。

在前文中,我們詳述了像素點模型的工作原理。在接下來的一節中,我們將說明使用單獨一幀圖像完成像素點模型的初始化,以及像素點模型隨時間的數值更新。

B. 單幀圖像初始化像素點模型

在本文參考資料中的許多流行的算法都需要數十幀數據進行模型初始化。從統計學的意義上來看,足夠多的數據才能保證統計得到足夠準確的背景像素點時間分佈規律。很多應用場景需要從較少的圖像幀中分割出前景圖像,或者在諸如突發亮度變化的情況下不受干擾地分割出前景,但是普通的模型建立辦法(譯者:原文爲 update,從上下文理解應當即包括 update 又包括 initialization)都無法保證這種需求。一種可行的辦法是找到一種可以根據亮度變化自動調節的像素點模型。但是這種專用的模型建立(譯者:原文爲 update)算法卻精細而脆弱,因爲突發的亮度變化會完全改變背景的顏色特徵。

一種更方便的解決辦法是在一幀之內完成像素點模型的初始化,突發的亮度變化會在一幀之內完成像素點模型的初始化,在下一幀就可以執行可靠的前景圖像分割。這樣的快速響應,對於視頻監控或者可能存在的後續的運動檢測算法相當有利。

由於單幀圖像內不包含時域信息,我們假設鄰近的像素點具有相似的時域分佈特性,這是我們將空域的鄰近像素點的數值存入像素點模型的依據。在單幀圖像內,我們隨機從鄰近像素點中選取 N 個像素值存入像素點模型。鄰近空間的大小需要保證能夠取得足夠多的不同數值,但是要注意鄰近空間範圍越大,模型內採樣點數值與當前像素點的關聯程度越低。在實驗中,我們發現對於分辨率 640×480640\times 480 的圖像,8 鄰域範圍的處理結果較爲理想。

假設 t = 0 表示第 1 幀圖像,NG(x)N_{G}(x) 表示座標爲 x 的像素點的空間鄰域範圍,座標 y 的像素點在鄰域範圍內按均勻分佈概率隨機選取:
M0(x)={v0(yyNG(x)} M^{0}(x)=\{v^{0}(y|y\in N_{G}(x)\}
注意,某個 v0(y)v^{0}(y) 值被多次選中或者從不被選中也是可能的,比如 M(x) 內採樣點數目 N 大於鄰域內像素點數目的情況。既然我們已經認爲鄰域範圍的像素值是最好的可能值,無論怎樣的選中次數都不會是一個問題。

這種作法經過實驗證明很成功,唯一的缺點就是在第 1 幀圖像內出現運動物體的情況下,將會產生鬼影(譯者:原文 ghost)。鬼影指的是一組連接的像素點被認爲是一個運動物體但是實際上並不存在。針對當前算法而言,鬼影的產生來源於模型初始化過程中對運動物體像素點的採樣,在之後的圖像幀中,這個運動物體移動原位,就露出了原本由其遮蓋的背景。這種鬼影會隨着像素點模型的更新而逐步消失。幸運的是,在後續的 IV 章 C 節,我們使用的模型更新算法即可以保證包含鬼影的模型的恢復,也可以將慢速運動的物體融入背景。

C. 隨時間更新像素點模型

本節將要說明怎樣在每一幀連續地更新像素點模型。模型更新是保證處理結果正確的關鍵,必須保證更新辦法可以適應亮度變化以及圖像中新出現的物體

模型更新辦法的基本討論

判斷像素點是否爲背景的分類辦法是由像素點在 t 時刻的數值 vt(x)v^{t}(x) 與 (t-1) 時刻的像素點模型 Mt1(x)M^{t-1}(x) 內的採樣值的比較得到。因此,模型更新的核心問題在於哪些採樣值保留在模型中,以及保留多長時間。

像素點模型中記錄的是背景的歷史信息。典型的更新辦法是在指定數目的幀或者固定時間(比如幾秒鐘)之後,丟棄最老的採樣值,並使用新採樣值替換。先不考慮這樣做的基本原理,單純從替換辦法來看,移除一個與背景像素值一致的老的採樣值肯定不合適。

是否在像素點模型中包含前景像素值,是使用採樣模型進行背景提取算法中需要解決的一個問題,否則模型將無法適應圖像變化。這個問題的解決辦法最終分爲 2 類,一種保守更新策略和一個盲選的更新策略。

注意,使用 pdf 的算法並不涉及這個問題,因爲算法本身可以通過對新採樣值分配更大的權重來更新 pdf 模型。

保守更新策略不會在像素點模型中加入前景像素點的採樣值,只有被認爲是背景像素點的採樣值纔可以放入模型中。這種方法初看的確是一個很容易想到的辦法,由於前景像素點不包含於模型中,這種辦法的確可以保證快速發現運動物體。但是,卻有可能產生死鎖以及永不消失的鬼影,因爲如果一個背景像素點(譯者:背景像素點將長時間保持)被錯誤的認爲是前景則會導致像素點模型持續不被更新,而且錯誤將會一直保持。而且不幸的是,很多實際場景都有可能產生這種情況。比如,如果某個汽車離開原本的停車位,則停車位露出的部分無法進入像素點模型,除非在更新過程中進行專門有針對性的處理。

盲選策略卻不容易引起前述的死鎖,因爲無論當前像素點是否屬於背景都有可能被更新寫入像素點模型中去。由於慢速運動物體可能被持續寫入像素點模型,這種策略將很難發現。一種可行的解決辦法是放大像素點模型中的採樣值數目,以覆蓋更長的時間範圍,但這種方法將產生更大的存儲和計算消耗。比如,對於先進先出的更新辦法而言,使用 300 個採樣值可以覆蓋 10 秒鐘時間(以 30 FPS 爲例),如果慢速運動物體(譯者:物體覆蓋多個像素點範圍)如果 10 秒內仍未離開該像素點位置,該物體仍會被認爲是背景。

嚴格說來,在背景被遮擋時模型無法包含背景的時域信息,而背景提取即需要時間域信息也需要空間域信息。爲了提升更新策略的效果,我們可以使用 [III 章 B 節](#B. 單幀圖像初始化像素點模型)的假設,即相鄰的像素點具有相似的時域分佈狀態。根據這種假設,最好採用加入空域信息的保守更新策略,類似去水印算法,使用周邊像素值代替當前位置的像素值。在 IV 章 C4 節中描述了一種簡單有效的提取空域信息的辦法,解決了保守更新策略的大多數問題。

本文的更新策略包含 3 個重要組成部分:

  1. 無記憶的更新策略:保證像素點模型中採樣值的平穩消失;
  2. 隨機的時域二次採樣:擴展模型覆蓋的時間範圍;
  3. 空域選點更新模型:一方面保證空域信息一致,另一方面解決前景覆蓋背景的情況。

接下來 3 個小節將進行詳述。

無記憶的更新策略

許多基於採樣模型的算法都使用先進先出的辦法更新模型內的採樣值。爲了應對長時間可能出現的圖像變化,需要在模型中加入大理的採樣值。但是如之前所述,這種辦法在高幀率情況下並不足以解決問題。另一些算法使用 2 個分別應對快速變化和慢速變化的二次採樣模型來解決問題,經實驗證明是有效的。但是,這種二次採樣的方法卻產生了大量參數計算和選擇的問題。

從理論的解度來看,對模型內的每個採樣值而言,更合理的更新採樣值的方式應當採樣值保留在模型中的概率隨時間而減小。像素點模型中應當保留最近的若干幀內的採樣值,但是更老的採樣值也不應當被直接捨棄。

我們提出一種採樣值保留在模型內的概率隨時間指數衰減的辦法。通過保留一部分老的採樣值,這種辦法提升了模型的時間關聯性。由於這種辦法繼承於保守更新策略,因此前景像素點決不會被加入像素點模型中。

在這裏插入圖片描述

如上圖所示,這種更新辦法簡單而有效,不是機械地移除最老的採樣值,而是隨機移除一個採樣值。

(譯者:此處隨機移除採樣值,對模型中的所有采樣值而言是相同概率。只是針對一次移除選擇,並不與前文所提及的概率隨時間衰減相違背。因爲越老的採樣值,參與移除選擇的次數更多,越有可能被選中而移除,從而其保留在模型中的概率,隨移除選擇次數的增加而衰減。)

之後使用新的採樣值替換移除的採樣值。這種隨機移除策略並不與保守更新策略相違背。保守更新策略同樣需要使用穩定的更新過程。實際上,這種隨機更新的辦法是一種非確定性的背景提取算法(原文:據我們所知,這是第一種)。只有保守更新策略才能保證模型不會隨時間產生偏差。除此以外,這種方法產生的結果每次運行都會有很難察覺的差別。

從數學原理上看,模型內的某個採樣值在 t 時刻更新後仍然保留在模型中的概率爲 N1N\frac{N-1}{N} (譯者:N 個採樣值中隨機移除 1 個,移出模型的概率爲 1N\frac{1}{N})。從連續時間域考慮,並且假定模型沒有記憶(譯者:只知道當前模型內的所有采樣值,不知道採樣值的採樣時刻),我們可以用以下公式表示某個採樣值保留在模型中的概率:
P(t,t+dt)=(N1N)(t+dt)t P(t, t+dt)=\Big(\frac{N-1}{N}\Big)^{(t+dt)-t}
或者表示爲
P(t,t+dt)=eln(NN1)dt P(t, t+dt)=e^{-ln(\frac{N}{N-1})dt}
假設在 t 時刻某採樣值仍保留在模型中,則上式表示採樣值在 (t, t+dt) 時間範圍內保留在模型中的概率隨時間指數衰減,並且概率與 t 值無關。換句話說,過去的時間對未來沒有影響,這就是所謂的無記憶。據我們瞭解,這種處理方式在背景提取算法中是獨特的存在。這完全不用考慮每個採樣值的存在時間,從而在某種程度上使算法可以適應任意幀率。

時域二次採樣

前文我們描述了怎樣用隨機替換的辦法使只有有限採樣值的像素點模型覆蓋大(理論上爲無限)的時間範圍。時域二次採樣辦法可以使時間範圍進一步擴大。其基本原理在於,在許多實際情況下,並不需要在每一幀圖像都更新像素點模型。爲了減小更新模型的頻率,我們人爲地放大模型內採樣值的保留時間。對於週期性或者僞週期性變化的背景而言,如果固定二次採樣的間隔時間可能會導致像素點模型無法適應這種背景變化。於是我們使用隨機的二次採樣策略,即如果某個像素點被認爲是背景,我們使用一個隨機的判斷過程決定此像素點是否用於更新像素點模型。

(譯者:對於二次採樣的理解,可能是像素值進入模型採樣集爲一次採樣,通過概率判斷是否進行一次採樣被稱爲二次採樣,subsampling)

在實驗中,我們引入一個時間二次採樣係數,用 ϕ\phi 表示,設置值爲 16,表示 1 個背景像素點有 16 分之 1 的概率被選中用於更新像素點模型。於是該係數值可以用於調節模型覆蓋時間範圍的大小。(譯者:數值越大,新背景值寫入模型的概率越低,則模型內已有采樣值所代表的時間更久遠)

用擴展的背景採樣保持空域一致性

由於我們使用保守更新策略,必須引入一種當前像素點處背景被前景遮擋情況下的處理。比較普遍的方法是使用一種名爲 detection support map (譯者:檢測支持映射?),這種方法統計當前像素點被持續判斷爲前景有次數。如果次數達到一個給定的門限值,該像素點值就被當成背景像素,寫入像素點模型;或者是用相連通的前景像素點判斷。還有的方法是使用名爲 SACON 的模型,即在圖像中即使用像素級(譯者:單個前景像素點)判斷又使用物體級(譯者:連通的前景像素點)判斷。

使用保守更新策略的優勢在於前景像素值決不會寫入由背景像素值組成的模型。儘管很方便,但是前述的 support map 類似的處理方法只是延緩了前景像素值寫入模型的時間,而且由於是二選一的判斷(譯者:寫入或者不寫入),一次由於時間達到門限而不得不寫入的真實的前景物體的像素值需要很長時間才能從模型中移除。相比較而言,前景像素值逐步寫入(譯者:不是在一個時間點一次性寫入)模型更爲合理。

我們認爲相鄰的背景像素點具有類似的時域分佈特徵,而且新的背景像素點也會用於更新其相鄰位置像素點的模型。基於這種假設,被前景遮蓋的背景像素點模型可以一直使用其鄰近的背景像素點進行更新。由於只使用背景像素點更新模型,這種處理方法產生了空域信息擴展的效果。於是這種像素點模型可以在使用保守更新策略的情況下,適應亮度變化以及圖像內的結構變化(增加或者移除圖像中的物體)。

NG(x)N_{G}(x) 表示座標 x 的像素點的 4 鄰域或者 8 鄰域的各像素點,並假設要將當前像素值 v(x)v(x) 寫入模型 M(x)M(x) 來進行模型更新,我們同樣使用 v(x)v(x) 更新一個隨機選擇的模型 M(yNG(x))M(y\in N_{G}(x)),對鄰域內各像素點選中的概率保持一致。

由於模型內有多個採樣值,寫入鄰域像素點模型的錯誤的採樣值並不會影響模型判斷的正確性。更確切地說,這種錯誤的採樣值影響由於其無法與已有的正確的觀察值匹配而無法在空間域和時間域傳播地更遠。這種限制減弱了空域信息擴展帶來的錯誤。

注意,無論是更新策略還是空域選點擴展都不是本算法的決定性因素。如前所述,如果多次對同一視頻進行多次計算,每次結果都會稍不同。儘管很少被採用,並且與當前已知算法完全不同,隨機選擇丟棄採樣值的方法仍然被證明十分有效。

至此,我們已完成 ViBe 算法的原理說明。由於該算法完全不用考慮視頻幀率、色域、視頻場景、背景本身及其變化,因此,我們認爲 ViBe 算法具有普適性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章