基于机器视觉的公路车流量检测系统
时间:09-27
来源:互联网
点击:
3 软件部分
3.1 车流量统计算法
由于白天和晚上路面光强变化非常大,这对算法的适应性提出了更高的要求,为了能全天得到车流量的信息,所以整个算法将白天和晚上分别开来处理。程序结合当时光线的不同情况,对两种算法进行自动的切换,从而保障整个算法的运行环境。
3.1 虚拟线圈的选取
虚拟线圈的选取关系到检测算法的精度和速度,并且受到摄像头安装的高度和倾角,以及摄像头景深的影响。一般情况下,虚拟线圈靠近图像底部的位置,车辆的间距较大,便于检测。虚拟线圈越大,相对检测精度就越高,相应的算法执行的时间也会越长。由于整个系统要适 应各种路口、路面,所以虚拟线圈的选取交给了用户。我们用VC6.0开发了PC机软件,用户使用此软件,通过串口,对各个车道的虚拟线圈的大小和位置进行设置。
3.2 相邻检测帧的时间间隔
由于整个系统要与信号机通信,所以要求我们处理每条道路上图像的总时间不能超过0.25秒。这里选取每帧相隔0.125秒。
3.3 车流量检测算法
由于白天使用改进后的帧差法已经在PC上有很成熟的应用。如公式1所示:
i=1,2,3,......80, j="1",2,3,......10
在公式1中,E保存帧差后的检测窗平均值,R是当前帧检测窗灰度值,R'是前一帧检测窗灰度值,m,n为虚拟线圈的长宽,在此就不再赘述。
晚上的路面能见度比较低,算法主要是对车灯的识别。在晚上,车灯有很强的亮度,所以只要能正确的检测到车灯就可以进行车辆的测量。算法的干扰来自路面对车灯发出来的光线的反射。通过使用Matlab仿真试验后发现,二值化去噪以后,车灯的亮斑基本上是车灯的形状,而路面反光区向前发散,据此可以通过检测窗上亮斑的形状特征来识别车灯和路面反光区。夜间的算法如图2夜间算法流程图所示。对虚拟线圈二值化的阈值选取是通过大津法得到的,与经验法相比,大津法是通过计算方差得到阈值,环境适应能力比较强,但这也增加了算法的时间和空间复杂度。图像去噪是使用3×3的中值滤波器,我们对其进行了快速算法的改进,并且只对虚拟线圈进行。
采集到路面原始灰度图像如图4,图5为其二值化处理后的图像,图中矩形区域为虚拟线圈,线圈中有两个白色区域。以像素为单位,根据白色区域的最大长宽比确定是否为车灯。车灯对应的白色区域长一般长小于等于宽,如图6所示。路面反光对应的白色区域长大于宽如图9所示,虚拟线圈内的白色区域为路面反光。
4 系统基于DSP/BIOS的软件框架
系统软件开发环境为CCS,使用了TI提供的DSP/BIOS内核以及TI倡导的RF5软件参考框架。通过DSP/BIOS,配置了输入、处理、输出等线程,这些线程之间的同步通过旗语进行。使用DSP/BIOS内核,配置DSP/BIOS方便易行,便于更改,比传统方法有许多优势。使用DSP软件架构RF5(Reference Framework 5),大大缩短了开发时间,同时也最大限度的保证了代码的可移植性和健壮性。软件架构从下往上依次为CSL(芯片支持库)、DSP/BIOS以及Driver层,信号处理库层,算法标准层,这三层构成RF5,最上面一层是用户应用程序层。用户修改维护代码方便,只需要上层改动即可。
输入驱动采用TI公司提供的FVID类驱动,如图10所示,此驱动通过对结构体配置参数,实现DM642的IIC模块对视频采集口,以及对A/D转换芯片TVP5150的配置,使TVP5150输出PAL制式的数字视频流,并将采集到的图像通过视频口的FIFO写入到指定内存区。当图像采集完成后,通过旗语发送消息给处理模块,消息结构存储了图像数据所在内存的空间的首地址。随后输入模块等待输出模块的回复,以继续处理下一帧的图像。处理模块负责执行车流量统计算法。从输入模块发送的消息结构中提取图像数据地址,以进行图像算法处理,运算结果通过CPLD扩展的I/O口输出,将车流量的监测信息传给信号机。
5 代码优化
程序主要用C语言编写,一些核心的代码要满足实时性的要求进行了汇编优化。C语言程序优化的好坏直接影响程序的效率。程 序中广泛运用以空间换时间的方法来提高代码的运行效率。代码优化的方法比较多,主要的方法有:编译器优化,在编译时选择不同的编译优化选项,如-pm-oe选项;优化C语言编写的代码,加入常用的指示性信息如#Pragma MUST_ITERATE等;编写线性汇编程序,提高程序运行速度;编写汇编程序,实现软件流水。排流水线可以使用多种技术手段,如依赖图和迭代间隔时序表。在TI提供的技术文档中有详细描述,这里不再重复。
3.1 车流量统计算法
由于白天和晚上路面光强变化非常大,这对算法的适应性提出了更高的要求,为了能全天得到车流量的信息,所以整个算法将白天和晚上分别开来处理。程序结合当时光线的不同情况,对两种算法进行自动的切换,从而保障整个算法的运行环境。
图3夜间算法流程图
3.1 虚拟线圈的选取
虚拟线圈的选取关系到检测算法的精度和速度,并且受到摄像头安装的高度和倾角,以及摄像头景深的影响。一般情况下,虚拟线圈靠近图像底部的位置,车辆的间距较大,便于检测。虚拟线圈越大,相对检测精度就越高,相应的算法执行的时间也会越长。由于整个系统要适 应各种路口、路面,所以虚拟线圈的选取交给了用户。我们用VC6.0开发了PC机软件,用户使用此软件,通过串口,对各个车道的虚拟线圈的大小和位置进行设置。
3.2 相邻检测帧的时间间隔
由于整个系统要与信号机通信,所以要求我们处理每条道路上图像的总时间不能超过0.25秒。这里选取每帧相隔0.125秒。
3.3 车流量检测算法
由于白天使用改进后的帧差法已经在PC上有很成熟的应用。如公式1所示:
i=1,2,3,......80, j="1",2,3,......10
在公式1中,E保存帧差后的检测窗平均值,R是当前帧检测窗灰度值,R'是前一帧检测窗灰度值,m,n为虚拟线圈的长宽,在此就不再赘述。
晚上的路面能见度比较低,算法主要是对车灯的识别。在晚上,车灯有很强的亮度,所以只要能正确的检测到车灯就可以进行车辆的测量。算法的干扰来自路面对车灯发出来的光线的反射。通过使用Matlab仿真试验后发现,二值化去噪以后,车灯的亮斑基本上是车灯的形状,而路面反光区向前发散,据此可以通过检测窗上亮斑的形状特征来识别车灯和路面反光区。夜间的算法如图2夜间算法流程图所示。对虚拟线圈二值化的阈值选取是通过大津法得到的,与经验法相比,大津法是通过计算方差得到阈值,环境适应能力比较强,但这也增加了算法的时间和空间复杂度。图像去噪是使用3×3的中值滤波器,我们对其进行了快速算法的改进,并且只对虚拟线圈进行。
采集到路面原始灰度图像如图4,图5为其二值化处理后的图像,图中矩形区域为虚拟线圈,线圈中有两个白色区域。以像素为单位,根据白色区域的最大长宽比确定是否为车灯。车灯对应的白色区域长一般长小于等于宽,如图6所示。路面反光对应的白色区域长大于宽如图9所示,虚拟线圈内的白色区域为路面反光。
图4夜间路面灰度图
图5路面二值化后图
图6虚拟线圈
图7夜间路面灰度图
图8路面二值化后图
图9虚拟线圈
4 系统基于DSP/BIOS的软件框架
系统软件开发环境为CCS,使用了TI提供的DSP/BIOS内核以及TI倡导的RF5软件参考框架。通过DSP/BIOS,配置了输入、处理、输出等线程,这些线程之间的同步通过旗语进行。使用DSP/BIOS内核,配置DSP/BIOS方便易行,便于更改,比传统方法有许多优势。使用DSP软件架构RF5(Reference Framework 5),大大缩短了开发时间,同时也最大限度的保证了代码的可移植性和健壮性。软件架构从下往上依次为CSL(芯片支持库)、DSP/BIOS以及Driver层,信号处理库层,算法标准层,这三层构成RF5,最上面一层是用户应用程序层。用户修改维护代码方便,只需要上层改动即可。
输入驱动采用TI公司提供的FVID类驱动,如图10所示,此驱动通过对结构体配置参数,实现DM642的IIC模块对视频采集口,以及对A/D转换芯片TVP5150的配置,使TVP5150输出PAL制式的数字视频流,并将采集到的图像通过视频口的FIFO写入到指定内存区。当图像采集完成后,通过旗语发送消息给处理模块,消息结构存储了图像数据所在内存的空间的首地址。随后输入模块等待输出模块的回复,以继续处理下一帧的图像。处理模块负责执行车流量统计算法。从输入模块发送的消息结构中提取图像数据地址,以进行图像算法处理,运算结果通过CPLD扩展的I/O口输出,将车流量的监测信息传给信号机。
5 代码优化
程序主要用C语言编写,一些核心的代码要满足实时性的要求进行了汇编优化。C语言程序优化的好坏直接影响程序的效率。程 序中广泛运用以空间换时间的方法来提高代码的运行效率。代码优化的方法比较多,主要的方法有:编译器优化,在编译时选择不同的编译优化选项,如-pm-oe选项;优化C语言编写的代码,加入常用的指示性信息如#Pragma MUST_ITERATE等;编写线性汇编程序,提高程序运行速度;编写汇编程序,实现软件流水。排流水线可以使用多种技术手段,如依赖图和迭代间隔时序表。在TI提供的技术文档中有详细描述,这里不再重复。
自动化 传感器 嵌入式 德州仪器 CPLD 看门狗 电路 总线 收发器 NXP 仿真 滤波器 DSP C语言 相关文章:
- 汽车电子时代的自动化技术(10-02)
- 电动汽车分布式电机驱动测试系统研究与应用(07-02)
- 解读:为何你的电动汽车跑不远?(03-02)
- 关于CAN隐患的争辩(01-22)
- 基于单片机和数字信号处理器的汽车发动机点火线圈测试系统(03-12)
- MPC555微控制器与汽车电子(03-22)