基于OpenCV的智能视频监控设计
扫描二维码
随时随地手机看文章
摘要:采用智能视频分析技术的智能监控系统能够最大限度地减少人为干预,提高监控效率,减轻人的工作负担,并可对动态场景视频中的目标物体进行检测、分离、跟踪与有效识别。文中介绍了opencv中的运动模板检测方法,并给出了使用该检测方法来对运动目标进行检测、跟踪与智能判断的实验结果。
关键词:opencv;视频监控;目标检测;智能识别
O 引言
智能视频监控以数字化、网络化视频监控为基础,但又有别于一般的网络化视频监控,它是一种更高端的视频监控应用。智能视频监控系统能够识别不同的物体。发现监控画面中的异常情况,并能以最快和最佳的方式发出警报和提供有用信息,从而能够更加有效地协助安全人员处理危机,并最大限度地降低误报和漏报现象。智能视频监控中的运动目标检测与跟踪技术则是实现这一环节的关键技术。目前比较常用的运动目标检测方法是帧间差分法、背景差分法和光流法。而几种较受关注的目标跟踪算法则有粒子滤波、基于边缘轮廓的跟踪和基于模板的目标建模等方法。
通过计算机开源视觉库(openCV)中的运动模板检测能对视频图像中运动目标有效地进行检测与跟踪,本文首先介绍了openCV算法,然后在该算法的基础上,给出了实现智能视频监控中对运动目标进行跟踪,并根据运动目标的质心位置作出相应智能判断的具体方法。
1 0penCV简介
OpenCV是“Open Source Computer Vision Library”的简写,是Intel开源计算机视觉库。它由一系列C函数和少量的C++类构成,是可实现图像处理和计算机视觉方面的很多通用算法。OpenCV拥有包括300多个C函数的、跨平台的中、高层API,它不依赖与其它的外部库。Op-enCV对非商业应用和商业应用都是免费的;另外,OpenCV为Intel的IPP也提供了透明接口。这意味着,如果有为特定处理器优化的IPP库,那么,OpenCV将在运行时自动加载这些库,以使函数性能达到最好。OpenCV的优点是开放源代码,具有基于Intel处理器指令集开发的优化代码,统一的结构和功能定义,强大的图像和矩阵运算能力,以及方便灵活的用户接口,同时支持MS-Windows和Linux平台。
最新的OpenCV库已经包含有大量的函数和例子,可用来处理计算机视觉领域中常见的问题,其中主要涉及到以下几个方面的内容:
(1) Motion Analysis and Objection Tracking-运动分析和目标跟踪;
(2)Image Analysis-图像分析;
(3) StructuralA nalysis-结构分析;
(4)ObjectR ecognition-目标识别;
(5)3D Reconstruction-3D重建。
2 算法流程
运动模块检测算法的流程图如图1所示。该流程首先是获得当前帧与上一帧的差,接着对差图像进行二值化,以去掉超时影响,更新运动历史图像,然后计算运动历史图像的梯度方向,并将整个运动分割为独立的运动部分,再用一个结构序列标记每一个运动分割,最后计算选择区域的全局运动方向,从而获得运动目标的质心位置与运动方向。
这个算法基于的条件是运动目标相邻两帧之间在画面上存在的交集,此算法不用外推和相关分析以及轨迹后处理就可以清晰地显示出目标的轨迹、速度与方向。用该算法基于运动目标检测运动目标前景图像的具体过程可描述如下:
◇存储检测出来的目标前景图像,并使过去的帧灰度递减:
◇在当前帧打上时间戳叠加存储到历史图像后缀;
◇形成梯度渐变图像;
◇由分割得到的梯度渐变图像得到目标位置,并计算渐变梯度,以得到目标的速度和方向,并加上批号标记。
该算法简化了目标相关性的运算,可在初始状态下对于目标运动趋势不了解的情况下实施对目标的稳定跟踪,同时具有良好的实时性能。
3 相关函数
通过函数cvUpdateMotionHistory可使用下列方式更新运动历史图像:
也就是说,MHI(motion history image)中运动所发生的象素点被设置为当前时间,而运动发生较久的象素点将被清除。
函数cvCalcMotionGradient用于计算MHI的差分Dx和Dy,然后计算梯度方向,其公式为:
orientation(x,y)=arcztan(Dy(x,y)/Dx(x,y))
其中要考虑Dx(x,y)和Dy(x,y)的符号。然后填充mask以表示哪些方向是正确的。
函数cvCalcGlobalOrientation用于在选择的区域内计算整个运动方向。并返回0°到360°之间的角度值。首先由函数创建运动直方图,并寻找基本方向做为直方图最大值的坐标。然后通过函数计算与基本方向的相对偏移量,并将其做为所有方向向量的加权和(运行越近,权重越大)。所得到的角度就是基本方向和偏移量的循环和。
函数cvSegmentMotion可寻找所有的运动分割,并在seg_mask用不同的单独数字(1,2,…)标识它们。它也可返回一个具有CvConnected-
Comp结构的序列。其中每个结构对应一个运动部件。在这之后,每个运动部件的运动方向就可以被函数cvCalcGlobalOrientation利用提取的特定部件的掩模(mask)计算出来。此外,每个运动部件的质心位置也可由返回的图像ROI位置来确定,由此便可确定运动目标的位置。
4 实验结果
在实验中,可采取标准视频图像源来有效检测跟踪出图像中的运动目标,图2所示是其实验结果示意图。其中通过图2(a)能够根据CvCon-
neetedComp中所获取的运动分割形状大小,滤掉所不关心的运动目标;而对于图2(b),如果把限定阈值取大。则视频中的骑自行车的人将不会被跟踪显示;
图2(c)中,假定竖直线右侧为警戒区域,当有目标进入该区域时。即运动目标的质心位置为某一区间值时,则对该目标进行标记,从而达到智能判断的效果。图中直线方向表示运动物体的运动方向,在实际的运用场景中,可由此判断物体是否逆行以达到智能监控和识别的效果。
5 结束语
本文介绍了openCV中运动模板的检测方法,该方法可以有效正确检测和跟踪视频图像中的运动目标,并能获得该目标的运动方向与相应位置,从而实现智能视频监控和智能判断。但实际上,该方法仍然会存在运动背景差不精确、运动目标形状大小不一等问题,因此,还需进一步研究或与其他方法相结合,以达到更好的效果。