随着通信、网络以及计算机技术等科学技术的迅速发展,图像及视频的处理应用已经开始慢慢融入人们的生活和工作当中[1]。智能视频监控是计算机视觉领域中一个新兴的研究方向,主要包括运动目标检测、目标跟踪和目标行为分析等部分。它与传统的视频监控方式不同,在不需要人力干预的情况下,通过计算机视觉技术对视频信号进行处理、分析和理解,从而自动对监控环境中的变化物体进行定位、识别和跟踪,并在此基础上对目标的行为进行分析和判断,在异常情况发生时它能够自动及时地发出警报。
运动目标检测已经成为智能视频监控中的关键技术,它是一个通过使用特定的算法把运动目标从视频图像序列中检测出来的过程[2]。同时,运动目标检测也是进行目标跟踪、目标行为分析等后续处理的基础。处理速度和可靠性是运动目标检测需要解决的2个基本问题,也是衡量相关算法优劣的2项重要指标[3]。由于背景的不同,运动目标检测算法可以分为2种:一种是静态背景下的,一种是动态背景下的[4]。静态背景就是在整个监控过程中摄像机是静止不动的;动态背景则是摄像机与背景之间发生了相对运动。静态背景下运动目标有3种基本算法:背景差法、光流法以及帧差法。算法的通用性和可靠性是运动目标检测存在的主要问题,解决这2个问题对后续目标跟踪的研究具有十分重要的意义。
计算机视觉库(OpenCV)在计算机视觉的发展中扮演着重要的角色,OpenCV的目标是为解决计算机视觉问题提供基本工具。文中在研究了几种运动目标检测算法的基础上,针对传统三帧差法存在的问题,提出了一种自适应阈值的三帧差法,以提高算法的通用性和解决检测到的运动目标内部有空洞的问题。该算法已经在Visual Studio软件平台下利用OpenCV实现。 1 帧差法原理及改进方法 1.1 帧差法
帧差法是基于像素点的运动目标检测算法,它通过对视频图像序列中的相邻两帧进行差分运算,判断背景中像素点的灰度值是否发生了变化,然后根据灰度值的变化得到运动目标。通常所说的帧差法指的就是二帧差分法。当背景中没有运动物体出现时,相邻两帧的图像几乎没有差别,理想状态下差分结果应该为0。
当运动物体出现的时候,物体的运动会使相邻两帧图像的像素发生变化,只需要设定合适的阈值,然后把差分结果和阈值作比较,就可以获取运动目标。帧差法的算法公式为
式中:fk-1(x,y)表示第k-1帧图片的像素点的灰度值,fk(x,y)表示第k帧图片的像素点的灰度值,D(x,y)表示差分结果,R(x,y)表示二值化结果,T为预先设点的的阈值,如果T选取的过大,则检测出来的运动目标可能会出现检测不完整或者漏检,反之,则会出现大量的噪声。帧差法的处理过程如图 1所示。从帧差法的公式来看,如果目标做匀速运动,帧差法检测到的运动目标会比较一致,但是当目标加速或者减速的时候,得到的运动目标就会被拉长或者不完整。帧差法的主要优点是算法简单,实时性好,对外界环境的变化不敏感,可以很快适应背景或者光线带来的影响。主要缺点是检测精度不高,当目标与背景颜色相近时,检测得到的运动目标不完整,目标内部会存在空洞。如果运动速度过快会出现双影的情况,运动目标会被拉长,速度过慢会有丢失的情况,就得不到完整的运动目标。
1.2 三帧差法为了改进帧差法的不足,有人提出了三帧差分法。三帧差法是连续取第k-1、k、k+1三帧图像,分别对第k-1、k帧图像和第k、k+1帧图像做差分运算,然后对两次差分图像进行“与”操作,使得运动物体拉长的部分得到去除,所以三帧差法得到的运动目标比帧差法更为精确,但同时检测到的运动目标内部会存在一定的空洞。三帧差法运算公式为
式中:R(x,y)表示最后得到的运动目标,∧表示“与”运算。三帧差法在帧差法的基础上进行了改进,解决了帧差法运动目标被拉长变大的问题。当目标颜色与背景颜色接近时,会出现少检,造成运动目标不完整。三帧差法的处理过程如图 2所示。 1.3 改进的三帧差法传统三帧差法在进行阈值二值化的时候,一般采用固定阈值,但固定阈值并不适用于所有场景。同样的阈值在这个场景中可以完整地检测到运动目标,在另一个场景可能得不到完整目标。文中提出的算法进行了改进,采用自适应阈值进行二值化处理,减少了除运动目标以外的噪声,这样可以使算法具有更强的环境适应能力。 具体操作步骤如下:
1)取连续三帧视频图像,对三帧图像进行灰度处理,不同的颜色所得到的灰度值也不一样,当目标颜色与背景颜色相同时,得到的灰度值一样,就会出现漏检的情况;
2)对步骤1)灰度处理过的图像的前两帧和后两帧分别进行差分运算;
3)对步骤2)得到的2个差分图像分别进行自适应阈值二值化,得到黑白图像;
4)在步骤3)得到的二值化图像上画出运动目标区域的轮廓,并对运动目标轮廓内部进行单色填充处理,这里得到的运动目标是白色的,背景是黑色的,所以用白色对目标内部进行颜色填充;
5)对步骤4)得到的2个图像进行“与”操作得到三帧差分图像;
6)对步骤5)得到的三帧差分图像进行中值滤波,滤掉椒盐噪声,使目标区域变得平滑;
7)对步骤6)中得到的图像进行小面积去噪处理,去掉多余的噪声和干扰,得到完整的运动目标。
文中算法中的自适应阈值T(x,y)在每个像素点都不同。它是通过计算像素点(x,y)周围b×b区域所有像素点的平均加权(所有像素点灰度值的加权平均值),然后减去一个常数c来得到自适应阈值,b和c参数的最佳值是在不同的视频检测试验中得到的。运动目标外部轮廓的提取是通过查找二值图像上每一个连通区域的轮廓点的集合,然后把这些点在图像上画出来。处理过程如图 3所示。
2 实验结果与分析文中以Visual Studio 2005为软件平台,借助OpenCV库函数对算法进行优化和改进。在实验过程中,选取不同场景的视频进行测试。分别改变b和c的参数值,然后观察检测到的运动目标的效果,经试验验证当b=3和c=5时,检测到的运动目标效果最好。第1段视频是在室内录制的,视频中人的上衣部分颜色与黑板颜色相近。取第112帧进行检测效果对比如图 4。
图 4中传统三帧差法在运动目标与背景颜色相近时,检测效果不是很好,并且还有一些阴影留下的噪声。文中算法检测出了完整的目标,阴影留下的噪声也没有了,而且目标内部没有出现空洞现象。改进算法比传统三帧差法检测到的目标更准确,解决了目标内部空洞问题,具有更强的抗干扰能力。
第2段是车辆行驶视频,道路中间那辆车速度很快,两边车辆速度相对较慢,文中取该视频中第46帧进行对比,如图 5所示。
由图 5可以看出,传统三帧差法检测到上面车速慢的车辆不是太完整,文中算法检测到的运动目标相对很完整,表明文中算法在视频中检测不同速度的物体比传统的三帧差法更加准确,同时也解决了目标内部存在空洞的问题。
第3段视频是在室外拍摄的。文中取视频中的第100帧进行检测效果对比,如图 6所示。
图 6(a)是传统三帧差法检测的结果,图 6(b)是文中算法检测的结果。由图 6可以看出,传统三帧差法检测到了人的基本轮廓,轮廓内部还存在空洞,文中的算法检测到的运动目标内部没有空洞,表明文中算法很好地解决了运动目标内部有空洞的问题。 3 结束语
文中在研究了帧差法和三帧差法的基础之上,提出了一种改进的三帧差分运动目标检测算法,对差分图像不再使用固定的阈值进行二值化,而是采用自适应阈值进行二值化。自适应阈值使得该算法的场景通用性得到提高,能够在不同的环境下检测到完整的运动目标,并且可以通过灰度值的细小差别检测出和背景颜色相近的运动目标。通过以上实验证明,文中提出的算法能够完整地检测出不同环境和不同速度的运动目标,并且在目标与背景颜色相近时也可以完整地检测到目标,同时改善了传统三帧差法运动目标内部存在空洞的现象,具有很强的抗干扰能力。当目标与背景颜色没有差别的时候,文中算法会出现少检,得不到完整的运动目标,这一不足还有待改进。
[1] | 余启明. 基于背景减法和帧差法的运动目标检测算法研究[D]. 赣州:江西理工大学, 2013:9-13. |
[2] | 王平, 陈素华, 董福洲. 运动目标检测技术在智能监控系统中的应用[J]. 电视技术, 2007, 31(10):81-83. |
[3] | 莫林, 廖鹏, 刘勋. 一种基于背景减除与三帧差分的运动目标检测算法[J]. 微计算机信息, 2009, 25(12):274-276. |
[4] | 储珺, 施芒, 符祥. 基于光流的动态背景运动目标检测算法[J]. 南昌航空大学学报:自然科学版, 2011, 25(3):1-6. |
[5] | 刘红, 周晓美, 张震. 一种改进的三帧差分运动目标检测[J]. 安徽大学学报:自然科学版, 2014, 38(6):55-59. |
[6] | 张青苗, 李鹏, 赵勇, 等. 一种基于OpenCV实现的运动目标检测算法的研究[J]. 舰船电子工程, 2010, 30(7):59-61. |
[7] | 侯宏录, 李宁鸟, 刘迪迪, 等. 智能视频监控中运动目标检测的研究[J]. 计算机技术与发展, 2012, 22(2):49-52. |
[8] | 赵群. 基于混合高斯模型的运动目标检测算法[J]. 应用科技, 2015, 42(1):19-21, 27. |
[9] | 高飞, 蒋建国, 安红新, 等. 一种快速运动目标检测算法[J]. 合肥工业大学学报:自然科学版, 2012, 35(2):180-183. |
[10] | 张毅刚, 曹阳, 项学智. 静态背景差分运动目标检测研究[J]. 电子测量与仪器学报, 2010, 24(5):494-499. |