运动目标检测--改进的背景减法

一、概述

本文提出了一种改进的基于背景减法的运动目标检测算法,该算法能自适应地对背景进行初始化和实时更新,并能有效克服光照等外界条件变化对运动目标检测的影响。

二、算法介绍

基于背景减法的视频运动目标检测主要包括预处理、背景建模、目标检测和后处理四个步骤。本文的算法流程如图 1 所示,算法中的预处理是对每一帧图像都进行去噪和亮度归一化处理,以抑制光照突变和噪声的影响;背景建模则采用改进的均值滤波法自动初始化背景,并不断实时更新背景,以克服环境光照变化所产生的影响;目标检测是在背景减法的基础上采用基于二维交叉熵的阈值分割方法获取运动目标;后处理则运用涂抹和连通区域判别处理去除运动目标检测结果中的噪声点和目标内部的空洞区域。下面将详细介绍算法中的主要步骤。

1、预处理

由于天气等外界因素的影响,视频采集设备所采集的视频图像中会存在一些噪声点,这些噪声点会干扰运动目标的检测,因此对采集到的每一个视频帧,首先要进行去噪处理,本文采用中值滤波的方法。中值滤波不仅能够滤除视频图像中的噪声点,同时又能够较好地保护图像边缘。

由于开关灯等光照变化会使图像亮度发生较大的变化,对检测结果产生极为不利的影响,为克服光照突变的影响,系统对经过去噪处理后的每一个视频图像帧都进行了亮度归一化处理,将图像归一化到一个标准的亮度。本文中采用基于直方图统计的方法实现图像的亮度归一化处理,具体步骤如下:

步骤1:求前N 帧图像的中值图像M。

步骤2:将M 设定为标准图像,求标准图像灰度值的平均值μ 和标准差σ 。

步骤3:将当前图像的灰度值乘以一个缩放系数α(灰度值范围0~255)后求其平均值u1和标准差σ1。

步骤4:求使 S = | μ - μ1| + | σ - σ1| 取得最小值时缩放系数α的值,即可得到亮度归一化后的当前图像。

图2 中(a)为灯全开时的背景图像,(b)为关掉两盏灯后的背景图像,(c)为(a)、( b)两幅图像直接差分的结果,(d)为(a)、(b)两幅图像经过亮度归一化后的差分结果。比较(c)、( d)两幅图像可以看出:经过亮度归一化后两幅图像的差异减小了很多。实验结果表明:经过亮度归一化处理后,所有视频图像帧的亮度都被归一化到了一个标准的亮度,因此有效地降低了光照变化所引起的运动目标的误检率。

2、背景初始化及更新

对于固定摄像机捕获的监控视频,最简单的背景选择方法是采用固定的某帧图像作为背景,但这种方法受光照变化和背景扰动等的影响较大,因此不能用于背景复杂及变化的环境。在实际应用中,一个有效的背景模型必须使得背景能够随时间重建和更新,尽量减少背景变化对运动目标检测的影响。本文采用一种改进的均值滤波法初始化背景,同时在运动目标检测过程中不断更新背景,有效减小了环境变化(如光照变化、天气变化等)对运动目标检测的影响。

(1)基于改进均值滤波的背景初始化

初始背景图像的获得对于目标检测的准确度以及背景图像的更新都起着至关重要的作用。传统的背景初始化方法需要在初始化期间不能出现运动目标,但在实际应用中无法保证初始化过程中目标不进入背景。本文对现有的均值滤波背景初始化方法进行改进,提出了一种有效的背景初始化算法,其主要步骤如下:

步骤1:建立一个视频流滑窗用来缓存前L 帧视频图像。

步骤2:将图像的颜色值的变化范围0~255 划分为n 个区间:[0,N],[N,2N],…,[(n-1)N,255],N=255/n。

步骤3:对于每个像素点的每一个颜色通道,先统计滑窗时间里每个区间内颜色分量值在 L 帧视频图像中出现的次数,然后计算出现次数最多的区间内所有值的平均值,并用它来作为背景模型在该点的颜色值,如式(1)所示:

式中,m 为L 帧视频图像中出现次数最多的区间数,Bt(x, y)为t 时刻 (x, y) 处的背景像素颜色值,It - i(x, y) 为t-i 时刻经过预处理后的视频帧中 (x, y) 处的像素颜色值。

图3 为本文提出的背景初始化方法得到的初始背景图像结果,其中(a)为初始的序列图像,(b)为采用传统的均值滤波法背景初始化结果,(c)为本文中采用改进的均值滤波法背景初始化结果,(d)为真实的背景。由图可知,本文算法得到的初始化背景与真实背景非常接近。实验结果表明:本文提出的改进的均值滤波法背景建模能够准确地获取背景,不依赖于背景初始化过程中所选取的L 帧视频图像中是否出现运动目标。

(2)背景实时更新

