Opencv软件

2024-09-01

Opencv软件 篇1

关键词:OpenCV,运动目标检测,背景差分法,混合高斯模型

0引言

智能视频监控系统是目前安防体系中非常重要的一环,智能视频监控技术涵盖了数字图像处理、计算机视觉、 模式识别、多媒体技术、人工智能等多个领域的知识,视频图像中的运动目标检测与运动目标跟踪是智能视频监控的基础。 目前常见的运动目标检测方法有:帧间差分法[1]、背景差分法[2]和光流法[3]。

(1)帧间差分法:主要是利用视频图像序列中连续两到三帧的差异来检测发生运动的区域。由于相邻两帧间的时间间隔非常短,因此可以利用前一帧图像作为当前帧的背景模型。该算法实现简单,程序设计复杂度低,对光线等场景变化不太敏感,能够适应动态背景下的运动目标检测,稳定性较好。但是,帧间差分法所检测出的运动目标轮廓不清晰,在目标内部会留有许多空洞。

(2)背景差分法:通过统计前若干帧的变化情况,进而分析出背景扰动的规律,构建背景模型。当前帧与图像背景进行差分,其中区别较大的像素被认为是运动区域,而区别较小的像素被认为是运动区域。背景差分法检测运动目标速度快,检测准确,易于实现,关键是背景图像的获取。

(3)光流法:对序列图像的光流场进行分析,计算出运动场,对场景进行分割,检测出运动目标。该方法的核心就是计算出运动目标的光流即速度。光流法能够在摄像机运动、背景变化等复杂条件下,完成运动目标的检测和跟踪。但该方法计算十分复杂,并且很容易受到光照、噪声等影响,实时性差。

本文主要通过背景差分法,采用OpenCV技术实现混合高斯模型建模,提取运动目标。

1算法实现

1.1背景差分法

通过背景差分法检测运动目标,首先是通过一段视频重建出运动目标所处的背景,然后将当前帧与背景帧进行差分,最后对差分结果进行分析处理。

设定一个阈值T,将像素值的变化小于阈值的点判定为背景点,反之为运动目标点,用式(1)对差分图像进行二值化,背景点填充为黑色,目标点填充为白色,可以得到粗略的运动目标区域:

dk(x,y)为第k帧视频图像与背景图像的差分图像。 应用背景差分法进行运动目标检测流程如图1所示。

1.2混合高斯背景模型建立及更新

在混合高斯模型[4]中,认为像素之间的颜色信息没有关联,各像素点的颜色值变化符合高斯分布。通常用K (一般3~5)个高斯模型表征图像中各个像素点的特征, 混合高斯模型的参数主要为均值和权值。先预定义K个混合高斯模型,得到新一帧图像后对其更新,检测当前图像的每个像素点中是否有与K个模型中的任意一个匹配,如果有,则该像素点判定为背景点,反之则为目标点。

假设像素点在时刻t的样本值为xt,在第i个高斯分布所对应的权值为ωi,t,ηi,t为相应的概率密度数,μi,t为第i个高斯分布的均值,∑i,t为协方差矩阵,则该像素点的概率密度函数表示为:

应用混合高斯模型进行运动目标检测的流程如图2所示。

2实验结果与分析

采用Microsoft Visual C++和OpenCV编程实现混合高斯模型,用来检测运动目标,并用运动目标检测公共测试[5]视频序列对程序测试,测试结果如图3所示。

图3中:(a)、(c)为当前帧,(b)、(d)分别为(a)、(c)的运动目标检测结果,其中黑色表示背景,白色表示目标,绿色表示背景,被误检测为目标,红色为误检测的运动阴影, 蓝色表示未检测出来,即丢失的真实目标。

图3(a)的场景背景比较简单,运动的目标是行人,并且背景与运动目标之间的差异较明显,所以检测结果较好,结果中以黑色和白色为主,背景提取较为完善,运动目标检测也很完整。图3(b)的场景中有被风吹动的树叶,有目标的投射阴影,并且目标与背景的颜色差异不大,所以在检测结果中有较多的背景噪声,有部分运动阴影和目标空洞,但总体来说,GMM算法的效果还是不错的,真实目标区域较完整,其它错误可以通过形态学去噪、阴影抑制[6]、空洞修补[7]加以完善。

3结语

本文基于OpenCV函数库,运用混合高斯建模,实现了对运动目标的检测。此方法比较适合于在背景相对静止的情况下对目标提取,在有背景噪声影响时会有误检测,但总体来说,GMM算法对运动目标的检测效果还是比较好的,基本满足视频监控的使用要求。

参考文献

[1] HA J E,LEE W H.Foreground objects detection using multiple difference images[J].Optical Engineering,2010,49(4):1-5.

