基于OpenCV和DirectShow的交通运动目标检测算法研究

2012-03-06 09:37马宏锋王宏斌
华东交通大学学报 2012年3期
关键词:采集卡灰度背景

刘 馨 ,马宏锋 ,2,王宏斌

(1.兰州工业学院电子信息工程系,甘肃兰州730050;2.兰州交通大学电子与信息工程学院,甘肃兰州 730070)

随着我国经济建设的快速发展,城市人口和机动车辆急剧增加,交通拥挤堵塞严重,因此如何有效管理交通信息对解决城市交通问题起到越来越重要的意义。由于运动目标的视频图像序列中提供了丰富的信息,这是智能交通监控系统研究的热点,其中如何准确地检测出视频图像中的运动目标直接影响监控系统的效果。

本文采用VC++6.0、DirectShow和OpenCV2.0技术,实现了一个基于视频的交通车辆检测系统,主要工作体现在以下几个方面:1采用DirectShow技术获取视频信号中的图像帧;2采用OpenCV库对图像进行处理并提取出感兴趣的区域;3采用基于多帧平均算法的背景差分法将感兴趣区域中的运动车辆检测出来。

1 开发环境介绍

1.1 DirectShow介绍

DirectShow是微软公司在ActiveMovie和Video for Windows的基础上推出的新一代基于COM(compo⁃nent object model,COM)的流媒体处理的开发包,采用Filter Graph来管理整个数据流的处理过程,可从采集卡上捕捉数据并用于后期处理[1]。DirectShow可将应用程序和硬件设备隔离开来,它即支持各种媒体格式(如Avi,Mp3,Asf等),也支持WDM和VFW驱动的采集卡,为媒体流的采集提供有力的支持。

DirectShow的基本构建模块称为滤波器(Filter)组件,DirectShow可将数据流的处理过程分解成若干步骤,每一步由一个Filter来完成。Filter可根据功能的不同分为3类:Source Filters,Transform Filters和Ren⁃dering Filters。Source filters主要负责取得数据,数据源可以是文件、因特网、或者计算机里的采集卡、数字摄像机等;Transform Filters主要负责数据的格式转换、数据流的分解或集合、传输;Rendering Filters主要负责将数据送给声卡、显卡进行多媒体演示,或者将输出文件存储或发布。Filters之间通过Pin进行连接构成滤波器图(Filter Graph),通过Filter Graph Manager控制一系列的数据处理过程[2]。此时的媒体数据已经转换为一帧一帧的图像,便方便一张一张捕捉下来。

1.2OpenCV介绍

OpenCV是Intel开源计算机视觉库,主要由一系列C函数和少量的C++类构成,实现图像处理和计算机视觉方面的相关算法。OpenCV独立于操作系统、硬件和图形管理器,具有通用的视频图像载入、保存和获取模块,便于实时应用程序的开发。

OpenCV中封装了很多针对视频流的处理函数,主要有以下3种[3]:

1)利用HighGUI库实现对视频的输入、输出及处理,由于HighGUI库为用户提供简单的用户接口,方便获取摄像头和采集卡的视频流;

2)由于OpenCV集成了DirectShow模块,可采用该技术进行视频流处理;

3)采用Opencv提供的CvCam库对视频流进行处理。

这3种方法相比,HighGUI只是用来建立快速软件原型或试验用,在生产中应用还有待完善,CvCam最初作为多摄像头同步使用,在今后的OpenCV版本中逐步淘汰,故本文采用DirectShow模块进行视频流采集和处理。

2 车辆检测模块的设计

2.1 车辆检测模块的算法流程

本文设计的车辆检测模块是由采集设备和基于PC的软件处理系统组成,完成在PC机上进行现场采集,并实时处理视频图像的目的。从功能上来说该模块主要有3部分构成:

1)视频发送:主要负责提供视频图像信号;

