一种基于视频技术的车辆检测和计数算法
扫描二维码
随时随地手机看文章
引言
随着视频监控的普及,智能视频监控是当前备受关注的前沿技术,该技术主要利用计算机视觉和视频分析的方法对视频图像序列进行自动分析,从而实现对动态场景中目标的定位、识别和跟踪,分析判断目标行为,得出对图像内容含义的理解以及对客观场景的解释。在视频监控系统中,车辆的检测在交通方面意义重大。同时随着视频车辆检测技术的发展,人们已不满足于仅仅检测出车辆,在国外,FHWA(美国联邦公路局)就进一步利用此技术来提取交通参数,如交通流量,十字路口的车辆转向信息等。
对车辆的检测和计数,可以检测交通路口的车流量,通过对车辆的检测可以实现对车辆堵塞和车祸进行报警等功能。
1 车辆检测和计数系统的实现步骤
1.1 提取目标物体
对车辆的检测,首先要把“车”的图像从背景中提取出来。由于针对交通系统中的车辆,特别是交通路口的车辆,一般都是运动物体,因而可以运用运动目标检测技术,将车辆从静止的背景中分离出来再进行分析。视频监控中常见的运动目标检测算法主要有3类:光流法,邻帧差法和减背景方法。光流法的优点是对动态环境有很好的适应性,但复杂度高,抗噪性差,难以符合视觉监视实时处理的要求;邻帧差法虽然算法简单,易于实时监控,但难以获得精确目标,容易产生空洞;减背景技术是最为常用的,它把序列中的每帧与固定的静止参考帧(如静止的背景)做帧差,若像素的差值大于某一阈值,就判断此像素物体为运动目标上的。阈值操作后得到的结果直接将给出了目标的位置、大小、形状等信息。综合分析,这里采用减背景法。
运动目标检测的视频处理过程如图1所示。
图1运动目标检测的处理过程
1.2 常用检测方法的原理及实现方法
1.2.1 背景差法
背景差法⑵首先选取背景中的一幅或几幅图像的平均作为背景图像,然后把以后的序列图像当前帧和背景图像相减,并进行背景消去操作。若所得到的像素数大于某一阈值,则判定被监视场景中有运动物体,从而得到运动目标。这种差分法对于复杂背景下的运动物体检测效果较好,一般能够提供最完整的特征数据,而且计算量小,实用价值大。缺点是受光线、天气等外界条件的影响较大。通常可以通过背景建模来进行背景模型的动态更新以实现背景图像的建模和自适应更新,以减少场景变化对视频图像检测分割的影响。
背景差法的实现原理和实现方法如下:设在To时刻保存一帧图像做为背景图像保存为backimage,然后循环从视频中取一帧图像,设T;时刻取一帧图像保存为temp临时图像,将backimage和temp
相减即得到差值图像difference,再对difference进行灰度变换、二值变换等处理,即可较好的分离出前景物体。也可以先将backimage和temp转换成单通道灰度图像再进行相减,这样把两幅度的灰度值相减,如果backimage和temp完全一样,则相减的值为0,即为一幅全黑的图像;而两幅图相减后不为0的区域即为前景物体所在区域。其差分公式如下:
difference(x,y)=temp(x,y)一backimage(x,y)
在OpenCV中实现差分该功能的函数是:
cvAbsDiff(backimage,temp,difference)
1.2.2 二值化
一幅图像包括目标物体、背景还有噪声,要想从多值的数字图像中直接提取出目标物体,最常用的方法就是设定一个阈值T,用T将图像的数据分成两部分:大于T的像素群和小于T的像素群。这是研究灰度变换的最特殊的方法,称为图像的二值化。把图像转换为只有黑白两种颜色的图像,会便于图像的后期分析与处理,也易于观察。
二值图像的获取可以通过下面方法得到:
1.2.3 形态学滤波法
在实际处理过程中,由于传感器本身的光学特性以及传输线路的影响,可能会在每一帧图像中产生一定的噪声,从而给目标检测带来困难。为提高目标检测的有效性和正确性,有必要对Bi(x,y)图像进行形态处理以消除噪声。
其实现方法是对二值化后的图像进行膨胀、腐蚀等形态学滤波,这可以在OpenCV中由函数Smooth()和DilateO及ErodeO实现,其中腐蚀Erode()和膨胀Dilate。对滤波的效果起主要作用。
1.2.4 背景建模方法
背景差法的原理很容易理解,但是,这样的减背景很容易受光照等环境物体的影响,背景差法的研究主要集中在背景建模的研究上,即主要研究如何实现背景图像的建模和自适应更新m,使背景能够不断接近理想状态,以期减少场景变化对视频图像检测的影响。目前的背景建模E方法主要有时间差分法(temporaldifference),中值滤波法(average\medianfiltering),W4方法、混合高斯法(mixtureofGauss)、隐马尔科夫模型(hiddenMarkovmodels,HMM)等。
本设计中采用运行期均值法来实现背景建模。运行期均值法(runningaverage)是中值滤波法的改进算法,其思想是通过引入学习率a来体现背景图像对场景变化的响应。a越低,则前景的变化越不会影响背景,a一般取0.05左右,可以根据反复实验调节a的大小,以找到最合适的a值。
设实时加权的图像为movingAverage,则:
movingAverage(x,y)=(1—a)•movingAverage(x,y)+aimage(x,y)
上述公式中,右边的movingAverage(x,y)和image(a:,y)均为前一时刻匸―i时背景图像和当前图像的灰度值,公式左边的movingAverage(x,y)为当前时t1的背景图像各像素的灰度值。用变换过后的movingAverage优化temp,即可实现背景的建模,这样可减少环境变化对背景差法的影响,提高背景差法的适应性。
1.3 分析目标物体
通过对视频中运动车辆的提取,一般都可以得到提取的目标物体(即车辆),接下来就可以对系统进行车辆计数功能的设计。
算法中,通过函数cvFindContours()来实现在二值图像中寻找轮廓,并用函数cvBoundingRect()获得矩形框的数据。
可以通过对图像中矩形框的数目的计算来对车辆的数目进行计数,但是该方法也存在以下几个问题:
首先,对视频的处理实际上是把视频分成一帧一帧的图像进行处理,单纯的根据矩形框的数目进行车辆计数会造成车辆的重复计数,因为同一辆车会在几帧甚至几十帧图像中出现;
其次是对停止车辆的处理,若车辆驶入画面停了一段时间又继续前进,那么,就必须要防止车辆的重复计数;
第三是车辆重叠问题,由于二值图像的缺陷,重叠的车辆会被同一个矩形框圈出,从而造成车辆的少计数,因此,这里也需要通过算法对这个问题进行处理和解决。
在算法中,可循环对每一个圈出的矩形框进行处理。对一个矩形框,首先求取其中心点的值aryX,以及宽、高等基本数据。为了避免车辆的重复计数,可利用边界进行计数,并定义两个边界变量closetoleft和closetoright0操作时可首先根据aryX的值判断车辆是否处于边界,若处于边界且未完全进入画面,则不断更新边界值,即令closetoleft(closetoright)=aryX,并根据上一帧图像的边界量closetoleft(closetoright)判断车辆是否刚刚进入画面。若刚刚进入画面,则根据aryX和preX的比较来判断车的行驶方向是进入还是出去,并对于刚进入的车辆进行计数,其余情况不计数,这样就可以避免重复计数,这样,即使车辆在画面中停顿后又开始运动也不会重复计数。实现这一功能的算法流程图如图2所示。
在寻找轮廓过程中,由于二值图像的缺陷会把重叠在一起的车辆算成是一个大的矩形框,因此,如果只在找到符合条件的矩形框后就令numcar自增1,则可能会造成车辆的误测,会少计算重叠的车辆。这里可以利用算法解决,因为在实际路况中,车的大小是有限的,如果程序框出的矩形框面积过大,则大部分原因可能是车辆重叠造成的,所以,当矩形框面积过大时,通常认为是多辆车重叠的结果,设计时可以设定几个门限面积值,然后根据矩形框面积的大小是否大于门限面积值来决定numcar自增几次。门限面积值的设定可以通过反复的实验来确定,一个最合适的值可使误差达到最小。实现该功能的流程图如图3所示。
图3车辆计数流程图
当然也可以采用其他方法:可限定一个时间阈值T,检测到某一目标车辆在背景中停滞时间过久或者活动太小以至于可以忽略,则可认为该地点发生了交通堵塞或者车祸事件,此时系统则应发出报警。
2 车辆检测技术与程序实验
本设计是基于OpenCV库来进行的,可在Windowsxp及Visualc++6.0的环境下运行调试,本实验所采用的视频序列是分辨率为352X240的AVI格式的彩色视频流,其处理速度为24帧/s。
2.1 背景的获取和更新
现举例说明,图4所示为开始提取的背景,图5为有一辆车驶过时的背景。比较图4和图5可以看到,虽然有车横穿场景,但是背景并没有任何变化,这样,就可使用运行期均值法,在每一步都对背景进行更新和均值运算,从而避免误差的累积,提高背景的适应性。
2.2 形态学滤波
一般情况下,在视频中提取运动物体,不可避免地会产生噪声,对图像进行形态学滤波可以在一定程度上消除这种噪声,提高目标检测的有效性和正确性。图6所示为形态学滤波处理前后,车辆的提取效果。实际上,若不进行形态学滤波,对运动物体的提取十分不准确,因而可能无法进行计数等后续处理。而形态学滤波后,则可以大大提高计算的准确性。
图7所示为视频中只有一辆车驶过的情况,实验证明,若画面中车辆一辆一辆地顺序驶过而无重叠,其计算流量的准确度可达99%以上,但是,在实际路况中,这种情况发生的概率非常小。而图8所示为有两辆车重叠时的车辆计数,该情况下,本程序仍可以正确地计算出车辆的数目。
图9中,车辆将要驶出边界,这种情况下,程序仍然能将运动物体轮廓框出,但这个时候,矩形框的面积均与物体本身面积差距很大,如果此时仍然对矩形框进行计数,就会产生很大误差,而本文的边界计数法恰好可以避免这一误判。
图10所示是当一段视频分析完成后输出计数结果。由于程序采用了边缘计数法,所以,对视频监控的角度有一定要求,视角最好与车辆呈90°,角度条件越好,准确度越高;反之,如果角度条件不好,则测试的准确率可能也会下降。
需要说明的是,本系统仅适用于白天,即日光条件下对车辆的计数。而对于夜晚车辆的计数,则可以采用数车灯的方式,对此,本文不做介绍。
3 结论
本文对基于视频的车辆检测技术算法的实现和实验结果进行了介绍,通过分析边界值,可以避免重复计算车辆。考虑到车辆重叠的情况,利用该算法进行处理,可以减少车辆计数中的各种误判。基本可以实现交通路口车辆计数功能。
该算法的优点有:
(1)该算法能自动提取背景并自动更新背景;
(2)在角度合适条件下,计算车流量的准确度可达98%以上;
(3)实时性好,可同步处理视频;
(4)对视频噪声有较强适应性;
(5)可以长时间无故障运行,并且操作简单。
事实上,该算法也存在一定的问题,需要进一步的工作。
由于智能视频监控系统的实际应用环境比较复杂多样,如何使智能视频监控系统实现快速、高准确性和高鲁棒性的实时监控,将是一个长期的研究课题,从目前来看,该算法还有很多问题需要进一步的深入探索。
无论如何,该设计基本完成了车辆的检测与计数功能,但是系统的鲁棒性不高,对视频的角度有要求,而且角度对系统的准确度影响很大,此外,还有车辆重叠、车辆速度等因素影响系统的计数精度。为了提高该系统的准确度和鲁棒性,解决系统存在的问题,本文特为今后的工作提出以下几种设想:
(1)对于车辆重叠问题,从模式识别角度可以釆用升维的方法来分开重叠车辆,如从正面和侧面两个角度联合对车辆进行检测和计算,这样可以使系统的鲁棒性和准确度增加,但同时也会增加该程序的复杂度和成本。
(2)加入角度判据,可以预置摄像头与汽车的角度,在对车辆的检测中可通过角度的换算来增强系统的准确性,减小角度的限制,但这种方法适应性差,对本设计中釆用的矩形框计数法无法应用,而且对该角度重叠车辆仍然无法分离。
(3)不采用二值图像,直接运用彩色图像,通过车辆之间的色差区分车辆。如果色彩变化的边缘频谱密度大,还可利用一些图像的特点分割目标物体。当然,也可以解决重叠车辆和角度问题,但是要充分考虑光照对色彩的影响。