高斯混合模型
高斯混合模型
高斯混合模型就是用高斯概率密度函數(正態分佈曲線)精確地量化事物,它是一個將事物分解為若干的基於高斯概率密度函數(正態分佈曲線)形成的模型。
高斯模型就是用高斯概率密度函數(正態分佈曲線)精確地量化事物,將一個事物分解為若干的基於高斯概率密度函數(正態分佈曲線)形成的模型。對圖像背景建立高斯模型的原理及過程:圖像灰度直方圖反映的是圖像中某個灰度值出現的頻次,也可以以為是圖像灰度概率密度的估計。如果圖像所包含的目標區域和背景區域相差比較大,且背景區域和目標區域在灰度上有一定的差異,那麼該圖像的灰度直方圖呈現雙峰-谷形狀,其中一個峰對應於目標,另一個峰對應於背景的中心灰度。對於複雜的圖像,尤其是醫學圖像,一般是多峰的。通過將直方圖的多峰特性看作是多個高斯分佈的疊加,可以解決圖像的分割問題。在智能監控系統中,對於運動目標的檢測是中心內容,而在運動目標檢測提取中,背景目標對於目標的識別和跟蹤至關重要。而建模正是背景目標提取的一個重要環節。
我們首先要提起背景和前景的概念,前景是指在假設背景為靜止的情況下,任何有意義的運動物體即為前景。建模的基本思想是從當前幀中提取前景,其目的是使背景更接近當前視頻幀的背景。即利用當前幀和視頻序列中的當前背景幀進行加權平均來更新背景,但是由於光照突變以及其他外界環境的影響,一般的建模后的背景並非十分乾淨清晰,而高斯混合模型(GMM,Gaussian mixture model)是建模最為成功的方法之一,同時GMM可以用在監控視頻索引與檢索。
混合高斯模型使用K(基本為3到5個)個高斯模型來表徵圖像中各個像素點的特徵,在新一幀圖像獲得后更新混合高斯模型,用當前圖像中的每個像素點與混合高斯模型匹配,如果成功則判定該點為背景點, 否則為前景點。通觀整個高斯模型,他主要是有方差和均值兩個參數決定,,對均值和方差的學習,採取不同的學習機制,將直接影響到模型的穩定性、精確性和收斂性。由於我們是對運動目標的背景提取建模,因此需要對高斯模型中方差和均值兩個參數實時更新。為提高模型的學習能力,改進方法對均值和方差的更新採用不同的學習率;為提高在繁忙的場景下,大而慢的運動目標的檢測效果,引入權值均值的概念,建立背景圖像並實時更新,然後結合權值、權值均值和背景圖像對像素點進行前景和背景的分類。具體更新公式如下:
μt= (1 - ρ)μt- 1 +ρxt (1)
σ2t = (1 - ρ)σ2t- 1 +ρ( xt -μt ) T ( xt -μt ) (2)
ρ =αη( xt | μκ,σκ ) (3)
| xt -μt - 1 | ≤ 2. 5σt- 1 (4)
w k , t = (1 - α) w k , t - 1 +αMk , t (5)
式中ρ為學習率,即反映當前圖像融入背景的速率。
建模過程中,我們需要對混合高斯模型中的方差、均值、權值等一些參數初始化,並通過這些參數求出建模所需的數據,如馬茲距離。在初始化過程中,一般我們將方差設置的盡量大些(如15),而權值則盡量小些(如0.001)。這樣設置是由於初始化的高斯模型是一個並不準確,可能的模型,我們需要不停的縮小他的範圍,更新他的參數值,從而得到最可能的高斯模型,將方差設置大些,就是為了將儘可能多的像素包含到一個模型裡面,從而獲得最有可能的模型。部分代碼如下:
for(i=0; i
{
// calculate the vector, v = (X - u)
for(j=0; j<3; j++)
v[j] = pixel[j] - model[i]->mean[j];
// calculate the squared distance, d = |v|^2
model[i]->dist2 = v[0]*v[0] + v[1]*v[1] + v[2]*v[2];
// zot: this is only equal to mahalanobis distance
// when covariance matrix = vI
// (v = scalar variance for all channels)
model[i]->mah2 = model[i]->dist2 / model[i]->var;
//即為馬茲距離
// see if X is close enough to this model
if (model[i]->mah2 < SFSquared)
break;
// the current pixel matches one of the K models
//SFSquared是預定義的值
}
同時這時又產生了一個疑問,那麼如何得知我們的模型是否超過預定義的模型數了呢?這便是我們設置權值的其中一個原因了。根據大量的試驗,我們得出當前面幾個模型數的權值之和在T值(一般設為0.75)之內時,效果最好,因此當我們將前面的模型權值相加,當超過0.75時便捨去後面的模型。當然其中還有一個重要的問題,我們是如何得知前面的模型是相對來說最有可能的模型,而非被捨去的模型呢?在這裡我們首先要對各個模型的權值進行排序,按照權值與方差的比率的從大到小,對模型進行排序。由於一開始建立的模型肯定是不可靠的,在最後基本會被捨棄,因此我們在初始化的時候將初始模型的方差盡量大,而權值盡量小,從而使最不可能的模型排在比較後面。到這裡為止,混合高斯模型的建模基本完成,我在歸納一下其中的流程,首先初始化預先定義的幾個高斯模型,對高斯模型中的參數進行初始化,並求出之後將要用到的參數。其次,對於每一幀中的每一個像素進行處理,看其是否匹配某個模型,若匹配,則將其歸入該模型中,並對該模型根據新的像素值進行更新,若不匹配,則以該像素建立一個高斯模型,初始化參數,代理原有模型中最不可能的模型。最後選擇前面幾個最有可能的模型作為背景模型,為背景目標提取做鋪墊。
目錄