随着经济的发展以及城市化进程的逐步加快,我国的车辆数量正在迅速增长,这样就给城市交通带来的严峻的挑战——交通拥堵。交通拥堵不但使事故发生率加大,而且也加剧了环境污染,造成了资源浪费。为了缓解交通压力,减少车辆延误和环境污染,实现智能交通信号控制是建设资源节约型社会的必然选择。
在我国,现如今交通信号控制系统主要采取定时控制的方式。定时控制不能根据车流量自动调节红绿灯时间,必然会造成车辆延误及交通拥塞等情况。因此根据具体的车流量来控制红绿灯时间,可有效的分配交通资源,减少交通拥堵。
传统的基于视频的车流量检测方法包括光溜检测法,帧差法,背景消减法,边缘检测法等,这些方法运算复杂,处理数据量大,且易受外部环境的影响。因此文中采取一种设置检测线的车流量检测的方法,通过在车辆行驶的道路前方垂直于道路的方向设置检测线,当车辆经过时车身阴影会造成检测线灰度值的剧烈变化,进而即可统计出车流量。该方法简单易行,且处理的数据量小,运算速度快,可得到较好的结果。
1 算法设计
1.1 视频预处理
预处理是实现算法的重要部分,首先将视频分成帧序列。设置于交通路口的摄像头拍摄到的视频一般是1秒25帧的标准视频格式,由于车辆一般在交通路口行驶速度不快,故而不需要十分密集的帧序列,为了减少数据处理量而又不影响实验结果,采取隔一帧取一次的方法,这样数据量即成为原来的一半。
将视频分成图像序列后,要将其转换成灰度图像,方可进行后续的工作,如图1所示。通过大量实验的验证,转换成灰度图像后,使用阈值0.4,再进行二值化,可以清晰的将车身、车身前的车影与道路明显的区分开来,如图2所示。
由图2可以看出,路面上有很多不连贯的黑色区域和黑点,这些噪声会对检测结果产生不利的影响,因此,将上述二值化后的图像序列再进行中值滤波,采用5*5的检测窗口,可以去滤掉图像上大部分的椒盐噪声,起到保护边缘信息的作用,如图3所示。
1.2 算法实现
由图2及图3清晰可见,经过二值化后的图像,车身前方的阴影呈黑色,路面呈白色,因此能把车身前方的阴影部分和路面信息清晰的分隔开来。当车辆行驶到某一位置时,车身前方的阴影一定会造成车辆前方的路面上的区域的灰度值发生剧烈的变化。因此,当发生一次剧烈变化,计数器计一次数,这样即可计算出行驶过的车辆的数量。
在车辆行驶的道路前方,设置一虚拟检测区域,便可以实现上述过程。传统的虚拟检测区域可以分为3类:基于特征点、基于检测线、基于检测窗口。于检测点包含的信息量太少,且易受噪声干扰;而检测区域过大,当车辆经过时,容易造成重复计数,因此文中将采取基于检测线的检测方法。如图4所示。
当车辆即将行驶到检测线上时,车身前方的阴影会迅速覆盖检测线,造成检测线上的灰度值发生剧烈的变化。通过设定阈值,若灰度变化大于阈值,可判断为有一辆车到达,若灰度变化小于阈值,就判断为没有车辆通过,这样便完成了整个检测过程。
由上可知,我们只需处理每一帧图像的一行像素值,因此大大减少了数据的存储空间,从而使计算机的处理速度更快。在实际处理中,用前一帧图像减去后一帧图像,比较差值图像检测线位置的像素值,此处通过大量实验数据,设定阈值为15,若其值大于该阈值,则可判断有车辆通过,若小于该阈值,则没有车辆通过。所有检测线位置像素值做差后,可得到如图5所示的数据曲线。
由图5可见,图像的正值尖峰,可看做一辆车的到来,通过设定阈值,可将小的尖峰部分滤掉,小的尖峰部分是车身及车窗造成的干扰,故通过此方法,可得到具体通过路口的车辆的数量。
统计宽阔路口的车流量,可将整个路口分成几个车道,对几个车道分别用此方法进行统计,最终求和,即可实现车流量的统计。
2 基于FPGA的硬件仿真
FPGA即现场可编程门阵列,它是在PAL、GAL、EPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。FPGA的使用非常灵活,同一片FPGA通过不同的编程数据可以产生不同的电路功能。FPGA在通信、数据处理、网络、仪器、工业控制、军事和航空航天等众多领域得到了广泛的应用。
文中通过使用matlab对上述算法进行仿真,我们可以得到视频图像每一帧的像素信息,并将该信息作为一个数据矩阵储存到后缀名为dat的二进制数据文件中,作为FPGA硬件仿真的输入激励,即像素点检测的输入部分。
基于FPGA平台来完成实时算法的硬件实现,文中根据算法复杂度及资源使用情况,选取Xilinx公司的SpartanIIIXC3S50芯片完成实现。
XC3S50是Xilinx公司推出的SpartanIII系列中资源可用量较少的一款芯片,它包含768个slices、4块18x18乘法器、4块独立RAM(每块RAM容量为18K)。经过综合计算以及筛选,在节约成本的基础上,确定XC3S50为交通信号灯路口的车流量检测算法的硬件实现平台。
电路设计的开发环境采用ise12.4,并使用modelsim6.5se进行硬件电路仿真
如图6所示,视频帧切换脉冲到来时启动计数器进行时序控制计数,计数到37后保持,等待下一个脉冲的启动,在计数过程中将数值输出至其他电路。累加器接收到计数后,对每一帧更新的并行灰度信号进行逐位累加处理,当37位累加完毕,输出累加结果至减法器。减法器在时序计数控制下将当前帧的累加值与寄存器存放的上一帧灰度累加值做差,将结果输出至比较器。比较器将差值与门限值进行比较,如果超过门限,则输出一个高脉冲,作为有车经过的标志。
仿真采用的系统时钟为65.536MHz,对应时钟周期约为15.2ns,如图7所示,每一帧的处理时间仅需38*15.2ns≈577ns,可以满足快速处理的需要。图中output_signal为比较器输出的结果,即为监测是否有车辆通过的标志,该结果与matlab算法仿真结果完全一致。该算法实现简单,有很高的实时性和可操作性。
3 结束语
文中的算法是利用Matlab编程实现的,而硬件实现是在isel2.4+modelsim6.5se的环境下编译完成的。通过对一段3分48秒的交通路口视频进行验证,准确率在97%以上。文中与其他实现车流量统计的算法相比较,优点在于完成该算法的硬件实现,且就算法本身而言,实现简单,数据处理量小,处理速度快。但该算法自适应性较弱,容易受到外界干扰影响,需要进一步加强对检测算法的优化和改进研究,以提高检测算法的准确度和自适应性。