在视频监控运动目标检测的过程中,由于环境光照的逐渐变化,背景不是固定不变的。并且物体进入场景中并长时间停留以及背景中的物体离开场景,都会引起背景的变化。因此,当背景初始化完成后,必须不断地进行背景实时更新。本文的背景更新方法如下:首先建立一个缓冲器存放连续k帧的背景图像,然后对缓冲器中图像每一个像素点的颜色值按大小进行排序,取得每一个像素点在缓冲器中的中值M ( x ,y) ,按式(2)进行背景更新:

其中,Bt( x ,y) 、 Bt - 1( x ,y) 分别为t 时刻背景和t - 1 时刻的背景中( x ,y) 处的像素颜色值,λ 为比例系数,0 < λ < 1 。

图4 为本文的背景更新结果,其中(a)为t 时刻前几帧的图像序列,(b)为未进行背景更新的t 时刻背景,(c)为进行背景更新后的t 时刻背景,(d)为实际的t 时刻背景。由图4 可知,当人进入场景后一直停留在场景中,人已融入背景,进行背景更新后得到的当前背景与真实背景较为接近。实验结果表明:本文所采用的背景更新可以适应背景的实时变化,得到较为真实的背景。

3、基于二维交叉熵的差分图像目标提取

通过上述图像预处理和背景建模得到背景图像和当前帧图像后,首先进行背景减运算得到差分图像,然后对差分图像进行分割得到运动目标。

背景减是对背景图像和当前图像的对应像素点的颜色值进行差分运算,即

其中,It( x, y) 和Bt( x, y) 分别表示 t 时刻当前视频帧和背景图像中坐标为( x, y) 处的像素颜色值。

图5 为背景减法差分的结果,其中(a)为单目标图像,(c)为多目标图像,(b)、( d)分别为(a)、( c)经过背景减运算后的差分图像。

通过背景减得到的差分图像,在非目标点处灰度值很小,而在目标点处灰度值随目标与背景差异的不同而不同。当目标与背景的灰度值差异较大时,差分图像中对应的目标点处灰度值较大;当目标与背景的灰度值差异较小时,差分图像中对应的目标点处灰度值较小。因此,差分图像中目标类的方差较大,而背景类的方差很小。

传统的最大类间方差法适用于目标和背景方差相差不大的混合正态分布情形。交叉熵描述了两个概率分布的差异性程度,Li 和Lee 于1993年将交叉熵引入图像分割,并借用最大类间方差法的基本思想,提出了基于一维交叉熵的阈值分割方法如下:

f ( x, y) 和g ( x, y) 组成的二元组记为(i, j) ,在此基础上定义图像的二维直方图。直方图中任意一点Pij的值表示二元组(i, j) 发生的频率,Pij= cj/ ( M × N ) ,其中cij是(i, j) 出现的频数,根据二维直方图的定义,假设在阈值( s, t) 处将图像分割成四个区域,如图6。其中,对角线上的两个区域A 和B 分别对应于目标和背景,远离对角线的区域C 和D 对应于边缘和噪声。

由于C 区和D 区包含的是噪声和边缘的信息,概率较小,可忽略不计,所以利用二维直方图中任意阈值矢量( s, t) 对图像进行分割,可将图像分成目标和背景两类区域。可由二维直方图求得原图像在阈值为s 时交叉熵分割方法的准则函数和邻域平均图像在阈值为t 时交叉熵分割方法的准则函数分别为:

则在二维直方图上建立的以( s, t) 为阈值点的准则函数为:

最佳阈值( s*, t*) 取为:

图7 为二维交叉熵分割结果,其中(a)、(e)分别为经过背景减运算后的单目标和多目标差分图像,(b)、(c)、(d)和(f)、(g)、(h)分别为对(a)、(c)采用基于二维交叉熵的阈值分割、基于一维交叉熵的阈值分割以及最大类间方差法阈值分割后得到的二值图像。实验结果表明:基于二维交叉熵的阈值分割法对目标和背景方差相差较大的图像有着较好的分割效果,且综合考虑了点灰度和邻域平均灰度信息,对噪声有很好的抑制效果,能够有效地分割出背景差分图像中的运动目标。

经过基于二维交叉熵的阈值分割后得到的二值图像中,存在一些噪声点和目标内部的空洞区域,因此需要进行一定的后处理以去除这些噪声点和空洞。本文采用涂抹和连通区域判别处理去除噪声点和空洞。其中涂抹仅对白色像素点进行,步长为8。通过判别连通区域面积,去除面积过小的连通区域。图8 所示为后处理结果,其中(a)、(c)分别为采用基于二维交叉熵的阈值分割后的单目标和多目标二值图像,(b)、(d)为(a)、(c)经过涂抹和连通区域判别处理后的结果图像。

时间: 2024-09-29 08:24:57

运动目标检测--改进的背景减法的相关文章

静态背景下运动目标检测

