当前位置: 首页 > 编程日记 > 正文

运动目标检测ViBe算法

一、运动目标检测简介  

视频中的运动目标检测这一块现在的方法实在是太多了。运动目标检测的算法依照目标与摄像机之间的关系可以分为静态背景下运动检测和动态背景下运动检测。先简单从视频中的背景类型来讨论。
        静态背景下的目标检测,就是从序列图像中将实际的变化区域和背景区分开了。在背景静止的大前提下进行运动目标检测的方法有很多,这些方法比较侧重于背景扰动小噪声的消除,如:
1.背景差分法
2.帧间差分法
3.光流法
4.混合高斯模型(GMM)
5.码本(codebook)
还有这些方法的变种,例如三帧差分,五帧差分,或者这些方法的结合。
      运动背景下的目标检测,相对于静态背景而言,算法的思路就有所区别了,一般会更加侧重于匹配,需要进行图像的全局运动估计与补偿。因为在目标和背景同时运动的情况下,是无法简单的根据运动来判断的。运动背景下的运动目标检测算法也有很多,如
1.块匹配
2.光流估计
      这些方法总得来在不同的环境下说各有各自的特点吧,也不见得简单的算法就一定比复杂的要弱。有一些博客已经对这些方法进行了对比和评估,有兴趣的同学可以参考这些