2)视频采集:视频采集卡用PC机上的软件封装;采集到的原始视频信号将暂时存在PC机的内存上,由负责视频处理的Filter在内存中直接读取并进行相关算法处理,这样可以绕过硬盘读取速度的瓶颈,降低对硬件的依赖;

3)视频处理:将背景差分算法结合OpenCV库进行模块化封装。

2.2 图像采集模块的设计

图像采集模块是将摄像机传输过来的视频图像通过视频采集卡将其数字化,按每秒1~25帧的速率捕捉图像传输给PC机进行相关处理并显示。DirectShow定义了标准组件来处理流媒体数据,开发人员只需要调用API函数来实现对流媒体的控制,处理一般的视频捕捉问题。

这里定义了CDXGraph.cpp类封装了Filter Graph[4],

视频流每次经过Filter时,都会调用Transform函数进行数据处理,即将SourceFile的数据流转换为OpenCV可以处理的图像信息,并运用背景差分法对图像进行检测并输出。由于DirectShow和OpenCV中数据结构不同,但包含相同的数据内容,因此两者之间要完成数据的转换。也就是在OpenCV相关函数初始化后,将DirectShow所支持的数据结构中的图像数据拷贝到OpenCV所支持的图像数据部分,进一步完成车辆检测算法的核心部分。

2.3 基于多帧平均算法的背景差分法

背景差分法是利用当前帧图像与背景图像做差分来提取感兴趣区域的一种常用的运动目标检测算法[5]。本文基于背景差法的车辆检测算法思想如下:

1)使用DirectShow获取交通视频中一帧一帧连续的图像,并进行灰度化和平滑处理;

2)初始背景建立。为了不使初始背景失真,采用多帧图像统计求平均值的方法,避免因第一帧有运动目标而导致背景检测出现错误的物体团块。即在帧序列号frameNum<50,使用进行背景加权叠加。当fra⁃meNum=50时,采用平均值法求得的初始背景;

3)将当前帧与背景图中值滤波后进行差分运算,同时统计计算其直方图的灰度级;

4)采用OSTU算法求阈值,即计算从1至m的每个灰度级,并计算类内方差和类间方差,具有最大方差的T即为该阈值;

5)更新背景,并提取出感兴趣的区域,并将其二值化;

6)根据连续帧的二值化图像检测出新进入的车辆,从而完成车辆的检测。

由于交通场景中环境的变化,导致背景图像会随时发生变化,如果直接将当前图像和未更新的背景图像进行差分,会产生大量误差,因此如何建立合适的背景模型是背景差法需要解决的关键问题之一。

本文采用多帧图像统计平均算法[6]来确定初始背景图像,首先利用统计直方图的方法估计每一个位置处每一种可能像素灰度值出现的次数,出现次数最多的位置即作为背景点

该方法原理简单,但运算量较大,对背景变化的反应较慢。为了解决该问题,考虑将某点的灰度范围等分为若干个区间,这样原本统计某一位置处的像素灰度值的次数转变为统计该像素落在各区间段的次数,也就是计算落在每个区间内像素点的灰度值的平均值μ和区间的计数统计S[7]。

当前i帧在第n个区间上的均值μi,n的表达式可参照多帧平均的更新公式,即

式中:μi,n表示更新后的背景在第n个区间上的均值;μi-1,n( )x,y表示当前背景在第n个区间上的均值;α表示权值。

对帧中的每个像素点计算μi,n和Si,n后,比较不同区间段的Si,n,具有最大Si,n的区间的μi,n即为背景。

在OpenCV中提供了完成该功能的函数,其定义[8]如下所示:

其中:image为输入图像指针;acc为累加结果指针;al⁃pha为累加权重;mask为蒙板图指针。当mask为NULL时,image图像中的每一个像素点以alpha为权重累加到acc中;若mask不为NULL时,只将mask中对应像素值为1的image中的像素点的灰度值累加到acc中,这样就完成了不同区间内像素点的累加,之后将其累加值求平均值得到背景图像。

图1 多帧图像统计平均算法得到的背景图像Fig.1 Background image gained by the algorithm of multi-frame average