[2] 赵旭东,刘鹏,唐降龙,等.一种适应户外光照变化的背景建模及目标检测方法[J].自动化学报,2011,37(8):915-922.

[3] DESSAUER M P,DUA S.Optical flow object detection,motion estimation,and tracking on moving vehicles using wavelet decompositions[C].In:The International Society for Optical Engineering,Bellingham,WA,USA:SPIE,2010.

[4] STAUFFER C,GRIMSON W E L.Adaptive background mixture models for real-time tracking[C].Proceedings of the Computer Society Conference on Computer Vision and Pattern Recognition,1999(2):246-252.

[5] GOYETTE N,JODOIN P M,PORIKLI F,et al.Changedetection.net:a new change detection benchmark dataset[C].In:IEEE Computer Society Conference on Computer Vision and Pattern Recognition Workshops,Piscataway,NJ,USA:IEEE,2012:1-8.

[6] 屠礼芬,仲思东,彭祺.自然场景下运动目标检测与阴影剔除方法[J].西安交通大学学报,2013,47(12):26-31.

Opencv软件 篇2

在智能监控系统中, 绊线检测是一项重要的智能识别并自动报警技术。所谓“绊线”, 是用户根据自身实际的需求, 在视频图像上添加带有标示方向的虚拟警戒线。在监控视场范围内, 当有运动目标穿越警戒线时, 即图像前景目标像素点集与和图像上的绊线像素点集有交集时, 系统自动产生告警, 提示安保人员及时处理。

根据实际应用场景, 绊线检测可以简单分为两种。一种是单绊线检测:系统首先要从前面连续N帧图像中找出运动目标, 然后分析其运动方向, 当该运动目标跨越绊线的时候, 再与用户定义的穿越绊线的规则比较, 最终判定是否符合穿越规则, 是则进行报警, 典型的应用是检测高危区域闯入。另一种是双绊线检测:运动目标无论从哪个方向穿越绊线, 只要该目标像素点集与绊线像素点集发生交集, 系统就进行报警, 典型的应用是检测围墙攀越。

绊线检测的实现重要关注两个问题:一是运动目标检测并跟踪, 二是绊线判定。本文使用Intel公司开发的Opencv (Intel Open Source Computer Vision Library) 函数库, 调用由其提供的运动目标检测跟踪的框架。该框架实现了运动目标的实时检测跟踪, 并为目标设置唯一ID进行目标匹配, 较传统的基于颜色直方图的欧拉距离目标匹配方法不受目标衣着颜色等因素的影响, 计算复杂度下降, 准确度和鲁棒性都有很大提高。并且为了满足以不同的角度, 可灵活对监控场区进行监测的要求, 依托于数学坐标轴, 根据绊线斜率的有无, 把单、双绊线都均再分为两类。本文最终实现的方法是在对运动目标进行更快捷准确的匹配识别的基础上, 并实时监测运动目标像素坐标的变化, 判定是否与绊线直线方程有交集, 由此制定出可以灵活对防区进行监测的绊线判定规则。

1 基于OpenCV的运动检测

1.1 OpenCV简介

OpenCV是由Intel公司资助开发的一套可免费使用的开源代码库, 其由一些C函数和C++类所组成, 相当于为图像处理及计算机视觉在实际工程中的应用而设计的一个类库。

OpenCV常用来实现对图像的一些高级处理, 比如特征检测与跟踪、运动分析、目标分割与识别以及3D重建等。与其它计算机视觉工具相比, OpenCV的优点有:开放的C和C++源码;基于Intel处理器指令集开发的优化代码;统一的结构和功能定义;强大的图像和矩阵运算能力;方便灵活的用户接口;同时支持MS-Windows, Linux平台。

1.2 运动检测与跟踪实现

OpenCV编程环境下, 运动物体的数据结构表征为团块。

OpenCV提供了一个运动目标跟踪的框架, 逐帧传入图像, 就可以检测到视频图像中所有的运动团块。为了实现上述功能, 可以将整个过程细分成如下几个模块实现, 如图1所示:

整个框架中, 其中以下三个模块最为重要。①前景检测模块:输入数据为当前视频帧, 输出为当前帧图像的前景掩码。前景掩码是一个和输入的视频帧具有同样大小的二值图像。②新团块检测模块:输入是前景检测模块的结果和已经检测并标定的团块, 输出的结果是新检测到的团块, 即新进入监控范围的目标的位置和大小。③团块跟踪模块:使用新团块检测模块的结果初始化该模块, 并跟踪新进入的团块。

