GMM是网上到处可见且用得最多的背景建模算法,论文上很多相关概率公式,又看了很多博客对于GMM的解释,直到现在还总是觉得很难理解其中的真谛,从各方面整理一下目前自己所理解的内容,如果有理解偏差,欢迎指正。

Mog2用的是自适应的高斯混合模型(Adaptive GMM,Gaussian Mixture Model),在OpenCV中开源了的几种背景提取算法MOG,MOG2,GMG的测试程序结果中,MOG2确实在前景连续性及运算时间上都脱颖而出,后面会给出比较结果。下面就结合OpenCV2.4.9的mog2源码和源码文档中指出的04年Zoran Zivkovic的三篇论文,简要串一串GMM的理论基础,MOG2的大致原理,在代码实现上的结构及MOG2 API的用法。

背景建模的思想由来

在监控系统中,拍摄背景通常是变化较少的固定场景。通常我们假定没有入侵物体的静态场景具有一些常规特性,可以用一个统计模型描述。GMM就是用高斯模型,而且是多个高斯模型的加权和混合在一起来模拟背景的特性。这样一旦已知这个背景模型,入侵物体就能通过标出场景图像中不符合这一背景模型的部分来检测到。这一过程被称为背景减除(Backgroundsubtraction),我猜OpenCV中各种背景建模方法的基类称作“BackgroundSubtractor”也源于此吧。

GMM模型参数估计的通常思路——GMM参数的EM估计

一旦背景以高斯混合模型来模拟了,现在确定这个模型变成了解出高斯混合模型公式中的一系列参数,在解参数时通常用的是EM演算法,EM演算法分两步:E-step和M-step。
关于EM算法的推导过程,链接的这个博客阐述的非常详细。
最大似然估计, EM算法理解上很有难度,涉及到最大似然估计上面链接也可以作为参考。

Mog2建模过程及各可调参数意义

上面说到GMM是用多个高斯模型的加权和来表示,假定是M个高斯分量,讨论M的取值是MOG2的作者研究的一个重点:在他之前Stauffer & Grimson取固定个数的高斯分量(M=4), Zoran则根据不同输入场景自动选择分量的个数。这样做的好处是在较简单的场景下,将只选出一个较重要的高斯分量,节省了后期更新背景时选属于哪一分量的时间,提高了速度。有两个测试结果为证:一是用OpenCV中测试程序对同一简单场景测试视频跑不同算法得到的运行时间如下表,明显mog2快很多;

       mog     mog2    gmg
   电脑1   26904    14386   25533
   电脑2   26947    14578   28834 

二是Zoran在讲背景更新的论文[i]的三个测试视频结果(图1, 摘自[1]中Fig.1第1,2列), 图中Traffic场景作为一个较简单的场景,背景变化不大,第二行中纯黑背景表示背景只用一个高斯分量,速度13ms较固定四个分量的19ms快了很多,而测试的Trees场景背景中包含树影晃动,背景浅灰色部分表示有多个高斯分量在更新,在这种场景自适应方法并没有优势。

对于整个图像的每个像素点都建立了一个GMM模型,建模过程中运用EM算法来求解参数组,一旦模型建立,后面每新来一帧都可以根据是否符合已建立的北京模型判断FG/BG,并会按论文中的参数更新公式更新GMM的所有参数。

OpenCV代码实现结构梳理

OpenCV中,各背景建模方法类继承关系如下图,BackgroundSubtractor是基类。

也给出一个博客,OpenCV中MOG2的代码结构梳理。

在mog2的使用中,初始化后,operator()函数是执行背景更新的主要函数,operator()内部实现主要是OpenCV的一个并行框架parallel_for_(),再深入实际是MOG2Invoker类的operator()实现了背景更新的具体数学运算。具体实现可以查看MOG2Invoker API文档。

Mog2.operator()

Parallel_for_()

Invoker.operator()

MOG2 API用法(how to use)

Mog,mog2,gmg的整体框架都一样,用法也很简单,可以根据openCV官方的tutorial来看。


[i] Efficient adaptivedensity estimation per image pixel for the task of background subtraction.