图1为多帧图像统计平均算法得到的背景图像,其中(a)为含有运动目标的原始图像;(b)为由该算法生成的灰度背景图像。从图中可见,背景图像总体保持了一个相对纯净的背景环境,为进一步运动目标的检测奠定了基础。

3 运动目标检测结果分析

本文实验环境如下:

1)硬件条件:PC机一台(奔4CPU,256M内存,20G硬盘);DeckLink采集卡一块(采用PCI接口)

2)软件条件:Windows xp系统,VC++6.0,OpenCV 2.0,DirectShow

实验中选取两个不同环境对系统加以评价,将漏检率和准确率[9]作为指标评价系统的性能。其定义如下:

检测结果如图2和图3所示。

图2 在场景1下运动车辆检测效果比较Fig.2 Effects of moving vehicle detection in the scene 1

图3 在场景2下运动车辆检测效果比较Fig.3 Effects of moving vehicle detection in the scene 2

两个场景下目标检测的准确性如表1所示。

表1 运动目标提取结果统计Tab.1 Statistic results of moving object extraction

通过实验结果可以看出,利用本算法可以比较完整地将运动目标从背景区域中分离出来,得到比较理想的检测效果;在PC机上每秒钟可处理18帧的图像,提高了算法的实时性和可靠性,但在下雨或光照强烈的场景下,车辆的检测准确率有所下降,还需进一步改进。

4 结论

以城市交通监控场景为背景,检测视频中的运动目标,采用VC+6.0、DirectShow和OpenCV技术设计实现了一个基于多帧平均的背景差分法的车辆检测系统。运动DirectShow对各种视频格式文件编码,实现对流媒体的捕捉、回放和帧操作,使用Opencv库对捕获的图像帧进行灰度化、平滑处理、帧间差分等处理,根据多帧平均的背景差分算法检测运动车辆。同时将该算法应用于不同场景下,进一步验证了该算法的正确性。通过实验结果可知,基于改进的背景差分法的交通检测系统能较好的检测出运动目标,算法的复杂度不高,实时性较好,具有较高的可行性和广泛的应用前景。

[1]陆其明.DirectShow开发指南[M].北京:清华大学出版社,2003:12-34.

[2]陈宁,刘宏刚,张向东,等.基于DirectShow技术的视频采集方案的实现[J].电子科技,2007(2):66-69.

[3]姜永成,周正干,任福君,等.基于OpenCV的移动机器人视频流采集与处理[J].机床与液压,2010(8):40-43.

[4]潘攀.基于DirectShow的视频监控采集系统[J].现代计算机,2010(8):156-158.

[5]张建飞.基于OpenCV的交通视频运动目标检测与跟踪[J].电子测量,2012(1):50-53.

[6] CHEUNG SEN-CHINGS,CHAND R.Robust techniques for background subtraction in urban traffic video[J].Proc SPIE,Video Communications and Image Processing,2004,53(8):881-892.

[7]石红芹,吕方亮.基于双置乱与奇异值分解的彩色图像水印算法[J].华东交通大学学报,2010,114(4):44-47.

[8]张学贺,张学东,丁宁.基于OpenCV的运动目标检测与跟踪[J].辽宁科技大学学报,2010(10):490-494.

[9]郭怡文,袁飞龙.基于背景差分的多车道车流量检测系统[J].电光与控制,2010,9(17):90-93.

猜你喜欢
采集卡灰度背景
采用改进导重法的拓扑结构灰度单元过滤技术
高精度AD采集卡性能测试及评价方法研究
“新四化”背景下汽车NVH的发展趋势
《论持久战》的写作背景
面向数控机床的多通道传感数据采集卡设计
基于最大加权投影求解的彩色图像灰度化对比度保留算法
并行高速采样在地震物理模拟采集中的应用
晚清外语翻译人才培养的背景
基于灰度线性建模的亚像素图像抖动量计算
PCI-e高速数据采集卡的驱动与上位机软件设计