原文地址:http://blog.csdn.net/u013989576/article/details/49077619
对智能视频监控来说,摄像机处于静止情况。假设视频图像中背景像素点的特征在一段时间内变化不大,则可以认为在这一段时间内,背景像素点服从高斯分布。但是在实际情况中,存在树枝晃动、水波等干扰,背景像素点会呈现出双峰或者多峰的现象,因此必须采用多个高斯分布的方式来描述背景像素点的特征,以降低干扰。
混合高斯模型的原理:
根据Stauffer和Grimson的假设,到第t时刻。像素点(x0,y0)的取值集合为 ,其中I为视频帧。若建立一个由K ( K一般取3~5)个高斯分布组成的高斯模型,来近似像素点的所有已出现值,便可得到图像当前像素值出现的概率,即混合高斯模型的概率密度函数:
(1)
其中,Xt是t时刻该点的像素值,是t时刻混合高斯模型中第 i个模型在 K个模型中所占的比重,它代表了由第 i个高斯分布产生的采样值在总采样值中的比例; 是第 i 个高斯分布的均值向量;表示第 i 个高斯分布的协方差矩阵;t时刻 i 个高斯分布的定义如下:
(2)
混合高斯背景建模算法的具体过程:
1、初始化
方法一:当读入第一帧图像后,先给每个位置建立一个高斯分布,均值为第一帧对应位置的像素值,方差取,此时权重取1。处理新的一帧图像时,如果新读入的像素值能与仅有的那个高斯分布相匹配,则仅更新那个高斯分布,否则以新读入的像素值为均值,(在opencv的实现中取256,在实际中取64也能得到不错的效果)为方差,为权重,建立一个新的高斯分布,然后进行权重归一化处理,如此进行,直到高斯分布的个数达到K为止。
方法二:当读入第一帧图像后,给每个位置建立K个高斯分布,均值为第一帧对应位置的像素值,方差为,权重为1/K。
2、更新算法
1)对于读入图像的每个像素,与它对应的K个高斯分布进行比较。
若满足:(D一般取2.5 ~ 3.5),则认为该像素点与高斯分布匹配,按如下公式更新参数(Mi,t = 1):
(3)
(4)
(5)
其中,表示学习速率,一般取0.001~0.01, ,表示参数更新速率
如果不匹配,则该高斯分布的均值、方差都不变,只需要按式(3)修改权重(Mi,t = 0)
对应位置的像素值,
上述过程之后,各高斯分布的权重进行归一化处理
2)按式(6)计算各个高斯分布的优先级,并按从大到小的顺序排序。
(6)
3) 选择B个高斯分布作为背景模型,参数T表示背景所占比例(T>0.7)。在前景检测时,如果当前像素与B个高斯分布中任意一个匹配,则认为该像素点属于背景,否则认为该像素点属于前景。
在实际检测时,第一帧图像往往存在着运动目标。如果模型更新不及时,这些运动目标就会被当成背景,那么在对后续帧进行处理时,这些运动目标所在的区域在一段较长的时间内会被判断为前景给提取出来,即产生“鬼影”。“鬼影”的存在会对整个模型的建立和更新,甚至是运动目标检测的效果产生影响。
为了加速“鬼影”的消除,可以设定帧数阈值T0,对前T0帧和后续帧学习速率采用不同的更新方法: