基于AForge.NET类库的视频移动目标检测
   来源:现代电子技术     2021年01月28日 05:42

楼亮亮++金彦亮

摘 要: 运动目标的检测是数字图像处理和模式识别的基础,也是计算机视觉研究的一个重要领域。以C#为主要研究工具,对基于相邻帧差法及背景差分法的视频目标检测算法进行了研究,主要对其原理和算法进行研究。最后利用以AForge.NET架构类库,利用图像灰度的绝对值是否大于设置的阈值实现了对运动目标进行检测,实验结果表明,采用该算法可以对运动目标进行较为精确的检测。

关键词: 运动检测; AForge.NET; 帧差法; 背景差分法

中图分类号: TN911.73?34 文献标识码: A 文章编号: 1004?373X(2015)17?0058?03

Moving target detection for videos based on AForge.NET library

LOU Liangliang, JIN Yanliang

(School of Communication and Information Engineering, Shanghai University, Shanghai 200072, China)

Abstract: Moving target detection is the foundation of digital image processing and pattern recognition, and an important domain in computer vision research. Taking C# as the main research tool, the algorithms of target detection for videos based on adjacent frame difference method and background difference method are studied, and the principles and algorithms are studied mainly. The moving target detection on the basis of AForge.NET library was achieved when the absolute value of grayscale image was larger than the set threshold. The experimental results show that background difference method can detect moving target accurately.

Keywords: motion detection; AForge.NET; frame difference method; background difference method

0 引 言

由于微电子技术的发展与社会生活水平的提高及各种安防需求的增多,运动目标检测逐步成为当前监控系统研究领域的热点,更是计算机视觉领域中视频跟踪算法和识别技术的基础,该算法的检测精度直接影响了后续的运动目标跟踪及识别效果。目前,运动目标检测领域比较常用的方法有:光流法、帧间差分法和背景差分法。

光流法是相对于观察者的运动目标造成的观测目标、表面或边缘的运动[1]。但是该算法计算量比较大,并且存在抗干扰能力差,所以对于实时性要求较高的场合,该检测算法在视频运动检测应用中并不是特别的适用,目前在运动检测中最常用的方法实际上是背景差分法[2]和帧间差分法[3]。

帧间差分法是一种通过对视频图像序列中相邻两帧作差分运算来获得运动目标轮廓的方法,非常适用于存在多个运动目标和摄像机移动的情况[4]。由于该算法对光线及场景变化具有较强的抗干扰性,且无需获得背景图像,更新速度快,所以非常适用于实时性较强的应用场合。但是该算法存在阈值难以确定的问题,这个现象在低对比度灰度图像序列中特别明显,导致对目标对象的完整区域提取不完整而产生空洞的现象。

背景差分法是采用图像序列中的当前帧和背景参考模型比较,来检测运动目标的一种方法,其检测性能依赖于所使用的背景建模技术[5]。该算法可以实现缓慢的背景变化过程中对目标进行精确快速的分割,所以具有很强的适用性,然而对于突然的光照变化和背景扰动,对物体带有影子的图像分割出来的前景图像可能带有影子区域[6],为此可以通过建立实时更新的背景模型机制将前景区域分割出来,就可以减少动态场景变化对运动分割的影响[7]。

本文利用AForge.NET[8]架构类库,在Microsoft Visual Studio 2010中分别实验了帧间差分法与背景差分法,并实现运动目标的检测。实验结果表明,利用帧间差分法可以快速实现运动目标的检测,但是对于运动速度较慢的目标检测效果不是特别理想。为此,对于缓慢变化的运动目标引入背景差分法,利用类库中MoveTowards类建立实时有效的背景模型,有效地解决目标低速运动识别率较低的问题,提高了目标检测的准确率。

1 AForge.NET简介

AForge.NET是一个专门为开发者和研究者设计的基于C#框架,包括计算机视觉与人工智能、图像处理、神经网络、遗传算法、机器学习、模糊系统、机器人控制等领域[9]。AForge.NET是一个不断完善和发展的计算机视觉和图像处理库,目前的最新版本是2.2.5。

这个框架由一系列的类库组成,主要包括有:

AForge.Imaging:日常的图像处理和过滤器;

AForge.Vision:计算机视觉应用类库;

AForge.Neuro:神经网络计算库AForge.Genetic?进化算法编程库;

AForge.MachineLearning:机器学习类库;

AForge.Robotics:提供一些机器学习的工具类库;

AForge.Video:一系列的视频处理类库;

AForge.Fuzzy:模糊推理系统类库;

AForge.Controls:图像,三维,图表显示控件。

2 检测原理

帧差法及背景差分法主要原理就是图像的差分技术。设在一个时间轴上相邻时刻点[ti]采集到的图像帧分别为[f(x,y,ti),][ti+1]采集到的帧为[f(x,y,ti+1),]则可以得出:

[f(x,y,ti)=bi(x,y)+m(x,y)+ni(x,y)] (1)

[f(x,y,ti+1)=bi+1(x,y)+m(x+Δx,y+Δy)+ni+1(x,y)] (2)

式(1),式(2)中[bi(x,y)]与[bi+1(x,y)]为[i]与[i+1]时刻的背景图像帧;[m(x,y)]与[m(x+Δx,y+Δy)]分别为两个时刻点的运动目标数据;[ni(x,y)]与[ni+1(x,y)]分别是[i]与[i+1]时刻的噪声数据。

那么从式(1),式(2)中可以得出[ti+1]与[ti]时刻点的差图像。

[di+1(x,y)=f(x,y,ti+1)-f(x,y,ti)=m(x+Δx,y+Δy)-m(x,y)+bi+1(x,y)-bi(x,y)+ni+1(x,y)-ni(x,y)] (3)

式中:[[m(x+Δx,y+Δy)-m(x,y)]]为运动目标引起的图像变化数据;[[bi+1(x,y)-bi(x,y)]]为当前帧与背景图像的差值图像;[[ni+1(x,y)-ni(x,y)]]为视频的残留噪声。对于噪声的处理,在实际图像处理过程中采用腐蚀技术,通过确定有效的检测阈值进行判断,当差图像大于该阈值时,就可以认为有运动事件发生。

[di+1(x,y)=1,f(x,y,ti+1)-f(x,y,ti)>Tg0,其他] (4)

式中:[Tg]为检测阈值;[di+1(x,y)]用来确定[ti+1]时刻与[ti]时刻点图像灰度是否有差异。如果差值图像大于设定的阈值,说明当前帧检测到运动目标的存在,进而可以开展后续工作,如远程报警及其他相关工作。

3 具体实现方法

本实验以Microsoft Visual Studio 2010的AForge.NET库为基础实现了运动目标的检测,主要用到了AForge.NET的AForge.Vision.Motion库。该库包含了基本的运动检测和处理算法类。本文在算法方面通过对这几个类进行实例化并调用其中的算法函数,就可以建立实时更新的背景模型机制实现背景的建模及前景运动目标的分割,进而实现运动目标的检测。

帧间差分法是一种最简单的运动检测方法,其特点是两用前后两个时间点的相邻帧做差分,能快速对运动物体实现检测。因为摄像头会产生一定的噪声,为了提高检测的精度,对于前后两帧的差值需要进行腐蚀[10]滤波处理,具体实现流程如图1所示。

帧间差分法相关代码如下:

//初始化一个差帧比较类

Difference differenceFilter = new Difference();

//设置阈值

IFilter thresholdFilter = new Threshold(15);

// 把前一帧图像复制给差帧比较类

differenceFilter.OverlayImage = backgroundFrame;

//当前帧数据比较

Bitmap tmp1=differenceFilter.Apply(currentFrame);

//计算出两帧的差别数据

Bitmap tmp2=thresholdFilter.Apply(tmp1);

//实例化腐蚀滤波器

IFilter erosionFilter = new Erosion();

//对两帧数据差值进行数据滤波

Bitmap tmp3 = erosionFilter.Apply(tmp2);

上面几行代码可以计算出当前帧与上一帧这两帧数据相差的像素数据,通过设定特定的阈值,就可以实现对运动目标的报警功能。在本文所做的实验中,为了形象展示当前帧与上一帧数据的差值数据,把连续两帧数据差值用过红色高亮数据进行显示。实验结果表明,通过差帧法可以快速实现运动目标的检测,由于帧差检测法存在阈值难以确定的问题,特别是对于低速运动的运动目标,如果设定较低的阈值则存在误触发虚报的问题,而对于设定的高阈值,因为具有较低的检测灵敏度,则存在漏警的问题,实验结果如图2所示。

为此,本文引入了背景差分法技术,相对帧差检测算法,该算法使用AForge.NET的MoveTowards类实现实时背景的建模,再通过当前图像帧与建模形成的背景帧数据进行差分运算,实现运动目标的检测。该算法可以解决帧差检测法阈值难以确定的问题,可以实现低速运动目标精确的定位与检测。

背景差分法与帧间差分法的区别只是有了一个背景更新的过程,本文新背景的建立是通过AForge.NET视频库中类实现,该类背景提取算法原理是当前帧与前一个背景帧求加权平均得出当前背景帧数据。背景差分法的具体算法流程如图3所示。

背景差分法相关实现代码如下:

// 初始化背景类

MoveTowards moveTowardsFilter = new MoveTowards();

// 把当前帧复制给该类

moveTowardsFilter.OverlayImage = currentFrame;

// 通过前一帧与当前帧建立新的背景

Bitmap tmp = moveTowardsFilter.Apply(backgroundFrame);

// 把原先老的背景去除掉

backgroundFrame.Dispose();

//把当前计算出来的背景帧保存下来,为下一背景帧计算做准备

backgroundFrame = tmp;

背景差分法运动检测算法的相关实验结果如图4所示。

从图4可以看出,背景差分法具有更好的目标轮廓,通过当前帧与背景帧比较的运动检测算法,可以很好地解决运动目标低速运行的问题,可以较为精确地实现与运动目标的检测。所有背景差分法与帧差法相比,具有更高的检测精度,非常适合工程中的应用。

4 结 语

本文利用AForge.NET类库,分别采用帧差法及背景差分法对运动目标进行实时检测。实验结果证明,利用AForge.NET可以实现运动目标的检测功能,并且具有很强的实时性。帧差法可以快速地检测运动目标,但是由于其特性决定了其对于低速运动目标的检测较背景差分法检测灵敏度要低。本文只针对运动目标进行简单的检测,对于更进一步的问题将在后续工作中继续研究。

参考文献

[1] 陈银,任侃,顾国华,等.基于改进的单高斯背景模型运动目标检测算法[J].中国激光,2014(11):245?253.

[2] 纪青华,禹素萍.基于Surendra背景减除法和四帧差分法的目标检测算法[J].计算机应用与软件,2014(12):242?244.

[3] 邱斌,干红华,张亶.基于时空信息的运动目标分割算法[J].激光杂志,2014(12):40?44.

[4] 柴池.基于背景差分和三帧差分的运动目标检测[J].网络安全技术与应用,2014(11):75?76.

[5] 黄素茵.基于视频监控运动目标检测算法研究[D].广州:华南理工大学,2013.

[6] 余启明.基于背景减法和帧差法的运动目标检测算法研究[D]. 赣州:江西理工大学,2013.

[7] 严晓明.一种基于改进帧差法的运动目标检测[J].莆田学院学报,2011(5):69?72.

[8] KIRILLOV A. AForge.NET framework [EB/OL]. (2010?03?02) [2010?12?20]. http://www. aforgenet. com.

[9] SURHONE L M, TENNOE M T, HENSSONOW S F. AForge.NET [M]. Paris: Betascript Publishing, 2010.

[10] 陈立平,曹丽萍,黄增喜,等.基于腐蚀?膨胀比的视频场景运动状态鲁棒检测[J].四川大学学报:工程科学版,2011,43(4):95?100.

运动 目标 背景