对于上述框架中的运动目标检测只是简单实现, 对于复杂环境下检测效果较差。本文自定义其中前景检测模块。常用的运动目标检测算法有:帧差法对光照的变化适应性强, 但由于运动目标上像素的纹理、灰度等信息比较相近, 不能检测出完整的目标;背景差分算法能够准确和实时完成运动目标提取, 能提供最完全的特征数据, 但对于动态场景的变化比较敏感。显然两种方法存在互补性, 为了能在复杂的动态场景中提取完整且准确的前景目标, 本文研究了一种将帧差法和背景差分相结合的运动目标检测方法。算法流程如图2所示:

通过对输入的视频帧分别用帧差法和背景差分法得到的运动区域, 调用cvOr () 函数进行异或处理。此方法可以让帧差法和背景差分法得到优势互补:不仅对如光照和外来无关事件的干扰有较好的抑制, 而且能够提供最完全的轮廓数据。Bx (i, j) 为区域合并后 (i, j) 点的像素值, 若大于阈值T, 则为前景目标像素。现采用OTSU方法求取阈值。该方法有简单, 处理速度快的特点, 是一种常用的动态阈值选取方法。基本思想是:把图像中的像素按灰度值用阀值T分成两类C1和C2。C1由灰度值在[0, T]之间的像素组成, C2由灰度值在[T+1, L-1]之间的像素组成, 按下式计算两类之间的类间方差值:

式中, w1 (t) 、w2 (t) 分别为C1、C2所含的像素数。μ1 (t) 、μ2 (t) 分别为C1、C2所有像素的平均灰度值。让T在[0, L-1]范围依次取值, 使σ2最大的T值即为OTSU法最佳阈值。再对经过二值化的图像做形态学处理, 增强图像效果即可准确地得到边界完整的运动目标。

通过自定义的前景检测模块成功提取出上一帧中的运动目标后, 送入后续的新团块检测模块, 得到团块特征信息。然后根据目标的特征信息, 建立跟踪模型, 获取目标的运动轨迹。最终对每一个已被跟踪的轨迹, 利用卡尔曼滤波器预测该轨迹在当前帧的团块的位置和大小, 完成前后帧的目标匹配。具体实现流程为:

(1) 从前景图像提取所有团块, 即提取运动目标外部轮廓。根据轮廓的最小外接矩形框得到团块的高度和宽度, 由公式2计算团块的质心坐标。质心用Ctr表示。

(2) 由上一帧中团块位置及大小对卡尔曼滤波器进行初始化, 并预测当前帧的团块的位置和大小。

(3) 对每个跟踪轨迹进行处理, 寻找离上一帧里的团块最近的当前帧里的团块, 由此更新卡尔曼滤波器状态。最终将此团块加入到跟踪序列中并对新团块赋唯一标号, 即ID。

2 绊线判定

2.1 绊线绘制

本文中绊线绘制是由程序直接在视频图像上绘制。如图3、图4所示:封闭的坐标轴为模拟视频图像。根据视频画面特点, 原点坐标位于左上角位置。为了实际应用方便, 可以灵活地以不同视角对监控场区进行监测:把单双绊线再各分为两类, 一类绊线有斜率, 另一类绊线无斜率 (图中实心线为绊线, 虚线箭头所指为绊线警戒方向) 。

2.2 绊线规则制定

本文双绊线判定方法与单绊线判定方法一致。为了保持程序的通用性, 只是在单绊线判定的基础上加上对应方向的单绊线检测。设置绊线类型识别变量ArrowTipe。ArrowTipe==0时, 进入单绊线检测;ArrowTipe==1时, 即为双绊线检测, 如图5中虚线部分。以下重点说明单绊线判定:具体的思路是要在前面的视频帧中找到运动目标, 分析其运动方向, 判断与绊线警戒方向是否一致。如果一致, 则该目标为可疑目标;并在当前视频帧中, 判定该可疑目标是否穿越绊线。该思路主要涉及到目标追踪中的目标匹配问题。本文实现目标匹配的方法基于上述运动目标跟踪框架:该框架为运动目标在前后帧中分配统一且唯一的识别ID。如图5所示, 绊线检测具体算法流程如下:

(1) 从当前视频帧中, 检测出防区内所有运动团块, 并存入动态链表1。

(2) 根据绊线起始点与终点横坐标是否相等, 判定绊线有无斜率。是则进入判定①, 否则进入判定②。

(3) 绊线类型为0, 进入单绊线判定。分别遍历链表1和链表2 (该链表存有上一帧中团块) 中所有团块, 逐一得到两者中ID对应相等的团块, 即找出前后视频帧中同一目标。

(4) 判定该目标在图像上是否沿警戒方向相对于绊线位置发生变化, 是则上述得到的即为穿越绊线的团块, 执行 (5) 。否则, 继续执行 (3) , 寻找下一目标。

