实践方案

在实际情况中,很多背景都是不断变化的。在背景情况复杂或者变换较大的情形下,背景模型出现了多个峰值分布的情况,这时不能仅用只含一个峰值的单高斯分布模型来模拟背景,而需要采用多个单高斯分布模型的加权组合来模拟背景。需要说明的是,在大部分任务下,我们往往处理视频流数据,多张连续图片也可以认为是视频流,同样的,对于类似的数据,以下专业术语以视频流数据代指这类数据。

tt 时刻,图像中的像素点 (x0,y0)(x_0, y_0) 可以表示为:

{X1,,Xt}={I(x0,y0,i):1it}(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)

每个像素点在 tt 时刻的像素值的概率密度函数用 KK 个高斯分布表示为:

P(Xt)=i=1Kωitη(Xt,μit,Σit)(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)

其中,ωit\omega_i^t 表示 tt 时刻第 ii 个高斯分布的权值,即第 ii 个高斯分布在所有高斯分布中所占的比重,取值范围为 0ωit10 \le \omega_i^t \le 1,并且有 i=1Kωit=1\sum\limits_{i=1}^{K} \omega_i^t = 1μi,t\mu_{i,t} 表示 tt 时刻第 ii高斯分布的均值,Σit\Sigma_i^t 表示 tt 时刻第 ii 个高斯分布的协方差矩阵。η(Xt,μit,Σit)\eta(X^t, \mu_i^t, \Sigma_i^t) 表示 tt 时刻第 ii高斯分布的概率密度函数,其表达式为:

η(Xt,μit,Σit)=1(2π)n/2Σit1/2exp[12(Xtμit)T(Σit)1(Xtμit)](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)

其中,i=1,2,,Ki = 1, 2, \ldots, K。一般情况下,XtX_tnn 维向量,且 nn 取值不同分别表示处理的是彩色、灰度等不同类型的视频图像。一般情况下,为了运算简单,避免求逆时的大量运算,协方差矩阵可以表示为如下式:

Σit=(σ12    0       00     σ22      0                  0     0        σn2)=(σit)2I(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)

假设处理的是灰度图像,则 n=1n = 1,协方差矩阵退化为 Σit=(σit)2I=(σit)2\Sigma_i^t = (\sigma_i^t)^2 I = (\sigma_i^t)^2,所以概率密度函数可以表示为:

η(Xt,μit,Σit)=12π(σit)2e(Xtμit)22(σit)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)

1,初始化参数。初始化均值 μ0\mu_0 和方差 σ02\sigma_0^2

μ0=1Nt=1NXt(1.24)\mu_0 = \frac{1}{N} \sum\limits_{t=1}^{N} X^t \qquad (1.24)

σ02=1Nt=1N(Xtμ0)2(1.25)\sigma_0^2 = \frac{1}{N} \sum\limits_{t=1}^{N} (X^t - \mu_0)^2 \qquad (1.25)

2,模型匹配。将 t+1t+1 时刻当前图像中每一点的像素值分别与高斯混合模型中的 KK 个高斯分布依次进行匹配,若满足如下公式,判断为背景,反之,判断为前景:

Xt+1μitMσit(1.26)\left| X^{t+1} - \mu_i^t \right| \le M \sigma_i^t \qquad (1.26)

MM 为常数,取值范围通常为 2.5M32.5 \le M \le 3

在将每一个像素值与高斯混合模型匹配之前,先将 KK 个高斯分布按照 e=ωitσite = \frac{\omega_i^t}{\sigma_i^t} 的值从高到低排序,ωit\omega_i^t 越大,σit\sigma_i^t 越小,该高斯分布的权重越大,符合此高斯分布的像素点越多越集中,该高斯分布越可能为背景,否则该高斯分布可能为前景。在匹配过程中,按照 ee 值从大到小依次匹配高斯混合模型中的高斯分布。另外,在匹配过程中,只对前 BB 个高斯分布依次进行匹配,BB 为混合高斯分布中所有权值求和的结果大于 TT 的最小值,公式如下所示:

B=argmini{i=1Kωit>T}(1.27)B = \arg\min_i \left\{ \sum\limits_{i=1}^{K} \omega_i^t > T \right\} \qquad (1.27)

其中,TT 为设置的阈值。

3,更新参数。若像素点在步骤2匹配成功,相应的像素值为背景,认为该像素值是由第 ii 个高斯分布产生的,则该高斯分布的权重 ωit\omega_i^t均值 μit\mu_i^t、方差 (σit)2(\sigma_i^t)^2 进行更新:

ωit+1=(1α)ωit+α(1.28)\omega_i^{t+1} = (1 - \alpha) \omega_i^t + \alpha \qquad (1.28)

μit+1=(1ρ)μit+ρXt+1(1.29)\mu_i^{t+1} = (1 - \rho) \mu_i^t + \rho X^{t+1} \qquad (1.29)

(σit+1)2=(1ρ)(σit)2+ρ(Xt+1μit+1)T(Xt+1μit+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)

ραωit+1(1.31)\rho \approx \frac{\alpha}{\omega_i^{t+1}} \qquad (1.31)

其中,α\alpha 表示高斯模型的更新速率,其值越大,模型更新速率越快,模型对环境的适应能力越强;否则,模型更新速率越慢,对环境适应能力越弱。一般情况下,α\alpha 取值范围为 0<α<10 < \alpha < 1,大部分任务下,α\alpha 为较小值。

若像素点在步骤2匹配失败,此时 ρ=0\rho = 0,均值和方差不变,只更新权重和 ee,公式如下:

ωit+1=(1α)ωit(1.32)\omega_i^{t+1} = (1 - \alpha) \omega_i^t \qquad (1.32)

e=ωit+1σit(1.33)e = \frac{\omega_i^{t+1}}{\sigma_i^t} \qquad (1.33)

4,产生新的高斯分布。若在 tt 时刻图像中像素值都能匹配到相应的高斯分布,计算出当前整张图像的像素均值,再选出一个较小的权重和一个较大的方差,利用这三个权重、均值、方差得到一个新的高斯分布,替换掉上面 ee 值最小的高斯分布。

5,重复步骤 2~4,直到视频流数据处理完毕,记录步骤中匹配失败的像素,从而得到所有的前景目标结果。