王泓淇, 陈守满, 文雅宏, 周超凡, 赵东勃
(安康学院,电子与信息工程学院, 陕西,安康 725000)
伴随着智慧城市的快速建设和发展,高速公路和高铁的数量急剧增加,普通现场勘查的交通管理方式已不能满足客观要求[1-2]。智能化的交通系统正逐步成为解决交通管理问题的重要技术手段,也是我国“十四五”交通重点建设项目。与此同时,西成高铁和高速陕西段可称为中国“最穿越”的路段,它将穿越由20条隧道组成的134公里长的秦岭隧道群[3-4],隧道中车流量较大,行人、施工车和牲畜都会对行车造成一定影响,交通监控技术的发展显得尤为重要[5]。
由于隧道本身具有半封闭性、通达性低、情况不清等特点,秦岭隧道路段较多,隧道内外的光线过渡频繁,驾驶员相继经历“黑洞效应”和“白洞效应”的情况,其会导致交通事故频发[6-7]。并且在转弯口、盲区等特殊区域也存在安全问题。因此,行车的检测对智能交通监控有着很大的现实意义。
基于以上的原因,本文提出了一种智能行车检测系统,利用FPGA并行计算效率高,硬件成本低的特点[8],实现对前方道路进行实时监测,出现突发情况时,系统发出预警信息,极大地降低事故发生概率,确保了人民群众的生命财产安全。该系统将会给智慧交通智能化管理提供很强的实用价值和现实意义。
基于以FPGA为核心的行车检测系统的基本要求,采用FPGA设计中自顶向下的设计思想,将该系统大致分为四大模块:CMOS视频图像采集模块、SDRAM存储器模块、FPGA图像处理模块以及VGA显示模块。首先对OV7725的相关寄存器进行配置,实现图像采集,视频图像数据在图像预处理模块进行灰度化、中值滤波和Sobel边缘检测,之后通过SDRAM将数据进行缓存,并读取相邻两帧进行帧间差分,以并行方式将一帧图像数据进行腐蚀和膨胀处理[9-10],最后在VGA显示器上实时显示。整体的系统框架图如图1所示。
图1 行车检测系统框图
本文主要利用OV7725摄像头实现视频图像采集功能,其主要由I2C寄存器配置和驱动模块、CMOS图像采集模块构成。I2C配置和驱动模块主要是利用I2C的相关接口协议来配置OV7725传感器的内部寄存器,完成OV7725的初始化操作。CMOS图像采集模块的作用是接收和捕获来自OV7725的视频图像信号,完成行帧同步和16位图像数据的拼接。
根据手册的要求,在完成OV7725的SCCB配置之后,需要延时10帧,这样OV7725才能处于稳定状态。
1.3.1 图像灰度化处理
对于本设计来说,彩色视频图像序列数据量大,对图像进行灰度化可以减少图像数据量。通过CMOS摄像头寄存器的配置,采集RGB565格式的图像数据,通过高位补低位的方式将RGB565转化为RGB888,然后根据图像灰度转换公式将其转换成YCbCr格式[11],如式(1):
Y=0.299R+0.587G+0.114B
(1)
其中,Y表示亮度,也就是灰度,R、G、B分别表示红色色度分量、绿色色度分量、蓝色色度分量。
通过乘积、求和和移位三级流水线运算方式,可以提高其系统的运算速度。
1.3.2 中值滤波模块
中值滤波能够较好地滤除脉冲中的噪声,同时也保护了信号的边缘,使其不模糊。本设计选择3*3区域对图像进行处理,其计算方法是将3*3矩阵的每一行从大到小排序,然后用排序法求出最大组的最小值,中间组的中间值和最小组的最大值,最后对求出的3个值进行排序,这3个值的中间值就是此矩阵的中间值[12]。排序算法的思想如图2:
图2 中值滤波排序图
中间位置的图像数据表达式如式(2):
f(x,y)=med{f(x±k,Y±Z),(K≤(N-1)/2,
Z≤(N-1)/2)}
(2)
其中,f(x,y)表示处理后图像,K、Z表示二维模板(区域)。
由于灰度图像原始的边缘属于梯度区域,所以特征信息不够明显。Sobel边缘检测算法的作用滤掉大量的无效信息,从而减少目标检测过程中带来的干扰。
本设计中采用Shift_RAM IP核实现3*3矩阵,其与Sobel算子卷积得到目标像素的梯度值。最后,设置阈值条件,当像素梯度值小于阈值时,输出为0,当其大于阈值时,输出为1。Sobel卷积算子如图3所示。
此灰度图像包含2组3*3矩阵,分别是横向和纵向的。横向和纵向亮度差分的近似值是由图像进行二维卷积得到的。其表达式如式(3):
(3)
其中,A为原始灰度图像,Gx和Gy为通过横向边缘检测和纵向边缘检测的图像灰度值。
图像的灰度值可通过式(4)来获得,以此获得该方向上像素点的灰度值,G为图像梯度。
(4)
为了提高鲁棒性,可以使用无平方根的近似值,其表达式如式(5):
|G|=|Gx|+|Gy|
(5)
视频图像数据经过CMOS采集模块和图像处理模块后,需要进行缓存才能进行后续算法处理。对于一帧分辨率为640*480的灰度图像,需要2.34 Mbit(640*480*8 bit)的大小,FPGA内部的RAM空间不能容纳大容量的数据,因此需要大容量、高速的外部SDRAM存储器来实现图像存储。
对于OV7725来说,其输出像素时钟频率为24 MHz,经过图像采集模块后,时钟频率变为12 MHz。然而,VGA显示分辨率为640*480的图像时,驱动时钟是25 MHz。因此,需要对其调用IP核中的fifo模块,用来解决传输时钟不同步和数据不能交互的问题。
帧差分法主要通过对图像序列2个或者3个相邻帧进行差分运算来实现的。在本设计中,选择此方法是因为其邻接两帧间的间隔极短,可以将前一帧图像作为当前帧的背景模型,这样可以使其具有较好的实时性,并且具有更新速度较快,算法简单,计算量不大的特点。
利用如下表达式即可实现帧差分,其具体表达式为
(6)
其中,x1和x2为当前帧和上一帧在同一位置坐标的像素点灰色值,T为预设的参考分割阈值。
此模块主要利用形态学图像处理中开运算(先腐蚀后膨胀)的方法消除异常的噪声点和填充边缘存在的空洞问题,从而能够得到较为清晰的目标轮廓。其腐蚀和膨胀的具体表达式如下。
(1) 腐蚀运算
腐蚀运算可以将目标区域范围变小,寻找局部的极小值区域,消除图像中孤立的异常噪声点,使其目标图像的边界向内部收缩。其结果可以表示为
A⊗B=(x:Bx⊆A)
(7)
其中,A为二值化后的像素集合,B为腐蚀的结构元素。
(2) 膨胀运算
膨胀运算是腐蚀运算的对偶算法,它可以将目标区域范围变大,寻找局部的极大值区域,使其目标图像的边界向外部扩张,用来填补帧差分留下的空洞。膨胀结果可以表示为
(8)
其中,A为二值化后的像素集合,B为膨胀的结构元素。
本设计的显示模块采用IBM公司1987年提出的标准VGA接口,支持RGB和YCbCr两种图像格式。由于VGA标准接口只能接收模拟信号,因此该系统需要利用GM7123芯片将信号进行模数转换。
此系统采用的图像分辨率为640*480,帧率为60 Hz,驱动时钟为25 MHz,可以通过PLL IP核对系统时钟进行分频得到。
对于图像采集模块来说,编写Testbench仿真程序,在modelsim软件上对其模块进行仿真验证。为了较好地观察仿真结果和分析,在图像采集的仿真中将有效像素设置成12行8列。图4为CMOS图像采集模块局部放大图。
图4 CMOS图像采集模块仿真局部放大图
从仿真波形图4可知,当cam_href为低电平时,cam_data的数据不变,coms_frame_data没有输出有效数据;当cam_href为高电平时,coms_frame_vaild信号开始周期性变化,cam_data开始输入有效值,经过2个时钟周期,coms_frame_data开始输出有效数据,每行2个cmos_data的8位数据在cmos_frame_data中转换成为16位数据,完成RGB565格式的数据拼接,图像采集模块成功实现。
对于灰色图像中值滤波模块来说,编写Testbench仿真程序,在modelsim软件上对其模块进行仿真验证。为了较好的观察仿真结果和分析,在灰色图像中值滤波的仿真中将有效像素设置成12行8列。图5为灰色中值滤波局部放大图。
图5 灰色中值滤波仿真局部放大图
从仿真波形图5可知,将第一行、第二行、第三行的数据分别设置为:33,97,161;35,99,163;37,101,165。在一个时钟周期之后,对每行数据的大小进行排列,求出中值分别为97、99、101。由此表明,灰色图像中值滤波算法正确。
对于Sobel边缘检测模块来说,编写Testbench仿真程序,在modelsim软件上对其进行仿真验证。为了较好地观察仿真结果和分析,在Sobel边缘检测的仿真中将有效像素设置成12行8列。图6为Sobel边缘检测局部放大图。
图6 Sobel边缘检测仿真局部放大图
从仿真波形图6可以看出,将第一行、第二行、第三行的数据分别设置为:173,237,45;175,239,47;177,241,49。本设计将阈值Sobel_Threshold设置为250,其在一个时钟周期后得到Gx_tmp1、Gx_tmp2、Gy_tmp1、Gy_tmp2的值,再经过一个时钟周期得到Gx_data、Gy_data的值,时钟第三个上升沿到来时得到了Dim(即为Gxy)的值为512。与预设的阈值250进行比较,最后得到post_img_bit为1,此结果与实际值相一致。由此表明,Sobel边缘检测算法是正确的。
本设计模拟验证将通过电脑播放行车视频以达到模拟效果。其监测到的视频结果和处理过后的行车视频图像如图7、图8所示。
(a)
(b)图7 处理前的行车视频图像
(a)
(b)图8 处理后行车视频图像
从图8中可知,经过行车检测系统处理后的结果可以较好地验证行车检测功能的实现。
通过综合编译后,将工程下载至开发板,利用摄像头对学校门前的行车进行白天和夜晚实时监测,其监测到的和处理后的行车图像如图9~图12所示。
(a)
(b)图9 白天行车抓拍图像
(a)
(b)图10 白天行车检测系统处理后的行车图像
(a)
(b)图11 夜晚行车抓拍图像
(a)
(b)图12 夜晚行车检测系统处理后的行车图像
从图10和图12中可知,行车检测系统在白天和夜晚均可实现检测功能。但由于摄像头像素较低以及天气的影响,导致检测图像模糊,但总体实现了行车检测功能。
通过测试得知,由于雨天地面有积水,图像经系统处理后,会出现镜像图像(图12(b));在雾天,由于摄像头像素较低,会降低原始图像的清晰度,从而导致检测图像的重影(图10);夜晚由于摄像头像素以及车灯影响,导致检测车辆的部分信息丢失(图12(a))。
本文主要设计了一种以FPGA为核心的行车检测系统,利用FPGA并行结构的特点,提高了计算速度,结合边缘检测和帧差分图像处理方式,在VGA上能够实现行车的检测。该系统有较好的实用性,可以很好地应用在目标检测、智能视频监控领域,为各种复杂环境下的行车安全带来较好的保障。