前言:运动对象常用在视频监控领域,目的是从序列图像中将变化区域从背景图像中提取出来,运动区域的有效检测对目标分类.跟踪.行为理解等后期处理非常重要.根据摄像机与运动目标之间的关系可分为静态背景下的运动目标检(摄像机静止)和动态背景下的运动目标检测(摄像机也同时运动).项目中我用到的是静态背景下的运动目标检测,需通过固定摄像机检测运动物体,并完成抓取动作. 内容: 运动目标检测常用的方法一般分为两大类,一种是基于特征的方法,另一种是基于灰度的方法.基于特征的方法是依据图像的特征来检测运动目标,多用

【转】 运动目标检测跟踪主流算法

不全,需要慢慢补充 一.运动目标检测 (一)背景差 1.帧差 2.GMM 等 背景减算法可以对背景的光照变化.噪声干扰以及周期性运动等进行建模,在各种不同情况下它都可以准确地检测出运动目标.因此对于固定摄像头的情形,目前大多数的跟踪算法中都采用背景减算法来进行目标检测.背景减算法的局限性在于它需要一个静态的固定摄像头. (二)运动场 光流法 光流估计的方法都是基于以下假设:图像灰度分布的变化完全是目标或者场景的运动引起的,也就是说,目标与场景的灰度不随时间变化.这使得光流方法抗噪声能力较差,其应

OpenCV运动目标检测——帧间差,混合高斯模型方法

一.简单的帧间差方法 帧差法是在连续的图像序列中两个或三个相邻帧间采用基于像素的时间差分并且闽值化来提取图像中的运动区域. 代码: int _tmain(int argc, _TCHAR* argv[]) { VideoCapture capture("bike.avi"); if(!capture.isOpened()) return -1; double rate = capture.get(CV_CAP_PROP_FPS); int delay = 1000/rate; Mat

运动目标检测跟踪各过程算法综述

运动目标检测跟踪各过程算法综述 图像预处理数字图像中的几种典型噪声有:高斯噪声来源于电子电路噪声和低照明度或高温带来的传感器噪声:椒盐噪声类似于随机分布在图像上的胡椒和盐粉微粒,主要由图像切割引起或变换域引起的误差:加性噪声是图像在传输中引进的信道噪声.一般来说,引入的都是加性随机噪声,可以采用均值滤波.中值滤波.高斯滤波等方法去除噪声,提高信噪比.均值滤波在噪声分布较平均,且峰值不是很高的情况下能够得到较好的应用:中值滤波对尖脉冲噪声的滤除有较好的效果,并且能突出图像的边缘和细节:高斯滤波对滤

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

Author: JW. ZHOU 2014/6/13 最近一直在做前景检测方面的研究,刚开始主要是做一些工程性的应用,为了解决工程方面的问题,下了不少功夫,也看了不少最近国内外的文章.一直想做个总结,拖着拖着,终究却写成这篇极不成功的总结. 背景建模或前景检测的算法主要有: 1. Single Gaussian (单高斯模型) Real-time tracking of the human body 2. 混合高斯模型(Mixture of Gaussian Model) An improved

背景减法——Vibe

VIBE是Barnich和Droogenbroeck在2011年发表的<VIBE:A universalbackground subtraction algorithm for video sequence>中提出.其在模型中大量的使用了随机策略,有着意想不到的准确率和鲁棒性,该方法简单实用,计算代价低,可以应用于嵌入式系统中. 模型表示: 对输入视频帧的每个像素都建立一个背景模型M(x)={},里面包含N个样本值,每个样本值是从之前的帧提取的像素的颜色值. 分类方法:一个像素当前输入的颜色值

基于局部二值相似性模式(LBSP)的运动目标检测算法

基于局部二值相似性模式(LBSP)的运动目标检测算法 [email protected] http://blog.csdn.net/kezunhai 本文根据论文:Improving background subtraction using local binary similarity patternsWACV2014的内容及自己的理解而成,如果想了解更多细节,请参考原文.该文章思想借鉴了VIBE,其实可以理解成是VIBE+LBP算子变种(LBSP)运动目标检测算法的组合.在VIBE中,算法主

运动目标检测ViBe算法

一.运动目标检测简介   视频中的运动目标检测这一块现在的方法实在是太多了.运动目标检测的算法依照目标与摄像机之间的关系可以分为静态背景下运动检测和动态背景下运动检测.先简单从视频中的背景类型来讨论.        静态背景下的目标检测,就是从序列图像中将实际的变化区域和背景区分开了.在背景静止的大前提下进行运动目标检测的方法有很多,这些方法比较侧重于背景扰动小噪声的消除,如:1.背景差分法2.帧间差分法3.光流法4.混合高斯模型(GMM)5.码本(codebook)还有这些方法的变种,例如三帧

对这个运动目标检测方法实现的结果A Hybrid Algorithm for Moving Object Detection

最近在做烟火检测,需要用到运动检测,看到论文A System for Video Surveillance and Monitoring中的A Hybrid Algorithm for Moving Object Detection这个方法,我用opencv将其实现,代码下面会贴出,但是其的到的结果很差,不知道代码哪里出了问题,请高手给予指点,谢谢! 左图为原图,有图为用上面论文中的方法得到前景图像,[自己的代码可能写错了,请大神们给予指点谢谢] 代码如下: #include <stdio.h>