(5) 在团块刚开始穿越绊线时, 即团块中心坐标在绊线上时, 调用cvRectangle () 函数得到团块最小外接矩形边界框, 标定该团块, 并进行计数, 记下发生绊线的次数。

(6) 在流程最后把动态链表1中保存的团块复制给链表2。在处理下一帧时, 链表1在步骤 (1) 中被更新, 链表2不变。

判定团块相对于绊线的位置的方法为:绊线有斜率k时:如图6所示, 绊线方程为y=kx+b。以斜率k过警戒线 (图6中虚线2) 的起始坐标 (Xa1, Ya1) 作直线交Y轴于点 (0, ba1) 。以斜率k过团块中心坐标 (Xi, Yi) (i=1, 2, 3…) 作直线交Y轴于点 (0, bi) 。若 (bi-b) 与 (ba1-b) 的乘积小于0, 则团块在绊线左边, 反之则在右边。绊线无斜率时:如图7所示, (Xi-Xt1) 与 (Xa1-Xt1) 的乘积小于0, 则团块在左侧, 反之在右侧 (Xt1为图7中绊线起始点横坐标) 。

3 实验结果与误差分析

绊线检测实验在校园内选择不同的路段进行, 首先在视频图像上画绊线, 并分别对单、双绊线进行实验测试。校园内行人或车辆进入监控区域, 穿越绊线所在位置, 以此来模拟绊线事件。文中单、双绊线方法一致, 下文只对双绊线检测的测试结果进行说明。路段中分别以从右到左、从左到右两个方向进行绊线穿越, 图中上下数字对应的为该方向发生的绊线次数。

路段一:如图8所示, 绊线无斜率。实验最终结果, 见表1。

路段二:如图9所示, 绊线有斜率, 且摄像头所在位置较路段一时距监控场区较近。实验最终结果见表2。

实验数据表明, 本文中的绊线检测方法已有较高的准确率。在实验过程中发现, 该方法不受运动目标衣着颜色的影响, 不会因为两个目标衣着颜色相近产生误判。实验误差类型多为漏检。主要原因为运动目标间距过近时, 造成目标粘连, 即多目标被误判为一个目标。尤其是在摄像头较远, 运动目标间距被拉小的情况下。

4 结束语

本文主要的工作是自定义OpenCV运动团块检测框架中的前景检测模块, 并为了可灵活对防区实施不同角度监测, 将单、双绊线检测根据绊线斜率的有无再各自分为两种判定情况进行实现。运动目标检测是绊线检测的重要前提, 直接影响绊线检测的准确与否。绊线检测的核心问题是绊线规则的制定, 具体实现方法:检测视频图像内所有运动团块, 分配ID进行目标匹配, 并实时跟踪;当有团块的中心坐标与绊线发生交集时, 画框标定穿越目标。经过实验表明, 本文所给出的方法可以准确有效地实现绊线检测。鉴于实际场景中的复杂性和多样性, 算法还需要进一步改进。对于目标粘连分割以及人、车目标进行分离检测是后续研究的重点。

摘要:基于OpenCV视觉库针对绊线检测进行实现。从监控防区内运动目标检测与跟踪入手, 调用OpenCV自带的运动目标跟踪框架, 自定义其中的前景检测模块, 完善运动检测。根据既定的绊线检测规则进行异常入侵行为分析、监测, 并实时报警。该技术可应用到智能视频监控系统中, 从而完成对监控防区的智能管理。

关键词:智能视频监控,运动目标检测,绊线检测

参考文献

[1]刘瑞祯, 于仕琪.OpenCV教程基础篇[M].北京:北京航空航天大学出版社, 2010:405-427

[2]柳宗浦, 赵曙光, 潘翔鹤等.一种融合Kalman预测和Meanshift搜索的视频运动目标跟踪新方法[J].光电子技术, 2009, 29 (1) :30-33

[3]黄孝建.基于视频图像的绊线检测方法研究[J].计算机与现代化, 2011, 32 (6) :29-32

[4]白瑞, 姜明新.基于OpenCV的运动目标检测与跟踪[J].电子设计工程, 2012, 20 (12) :125-128

[5]洪虹, 李文耀.基于背景重构的运动对象越界侦测方法[J].电视技术, 2012, 36 (7) :123-126

[6]刘瑞祯, 于仕琪.学习OpenCV (中文版[M].北京:清华大学出版社, 2009:350-406

[7]李健, 孔令寅.基于OpenCV的立体匹配算法的研究与实现[J].计算机工程与设计, 2013, 34 (2) :566-569

[8]孙涛, 陈瑞平.视频监控系统中一种运动目标的检测方法[J].电视技术, 2012, 36 (7) :127-129

上一篇:自控静脉镇痛泵下一篇:当前的素质教育