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

一、概述

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

二、算法介绍

      基于背景减法的视频运动目标检测主要包括预处理、背景建模、目标检测和后处理四个步骤。本文的算法流程如图 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)经过涂抹和连通区域判别处理后的结果图像。

 

 

 

 

 

 

 

 

 

 

 

 

    

 

 

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 21
    评论
背景差分法是一种常用的运动目标检测方法之一,也是OpenCV中实现运动目标检测的一种方式。该方法通过计算当前帧图像与前一帧图像之间的差异来检测出移动的目标物体。 具体实现背景差分法的步骤如下: 1. 读取视频序列或者摄像头实时获取图像帧。 2. 预处理:将图像转换为灰度图像,并进行高斯模糊,以减少噪声的影响。 3. 初始化背景模型:选择一帧图像作为初始化的背景模型。 4. 计算当前帧与背景之间的差异:使用绝对差值或者其他差分方法,计算当前帧图像与背景模型之间的差异,并生成差异图像。 5. 二值化:将差异图像进行二值化处理,将差异值大于阈值的像素点标记为前景,表示目标物体的位置。 6. 形态学处理:对二值化后的图像进行开运算、闭运算等形态学处理,去除噪声或填补目标物体的空洞。 7. 目标检测:根据二值化后的图像,检测出连通区域,判断其是否为目标物体,可以使用轮廓提取或连通区域分析等方法。 在OpenCV中,可以使用cv2.createBackgroundSubtractorMOG2()函数创建一个背景减法器对象,然后使用该对象的apply()方法对每一帧图像进行背景差分。 例如,可以使用以下代码实现利用背景差分法进行运动目标检测: ```python import cv2 # 创建背景减法器对象 bg_subtractor = cv2.createBackgroundSubtractorMOG2() # 打开视频文件或者连接摄像头 cap = cv2.VideoCapture("video.mp4") while True: # 读取视频帧 ret, frame = cap.read() # 转换为灰度图像 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 背景差分 fg_mask = bg_subtractor.apply(gray) # 二值化 _, binary = cv2.threshold(fg_mask, 127, 255, cv2.THRESH_BINARY) # 进行形态学处理 # 目标检测 # 显示结果 # 按下Esc键退出 if cv2.waitKey(1) == 27: break # 释放资源 cap.release() cv2.destroyAllWindows() ``` 这是一个简单的实现例子,你可以根据需要进行进一步的改进和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值