背景减法利用图像序列中的当前帧和事先确定的背景参考模型间的差异比较,来确定运动物体位置,是一种基于统计学原理的运动目标检测的方法。这种方法的性能取决于背景建模技术,Gloyer等人使用单高斯模型的思路,但常常不能准确地描述背景模型。
1999年Stauffer等人提出了经典的混合高斯背景建模法,这种方法不仅对复杂场景的适应强,而且能通过自动计算的模型参数来对背景模型调整,虽然增加了高斯分布的个数,造成计算量增大,但检测速度很快,且检测准确,容易实现。基于混合高斯模型建模的背景减法已是运动检测的主流方法。OpenCv中有三种三种比较容易使用的方法。
1. BackgroundSubtractorMOG
这是一个以混合高斯模型为基础的前景/背景分割算法。它是 P.KadewTraKuPong和 R.Bowden 在 2001 年提出的。它使用 K(K=3 或 5)个高斯分布混合对背景像素进行建模。使用这些颜色(在整个视频中)存在时间的长短作为混合的权重。背景的颜色一般持续的时间最长,而且更加静止。一个像素怎么会有分布呢?在 x,y 平面上一个像素就是一个像素没有分布,但是我们现在讲的背景建模是基于时间序列的,因此每一个像素点所在的位置在整个时间序列中就会有很多值,从而构成一个分布。
在编写代码时,我们需要使用函数cv2.createBackgroundSubtractorMOG()创建一个背景对象。这个函数有些可选参数,比如要进行建模场景的时间长度,高斯混合成分的数量,阈值等。将他们全部设置为默认值。然后在整个视频中 我们是需要使用 backgroundsubtractor.apply() 就可以得到前景的掩模了。
2. BackgroundSubtractorMOG2
这个也是以高斯混合模型为基础