进行运动物体检测就是将动态的前景从静态的背景中分离出来。将当前画面与假设是静态背景进行比较发现有明显的变化的区域,就可以认为该区域出现移动的物体。在实际情况中由于光照阴影等因素干扰比较大,通过像素直接进行比较往往很容易造成误检。因此有不少算法被开发出来在进行前后景分离的时候对运动和其他因素造成的变动进行区分。opencv中提供了多种背景减除的算法,其中基于高斯混合模型(GMM)的cv2.BackgroundSubtractorMOG()
和cv2.BackgroundSubtractorMOG2()
已经基于贝叶斯模型的cv2.bgsegm.createBackgroundSubtractorGMG()
最为常用。
1) GMM法
GMM进行前后景分离最早是在2001年的文章An improved adaptive background mixture model for real-time tracking with shadow detection
中提出的。其设计思路为:
- 在不知道图像历史的时候,假设每个像素点的值都是可以分解为一组adaptive Gaussian。adaptive是由于需要跟随光照条件的变化而变化。
- 像素值的历史由一组高斯分布进行建模,包括每个分布的权重。
- 每次新图像输入的时候都会用这一组高斯分布进行评估,如果像素匹配上其中一个分布就会认