OpenCV中背景建模方法mog2——Adaptive GMM算法小结相关推荐

  1. 目标检测中背景建模方法

    FROM: http://www.cnblogs.com/ronny/archive/2012/04/12/2444053.html 最近一直在做前景检测方面的研究,刚开始主要是做一些工程性的应用,为 ...

  2. 目标检测中背景建模方法总结

    转自:http://www.cnblogs.com/ronny/archive/2012/04/12/2444053.html 背景建模或前景检测的算法主要有: 1. Single Gaussian ...

  3. 目标检测中背景建模方法 [转]

    最近一直在做前景检测方面的研究,刚开始主要是做一些工程性的应用,为了解决工程方面的问题,下了不少功夫,也看了不少最近国内外的文章.一直想做个总结,拖着拖着,终究却写成这篇极不成功的总结.      背 ...

  4. 常见的目标检测中的背景建模方法总结

    最近一直在做前景检测方面的研究,刚开始主要是做一些工程性的应用,为了解决工程方面的问题,下了不少功夫,也看了不少最近国内外的文章.一直想做个总结,拖着拖着,终究却写成这篇极不成功的总结.(文章下载:h ...

  5. 常见的目标检测中的背景建模方法

    Author: JW. ZHOU 2014/6/13 最近一直在做前景检测方面的研究,刚开始主要是做一些工程性的应用,为了解决工程方面的问题,下了不少功夫,也看了不少最近国内外的文章.一直想做个总结, ...

  6. Background Subtraction and Modeling 常见的目标检测中的背景建模方法漫谈

    转载者的话: 最近一直在看background subtraction and modeling.正如如下链接的第一个回帖所说,背景建模虽然最近研究不是很热,但对视频的处理至关重要,甚至直接影响一个系 ...

  7. 背景建模方法论文总结

    文章名称:Real-tine tracking of the human body 年份:1997 作者:Christopher Richard Wren 算法名称:单高斯背景建模 简单描述: 将每个 ...

  8. 背景建模方法《python图像处理篇》

    引言:在图像处理中,运动检测占据了大部分内容,因为现实生活还是动态更新的,今天要说的是两种传统的背景建模方法,高斯混合模型和VIBE算法(Visual Background Extractor),这两 ...

  9. openCV中的findHomography函数分析以及RANSAC算法的详解(源代码分析)

    本文将openCV中的RANSAC代码全部挑选出来,进行分析和讲解,以便大家更好的理解RANSAC算法.代码我都试过,可以直接运行. 在计算机视觉和图像处理等很多领域,都需要用到RANSAC算法.op ...

最新文章

  1. 【转载】“error LNK1169: 找到一个或多个多重定义的符号”的解决方法
  2. Java -- JDBC 学习--数据库连接池
  3. 断网也能上传数据!苹果用户又可以了 | 开源
  4. python【数据结构与算法】从一个例子引入动态规划❤️
  5. Hessian 使用入门
  6. 教室信息管理系统mysql_教师信息管理系统(方式一:数据库为oracle数据库;方式二:存储在文件中)...
  7. Zookeeper和CAP的关系
  8. SQL数据库调优之性能监视篇
  9. python格式化输入_python-格式化(%,format,f-string)输出+输入
  10. UI素材干货模板|线框图wireframe线框图iOS设计稿
  11. Autolayout代码实现举例-01使用线性公式
  12. Python 爬虫 PhantomJs 获取JS动态数据
  13. RxSwift 5官方Demo调试和学习资源
  14. 使用DIME协议上传文件
  15. 基于android的影院订票app,基于Android技术的影院订票系统的设计与实现
  16. 计算机硕士工资一览表
  17. 雨人网络E卡通免费上网的方法
  18. MYSQL--未提交(read uncommitted)、读已提交(read committed)和repeatable read(可重复读)
  19. AtCoder Beginner Contest 275 A-D题解
  20. OSChina 周六乱弹 —— 舔狗是没有好下场的

热门文章

  1. kotlin和java相互转换的实操
  2. QT之CheckBox单项选择与多项选择
  3. Linux流量监控工具 - iftop (最全面的iftop教程),查看服务器的网络情况
  4. 5、隐私计算--同态加密
  5. 主流电源的调光协议分析及应用说明
  6. NASA关于编程的十条原则
  7. [Android]搜索框SearchView
  8. WSN关键字+自编码网络学习法
  9. 在Markdown中使用Mermaid来绘制流程图
  10. 彻底删除MySQL57服务