(摘自http://blog.csdn.net/zouxy09/article/details/9622401)
      推荐一个牛逼的库:http://code.google.com/p/bgslibrary/ 里面包含了各种背景减除的方法,可以让自己少做很多力气活。
      还有一篇评估的博文http://www.cnblogs.com/xrwang/archive/2010/02/21/ForegroundDetection.html

二、GMM算法简介


      不得不提的是其中的GMM算法(可以参考 Adaptive background mixture models for real-time tracking),这种算法在我平时要用到运动检测的时候一般都会直接用,原因有两个,第一,效果确实不错,噪声可以很快消除,第二,opencv包含了GMM算法,可以直接调用,非常省事。

GMM简单讲,将输入图像的像素与背景模型进行对比,和背景模型相似性比较高的点视为背景,和背景模型相似性比较低的点视为前景,再利用形态学的方法进行运动目标提取。混合高斯模型是由K个(基本为3到5个)单高斯模型加权组成的。在获取新的一帧图像之后,如果当前图像中的像素点与该像素的K个模型中的某一个匹配度比较高,则视为背景,并将当前帧的像素作为一个新模型,更新已存在的K个模型。如果匹配度比较低,则为前景点。整个混合高斯模型算法主要是有方差和均值两个参数,对于这两个参数采取不同的学习机制,直接影响该算法的正确性、稳定性和收敛性。代码网上到处都有,例如http://blog.csdn.net/pi9nc/article/details/21717669,需要的同学可以去看看。

三 、ViBe算法

 

不过,我今天介绍的主角并不是GMM,而是ViBe算法。在网上各处看到ViBe算法是个很牛逼的算法,据说还把GMM给PK下去了,所以我就拜读了原文 ViBe: a powerful random technique to estimate the background in video sequences
       ViBe算法是由Olivier Barnich 和 Marc Van Droogenbroeck在2011年提出的一种背景建模方法。该算法采用邻域像素来创建背景模型,通过比对背景模型和当前输入像素值来检测前景,可以细分为三个步骤:
       第一步,初始化单帧图像中每个像素点的背景模型。假设每一个像素和其邻域像素的像素值在空域上有相似的分布。基于这种假设,每一个像素模型都可以用其邻域中的像素来表示。为了保证背景模型符合统计学规律,邻域的范围要足够大。当输入第一帧图像时,即t=0时,像素的背景模型

其中,表示空域上相邻的像素值,表示当前点的像素值。在N次的初始化的过程中,中的像素点被选中的可能次数为L=1,2,3,…,N。

第二步,对后续的图像序列进行前景目标分割操作。当t=k时,像素点的背景模型为,像素值为。按照下面判断该像素值是否为前景。

这里上标r是随机选的;T是预先设置好的阈值。当满足符合背景#N次时,我们认为像素点为背景,否则为前景。

 第三步,背景模型更新方法。ViBe算法的更新在时间和空间上都具有随机性。
      时间上的随机性。在N个背景模型中随机抽取一个,设为图像,图2-1表示了图像的x位置及其八邻域内的像素。当我们得到新的一帧图像时,如果图像中的x位置对应的像素被判断为背景,则需要被更新。这个抽取的过程体现了时间上的随机性。
空间上的随机性。在的八邻域中随机抽取一个像素,用的来替换掉,这体现了模型更新空间上的随机性。

以上便是更新的过程,即用来更新及其八邻域。采用八邻域更新的方法,可以去除由于获取的视频细微抖动(摄像机抖动、目标微动)而产生的重影和误差,让检测目标更加准确。

在一般情况下,背景并不会发生较大的变化,所以每次背景模型更新的个数UpdateNum应该是相近的。因此我们把第一帧背景更新的次数InitNum作为比较值,符合下面公式则对背景模型进行重新初始化,这样可以避免由于大面积的光照变化导致的误判。

视频中的初始帧可能是包含目标的,常规的背景建模算法往往无法快速消除Ghost区域,这对于前景检测是不利的。Vibe算法更新模型时利用了该像素值的空间传播特性,背景模型逐渐向外扩散,这也有利于Ghost区域的更快的识别并且消除。下面以ViBe算法下的交通视频前景检测为例

如图上图所示为ViBe算法下前景检测的效果,红色矩形框表示了出现的比较显著的Ghost区域。在第10帧之前,Ghost区域残留严重,随着模型的不断更新,Ghost区域不断消失在第40帧以后,Ghost区域已经完全消失了。说明了Vibe算法在前景检测和背景模型更新上的优势。

代码地址:http://download.csdn.net/detail/zhuangxiaobin/7360113

转载于:https://www.cnblogs.com/ywsoftware/p/4434074.html

相关文章:

急缺开源人才怎么办?来看看大厂和高校怎么解决

开源,是数字中国建设的热点领域之一,也是数字经济时代的基础。在我国加速实现数字化转型的背景下,开源已经从个人行为、企业行为发展到了国家新基建的战略层面。它打破传统的组织架构与商业教条,彻底颠覆了工业经济时代的运转逻辑…

经验分享 | Burpsuite抓取非HTTP流量

使用Burp对安卓应用进行渗透测试的过程中,有时候会遇到某些流量无法拦截的情况,这些流量可能不是HTTP协议的,或者是“比较特殊”的HTTP协议(以下统称非HTTP流量)。遇到这种情况,大多数人会选择切换到Wireshark等抓包工具来分析。下…

Xdebug 配置

第一部分: 安装预编译模块安装预编译模块是很容易的。只需要将它们放到一个目录中,并将下面的内容添加到php.ini中:(不要忘记更改路径和文件名为你自己的值,并确信你使用的是完整路)zend_extension_ts &qu…

yield学习续:yield return迭代块在Unity3D中的应用——协程

必读好文推荐: Unity协程(Coroutine)原理深入剖析 Unity协程(Coroutine)原理深入剖析再续 上面的文章说得太透彻,所以这里就记一下自己的学习笔记了。 首先要说明的是,协程并不是线程&#xff0…

从神经元谈到深度神经网络

作者 | 泳鱼来源 | 算法进阶本文将从神经元到逻辑回归模型结构,并将其扩展到深度深度网络模型。一、谈谈智慧对于人类智慧奥秘的探索,不同时代、学科背景的人对于智慧的理解及其实现方法有着不同的思想主张。有的主张用显式逻辑体系搭建人工智能系统&…

【阿里聚安全·安全周刊】Intel芯片级安全漏洞事件|macOS存在漏洞

关键词:Intel漏洞丨mac OS漏洞丨三星漏洞丨安卓安全丨CPU漏洞丨phpMyAdmin漏洞丨iOS设备|安卓恶意软件检测|Burpsuite 本周资讯top3 【Intel漏洞】芯片级安全漏洞后续:谷歌表示不止Intel,每个1995年后的处理器都可能受影响 1月3日&#xff0c…

BigPipe:高性能的“流水线技术”网页

原文地址:http://www.facebook.com/note.php?note_id389414033919 译文地址:http://isd.tencent.com/?p2419 作者:蒋长浩 Facebook的网站速度做为最关键的公司任务之一。在2009年,我们成功地实现了Facebook网站速度提升两倍 。…

超硬核全套Java视频教程(学习路线+免费视频+配套资料)

文内福利,扫码免费领取Hello,各位锋迷们,我是小千。很多学习Java的小伙伴都在找的全套免费java视频教程,这里全都有,资料齐全,拿来吧你!零基础学Java的学习路线图是怎样的?&#xff…

手机触屏滑动图片切换插件swiper.js

今天给大家分享一款手机触屏滑动图片切换插件swiper.js是一款swiper手机触屏滑动图片幻灯片&#xff0c;适合各种尺寸。效果图如下&#xff1a; 在线预览 源码下载 实现的代码。 html代码&#xff1a; <div style"max-width: 640px; margin: 0 auto;"><di…

Nginx防盗链,Nginx访问控制, Nginx解析php相关配置, Nginx代理

2019独角兽企业重金招聘Python工程师标准>>> Nginx防盗链 Nginx防盗链配置需要与不记录日志和过期时间结合在一起&#xff0c;因为都用到了location。 打开配置文件&#xff0c;注释掉一部分内容&#xff08;红框上方&#xff09;&#xff0c;添加内容&#xff08;红…

web高性能开发系列随笔

在BlogJava里写了一些关于高性能WEB开发的随笔&#xff0c;因为都是跟前端技术相关(html,http,js,css等)&#xff0c;所以也贴到博客园来&#xff0c;吸收下人气。 1、 HTTP服务器. 2、性能测试工具推荐 3、 图片篇. 4、 如何加载JS&#xff0c;JS应该放在什么位置. 5、…

《Effective C++》第8章 定制new和delete-读书笔记

章节回顾&#xff1a; 《Effective C》第1章 让自己习惯C-读书笔记 《Effective C》第2章 构造/析构/赋值运算&#xff08;1&#xff09;-读书笔记 《Effective C》第2章 构造/析构/赋值运算&#xff08;2&#xff09;-读书笔记 《Effective C》第3章 资源管理&#xff08;1&am…

观点:AI 与自动化是矛盾的

作者&#xff1a;cerebralab.com译者&#xff1a;张雨佳原文标题&#xff1a;AI and automation are at odds想象一下&#xff0c;我们生活在一个完美、和谐的地方&#xff0c;所有人在某一天同意让电脑代替人类驾驶汽车&#xff0c;而不是像现在逐步推进自动驾驶。那么&#x…

kaggle之数据分析从业者用户画像分析

数据为kaggle社区发布的数据分析从业者问卷调查分析报告&#xff0c;其中涵盖了关于该行业不同维度的问题及调查结果。本文的目的为提取有用的数据&#xff0c;进行描述性展示。帮助新从业的人员更全方位地了解这个行业。 参考学习视频:http://www.tianshansoft.com/ 数据集&am…

mysql读写分离(MySQL Proxy 安装和使用)

一、必备软件&#xff1a; 1、LUA 可以去LUA的官方下载&#xff1a;www.lua.org 2、MySQL Proxy 这里有好多二进制版本。 http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/ 或者去MYSQL官方下载源代码。 3、测试过程中取消了B和C的REPLICATION。这样SQL语句…

微软副总裁、Kubernetes 头号贡献者的他,给云原生带来奇迹!

我们做了一个街头采访&#xff0c;调查路人眼中的程序员到底是怎样的&#xff1f;提到程序员&#xff0c;大家似乎都有刻板印象&#xff1a;总是格子衬衫牛仔裤双肩包打扮&#xff0c;总是埋头敲代码&#xff0c;加班是常态……谁说程序员呆板木讷&#xff0c;只会埋头敲一行行…

查询Oracle中字段名带.的数据

SDE中的TT_L线层会有SHAPE.LEN这样的字段&#xff0c;使用&#xff1a; SQL>select shape.len from tt_l; 或 SQL>select t.shape.len from tt_l t; 是查询不出来的。 需要这样查询&#xff1a; SQL>select t."SHAPE"."LEN" from tt_l t; 转载于:…

再谈session共享

之前一篇已经写过了《springboot中redis的使用和分布式session共享问题》&#xff0c;但是示例不完全&#xff0c;本文加以完善。 使用spring-session-data-redis解决session共享&#xff0c;而不需要再引入其他jar即可 集成简单&#xff0c;上手迅速。 项目结构 1.pngpom <…

使用MySQL Proxy解决MySQL主从同步延迟

MySQL的主从同步机制非常方便的解决了高并发读的应用需求&#xff0c;给Web方 面开发带来了极大的便利。但这种方式有个比较大的缺陷在于MySQL的同步机制是依赖Slave主动向Master发请求来获取数据的&#xff0c;而且由于服务器负 载、网络拥堵等方面的原因&#xff0c;Master与…

Python 操作 MongoDB 数据库!

作者 |黄伟呢来源 |数据分析与统计学之美MongoDB是一个介于关系数据库和非关系数据库之间的产品&#xff0c;是非关系数据库当中功能最丰富&#xff0c;最像关系数据库的。先来看看MySQL与MongoDB 概念区别&#xff1a;今天的重点&#xff0c;就是要为大家讲述如何使用Python操…

Linux下用汇编输出Hello, world

下列是Intel汇编语法实现的 Hello, world!程序。 ;; hello.asm ;; nasm -f elf hello.asm; will output hello.o ;; ld -s -o hello hello.o;; section, same to segment segment .data ; 数据段声明, 下列代码将放在数据段中msg db "Hello, world!", 0xA ; 要…

利用bigpipe机制实现页面模块的异步渲染 chunked技术

bigpipe基于HTTP/1.1 支持的chunked编码&#xff0c;可以由浏览器接收到服务器发送的chunked块后&#xff0c;立即解析该块代码。因为chunked编码使消息主体成块发送&#xff0c;每块有自己的大小指示器&#xff0c;在所有的块之后会紧接着一个可选的包含实体头域的尾部。这种编…

hibernate 全面学习【lazy策略 】

2019独角兽企业重金招聘Python工程师标准>>> lazy策略可以用在&#xff1a; * <class>标签上&#xff1a;可以取值true/false * <property>标签上&#xff0c;可以取值true/false&#xff0c;这个特性需要类增强 * <set>/<list>等集合上…

深度学习发现古人类遗址,AI 考古比胡八一更高效

作者 |神经星星来源 |HyperAI超神经By 超神经内容一览&#xff1a;伊利诺伊州立大学人类学专业考古方向的研究人员&#xff0c;将空间遥感技术和深度学习应用于古人类遗址的发掘和研究。关键词&#xff1a;考古 遥感 机器视觉考古&#xff0c;一直是个神秘又充满吸引力的话题。…

linux resource

1. centos repo https://centos.pkgs.org/转载于:https://www.cnblogs.com/gojoin/p/8241068.html

MySQL 水平分区方案Spock Proxy

Spock Proxy 是由实际项目产生的一个开源项目&#xff08;Spock是Rails的应用&#xff0c;Speck Proxy应当可用于Rails之外的&#xff0c;例如PHP或.NET&#xff09;&#xff0c;基于MySQL Proxy开发&#xff0c;是MySQL Proxy的一个分支&#xff0c;支持range-based horizonta…

卷学历、卷加班……程序员拥有什么能力才能破局内卷?

全世界的天才程序员都在疯狂的造轮子&#xff0c;其它程序员只能被动的学习轮子&#xff0c;这简直就像一场绝地求生。程序员行业的内卷已是有目共睹&#xff0c;选择程序员作为职业的人越来越多&#xff1b;大厂对程序员的学历要求越来越高&#xff1b;程序员工作加班越来越严…

LeetCode - Maximum Depth of Binary Tree

递归求二叉树的最大深度。 /*** Definition for binary tree* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val x; }* }*/ public class Solution {public int maxDepth(TreeNode root) {if(root null)return 0…

2018年IT市场最大的技术趋势和热点预测

随着数字化&#xff0c;物联网&#xff08;IoT&#xff09;设备&#xff0c;区块链应用以及新的服务器战略日益普及&#xff0c;这可能会成为2018年最大的技术趋势。我们期待看到大量与边缘计算相关的新产品&#xff0c;即所谓的无服务器计算&#xff0c;智能家居&#xff0c;智…

哈希分布与一致性哈希算法简介

前言 在我们的日常web应用开发当中memcached可以算作是当今的标准开发配置了。相信memcache的基本原理大家也都了解过了&#xff0c;memcache虽然是分布式的应用服务&#xff0c;但分布的原则是由client端的api来决定的&#xff0c;api根据存储用的key以及已知的服务器列表&…