实践方案
在实际情况中,很多背景都是不断变化的。在背景情况复杂或者变换较大的情形下,背景模型出现了多个峰值分布的情况,这时不能仅用只含一个峰值的单高斯分布模型来模拟背景,而需要采用多个单高斯分布模型的加权组合来模拟背景。需要说明的是,在大部分任务下,我们往往处理视频流数据,多张连续图片也可以认为是视频流,同样的,对于类似的数据,以下专业术语以视频流数据代指这类数据。
在 t t t 时刻,图像中的像素点 ( x 0 , y 0 ) (x_0, y_0) ( x 0 , y 0 ) 可以表示为:
{ X 1 , … , X t } = { I ( x 0 , y 0 , i ) : 1 ≤ i ≤ t } ( 1.19 ) \left\{ X^1, \ldots, X^t \right\} = \left\{ I(x_0, y_0, i) : 1 \le i \le t \right\} \qquad (1.19)
{ X 1 , … , X t } = { I ( x 0 , y 0 , i ) : 1 ≤ i ≤ t } ( 1.19 )
每个像素点在 t t t 时刻的像素值的概率密度函数用 K K K 个高斯分布表示为:
P ( X t ) = ∑ i = 1 K ω i t ⋅ η ( X t , μ i t , Σ i t ) ( 1.20 ) P(X^t) = \sum\limits_{i=1}^{K} \omega_i^t \cdot \eta(X^t, \mu_i^t, \Sigma_i^t) \qquad (1.20)
P ( X t ) = i = 1 ∑ K ω i t ⋅ η ( X t , μ i t , Σ i t ) ( 1.20 )
其中,ω i t \omega_i^t ω i t 表示 t t t 时刻第 i i i 个高斯分布的权值,即第 i i i 个高斯分布在所有高斯分布中所占的比重,取值范围为 0 ≤ ω i t ≤ 1 0 \le \omega_i^t \le 1 0 ≤ ω i t ≤ 1 ,并且有 ∑ i = 1 K ω i t = 1 \sum\limits_{i=1}^{K} \omega_i^t = 1 i = 1 ∑ K ω i t = 1 。μ i , t \mu_{i,t} μ i , t 表示 t t t 时刻第 i i i 个高斯分布的均值,Σ i t \Sigma_i^t Σ i t 表示 t t t 时刻第 i i i 个高斯分布的协方差矩阵。η ( X t , μ i t , Σ i t ) \eta(X^t, \mu_i^t, \Sigma_i^t) η ( X t , μ i t , Σ i t ) 表示 t t t 时刻第 i i i 个高斯分布的概率密度函数,其表达式为:
η ( X t , μ i t , Σ i t ) = 1 ( 2 π ) n / 2 ∣ Σ i t ∣ 1 / 2 exp [ − 1 2 ( X t − μ i t ) T ( Σ i t ) − 1 ( X t − μ i t ) ] ( 1.21 ) \eta(X^t, \mu_i^t, \Sigma_i^t) = \frac{1}{(2\pi)^{n/2} \left| \Sigma_i^t \right|^{1/2}} \exp\left[ -\frac{1}{2} (X^t - \mu_i^t)^T (\Sigma_i^t)^{-1} (X^t - \mu_i^t) \right] \qquad (1.21)
η ( X t , μ i t , Σ i t ) = ( 2 π ) n /2 ∣ Σ i t ∣ 1/2 1 exp [ − 2 1 ( X t − μ i t ) T ( Σ i t ) − 1 ( X t − μ i t ) ] ( 1.21 )
其中,i = 1 , 2 , … , K i = 1, 2, \ldots, K i = 1 , 2 , … , K 。一般情况下,X t X_t X t 为 n n n 维向量,且 n n n 取值不同分别表示处理的是彩色、灰度等不同类型的视频图像。一般情况下,为了运算简单,避免求逆时的大量运算,协方差矩阵可以表示为如下式:
Σ i t = ( σ 1 2 0 ⋯ 0 0 σ 2 2 ⋯ 0 ⋮ ⋮ ⋮ 0 0 ⋯ σ n 2 ) = ( σ i t ) 2 I ( 1.22 ) \Sigma_i^t =
\left(
\begin{aligned}
& \sigma_1^2 \ \ \ \ 0 \ \ \ \ \cdots \ \ \ 0 \\
& 0 \ \ \ \ \ \sigma_2^2 \ \ \ \cdots \ \ \ 0 \\
& \vdots \ \ \ \ \ \ \ \vdots \ \ \ \ \ \ \ \ \ \ \ \vdots \\
& 0 \ \ \ \ \ 0 \ \ \ \ \ \cdots \ \ \ \sigma_n^2 \\
\end{aligned}
\right)
= (\sigma_i^t)^2 I \qquad (1.22)
Σ i t = σ 1 2 0 ⋯ 0 0 σ 2 2 ⋯ 0 ⋮ ⋮ ⋮ 0 0 ⋯ σ n 2 = ( σ i t ) 2 I ( 1.22 )
假设处理的是灰度图像,则 n = 1 n = 1 n = 1 ,协方差矩阵退化为 Σ i t = ( σ i t ) 2 I = ( σ i t ) 2 \Sigma_i^t = (\sigma_i^t)^2 I = (\sigma_i^t)^2 Σ i t = ( σ i t ) 2 I = ( σ i t ) 2 ,所以概率密度函数可以表示为:
η ( X t , μ i t , Σ i t ) = 1 2 π ( σ i t ) 2 e − ( X t − μ i t ) 2 2 ( σ i t ) 2 ( 1.23 ) \eta(X^t, \mu_i^t, \Sigma_i^t) = \frac{1}{\sqrt{2\pi (\sigma_i^t)^2}} \, e^{- \frac{(X^t - \mu_i^t)^2}{2(\sigma_i^t)^2}} \qquad (1.23)
η ( X t , μ i t , Σ i t ) = 2 π ( σ i t ) 2 1 e − 2 ( σ i t ) 2 ( X t − μ i t ) 2 ( 1.23 )
1,初始化参数。初始化均值 μ 0 \mu_0 μ 0 和方差 σ 0 2 \sigma_0^2 σ 0 2 :
μ 0 = 1 N ∑ t = 1 N X t ( 1.24 ) \mu_0 = \frac{1}{N} \sum\limits_{t=1}^{N} X^t \qquad (1.24)
μ 0 = N 1 t = 1 ∑ N X t ( 1.24 )
σ 0 2 = 1 N ∑ t = 1 N ( X t − μ 0 ) 2 ( 1.25 ) \sigma_0^2 = \frac{1}{N} \sum\limits_{t=1}^{N} (X^t - \mu_0)^2 \qquad (1.25)
σ 0 2 = N 1 t = 1 ∑ N ( X t − μ 0 ) 2 ( 1.25 )
2,模型匹配。将 t + 1 t+1 t + 1 时刻当前图像中每一点的像素值分别与高斯混合模型中的 K K K 个高斯分布依次进行匹配,若满足如下公式,判断为背景,反之,判断为前景:
∣ X t + 1 − μ i t ∣ ≤ M σ i t ( 1.26 ) \left| X^{t+1} - \mu_i^t \right| \le M \sigma_i^t \qquad (1.26)
X t + 1 − μ i t ≤ M σ i t ( 1.26 )
M M M 为常数,取值范围通常为 2.5 ≤ M ≤ 3 2.5 \le M \le 3 2.5 ≤ M ≤ 3 。
在将每一个像素值与高斯混合模型匹配之前,先将 K K K 个高斯分布按照 e = ω i t σ i t e = \frac{\omega_i^t}{\sigma_i^t} e = σ i t ω i t 的值从高到低排序,ω i t \omega_i^t ω i t 越大,σ i t \sigma_i^t σ i t 越小,该高斯分布的权重越大,符合此高斯分布的像素点越多越集中,该高斯分布越可能为背景,否则该高斯分布可能为前景。在匹配过程中,按照 e e e 值从大到小依次匹配高斯混合模型中的高斯分布。另外,在匹配过程中,只对前 B B B 个高斯分布依次进行匹配,B B B 为混合高斯分布中所有权值求和的结果大于 T T T 的最小值,公式如下所示:
B = arg min i { ∑ i = 1 K ω i t > T } ( 1.27 ) B = \arg\min_i \left\{ \sum\limits_{i=1}^{K} \omega_i^t > T \right\} \qquad (1.27)
B = arg i min { i = 1 ∑ K ω i t > T } ( 1.27 )
其中,T T T 为设置的阈值。
3,更新参数。若像素点在步骤2匹配成功,相应的像素值为背景,认为该像素值是由第 i i i 个高斯分布产生的,则该高斯分布的权重 ω i t \omega_i^t ω i t 、均值 μ i t \mu_i^t μ i t 、方差 ( σ i t ) 2 (\sigma_i^t)^2 ( σ i t ) 2 进行更新:
ω i t + 1 = ( 1 − α ) ω i t + α ( 1.28 ) \omega_i^{t+1} = (1 - \alpha) \omega_i^t + \alpha \qquad (1.28)
ω i t + 1 = ( 1 − α ) ω i t + α ( 1.28 )
μ i t + 1 = ( 1 − ρ ) μ i t + ρ X t + 1 ( 1.29 ) \mu_i^{t+1} = (1 - \rho) \mu_i^t + \rho X^{t+1} \qquad (1.29)
μ i t + 1 = ( 1 − ρ ) μ i t + ρ X t + 1 ( 1.29 )
( σ i t + 1 ) 2 = ( 1 − ρ ) ( σ i t ) 2 + ρ ( X t + 1 − μ i t + 1 ) T ( X t + 1 − μ i t + 1 ) ( 1.30 ) (\sigma_i^{t+1})^2 = (1 - \rho) (\sigma_i^t)^2 + \rho (X^{t+1} - \mu_i^{t+1})^T (X^{t+1} - \mu_i^{t+1}) \qquad (1.30)
( σ i t + 1 ) 2 = ( 1 − ρ ) ( σ i t ) 2 + ρ ( X t + 1 − μ i t + 1 ) T ( X t + 1 − μ i t + 1 ) ( 1.30 )
ρ ≈ α ω i t + 1 ( 1.31 ) \rho \approx \frac{\alpha}{\omega_i^{t+1}} \qquad (1.31)
ρ ≈ ω i t + 1 α ( 1.31 )
其中,α \alpha α 表示高斯模型的更新速率,其值越大,模型更新速率越快,模型对环境的适应能力越强;否则,模型更新速率越慢,对环境适应能力越弱。一般情况下,α \alpha α 取值范围为 0 < α < 1 0 < \alpha < 1 0 < α < 1 ,大部分任务下,α \alpha α 为较小值。
若像素点在步骤2匹配失败,此时 ρ = 0 \rho = 0 ρ = 0 ,均值和方差不变,只更新权重和 e e e ,公式如下:
ω i t + 1 = ( 1 − α ) ω i t ( 1.32 ) \omega_i^{t+1} = (1 - \alpha) \omega_i^t \qquad (1.32)
ω i t + 1 = ( 1 − α ) ω i t ( 1.32 )
e = ω i t + 1 σ i t ( 1.33 ) e = \frac{\omega_i^{t+1}}{\sigma_i^t} \qquad (1.33)
e = σ i t ω i t + 1 ( 1.33 )
4,产生新的高斯分布。若在 t t t 时刻图像中像素值都能匹配到相应的高斯分布,计算出当前整张图像的像素均值,再选出一个较小的权重和一个较大的方差,利用这三个权重、均值、方差得到一个新的高斯分布,替换掉上面 e e e 值最小的高斯分布。
5,重复步骤 2~4,直到视频流数据处理完毕,记录步骤中匹配失败的像素,从而得到所有的前景目标结果。