APP下载

基于FPGA 的车牌定位系统研究*

2022-02-17傅建军

电子与封装 2022年1期
关键词:车牌灰度滤波

谢 杰,陈 政,傅建军

(中科芯集成电路有限公司,江苏无锡 214072)

1 引言

智能交通系统主要由交通管理系统、信息处理分析系统和电子收费系统组成,应用于高速公路的智能调度[1]、汽车停车场的智能管理以及城市交通的智能调度等领域。而车牌识别系统与这些领域都息息相关,是不可缺少的一部分。

车牌定位是车牌识别系统的重要组成部分。目前主要有两种车牌定位算法,分别是基于颜色特征与基于边缘检测的定位算法。基于颜色的车牌定位对目标车牌图像的质量要求较高,拍摄时需要光线良好,图像色彩鲜明。对于车牌有污损或褪色严重的车牌图像,定位效果不是很理想。基于边缘检测的车牌定位受天气、污泥等复杂背景的干扰[2],定位效果不是很好。

随着应用的扩展,硬件加速具有重要的意义,所以在FPGA 平台上开展硬件加速研究。其设计主要是以数字电路的思想完成算法的实现,通过模块化设计并行处理信号,提高了图像处理系统的速度。本文研究了一种基于边缘检测与形态学相结合的车牌定位算法,并在FPGA 的平台上实现。

2 车牌定位的算法研究

车牌识别技术的应用十分广泛,可以通过一些后续处理实现交通流量控制指标测量[2],但是在摄像机获取车辆图像的过程中,经常会因为天气、泥污等因素的干扰,实际拍出的图像中有可能出现各种噪声,图片的清晰度、对比度等受到影响,进而影响到后续的车牌识别。完整的车牌图像中不仅包括车牌、噪声,还有车身、其他背景等,因此需要以复杂环境下的车辆为主要研究对象来确定车牌的所在区域,在整个过程中,利用车牌本身特征在图像中定位到它的位置。

传统的车牌定位算法以车辆及外部环境的特点为定位标准,研究者们据此提出的算法有很多,如基于边缘特征的定位算法、基于模板匹配的定位算法、基于颜色特征的定位算法[3]等。不同的定位方法优缺点不同,主要表现在运行速度和准确性两个方面。而这两个方面很难做到同时满足,计算量小的算法精度普遍较低,而高精度算法的计算量自然就很大。

2.1 基于边缘检测的车牌定位算法

基于边缘检测的车牌定位算法可以明显区分出车牌区域的边缘信息,为了使目标图像上的显示效果更加清晰,需要对目标图像采用灰度变换,在此基础上执行一阶差分运算,此时目标图像的车牌区域就具有了明显的垂直边缘。然后对边缘检测后的目标图像进行水平和竖直方向上的投影,可以发现与车牌区域相对应位置上的投影值为峰值,根据该特征确定车牌的边界,并确定车牌区域。这种算法能够消除车牌定位中噪声带来的影响,在图像背景简单的情况下可以快速定位到目标车牌区域,且定位效果很好。然而受天气、污泥等复杂背景干扰,基于边缘检测的定位效果并不是很好,因此不能单独作为本文的研究算法。

2.2 边缘检测与形态学相结合的定位算法

本文采用了基于边缘检测与形态学相结合的车牌定位算法,基于边缘检测的定位速度快,符合现代车辆需要进行实时处理的情况。而车牌污染等因素会对其定位产生影响,由车灯照明引起的复杂环境背景会让边缘检测定位到的车牌出现较大的误差,本文结合边缘检测与形态学处理来确定候选车牌的轮廓,利用形态腐蚀和膨胀来消除污染和模糊区域带来的影响,最后运用垂直投影法完成车牌的精准定位。车牌定位的算法流程如图1 所示。

图1 车牌定位流程

首先对图像进行灰度化处理,采用直方图均衡增强法增强图像,中值滤波对图像进行平滑处理,再用最大类间方差法对图像进行二值化处理。其中图像滤波就是在保留图像细节特征的条件下抑制目标图像的噪声,其处理效果直接影响到后续的车牌图像二值化和形态学操作等。而中值滤波处理平滑脉冲噪声非常有效,不仅除去了无关的噪声,也可以很好地保护图像边缘的细节信息。本文改进的方法如下:采用Sobel算子检测图像边缘,对图像进行膨胀、腐蚀处理,采用闭运算,对轮廓线进行平滑处理,最后去除图像中无用的小对象,再用投影法通过对二值图像水平和竖直方向上的投影来统计每行每列像素点个数进行判断,最后确定坐标来达到定位效果,最终效果如图2所示。

图2 定位剪切后的车牌

2.3 车牌定位算法Matlab 验证

实验样本采取实拍的300 幅不同场景下的车牌图像,以Matlab 2018b 软件作为算法的验证平台对车牌图像进行实验。验证结果如表1 所示,虽然光照条件会影响到目标图像定位的准确率,但总体上来说,本文采用的车牌定位方法对不同场景下的车牌都有着很好的定位效果,具有很好的稳健性和实用性。

表1 不用时间段下定位结果的比较

将本文的车牌定位方法与基于颜色特征的车牌定位方法、基于边缘检测的车牌定位方法和基于纹理特征的车牌定位方法进行测试比较,结果如表2 所示。

表2 几种车牌定位方法的实验结果比较

3 车牌定位系统的硬件设计与实现

车牌定位算法在Matlab 平台进行软件验证之后,使用Verilog HDL 语言对算法进行硬件逻辑实现。图像识别算法是本设计的关键,图像识别技术主要根据图像的基本信息来提取图像特征,将识别到的图像分配给相应类别的技术,具有广泛的应用前景。作为视觉显示的一种表达形式[4],图像种类分为黑白图像和彩色图像。黑白图像主要记录场景中的每个亮度信息,也叫做单色图像;而彩色图像不仅记录亮度信息还记录颜色信息。选择合适的硬件算法不仅可以占用较少的资源,加速程序的运行,还可以提高车牌定位的准确率。

在车牌定位的驱动电路设计完成后,将摄像头初步处理的图像数据以每时钟16 数据的速度并行输入。考虑到采集图像数据的过程中会包含噪声[5],因此需要对图像进行滤波。在对图像进行预处理时,利用硬件实现的并行特点,以流水线的思想设计图像处理模块。使用中值滤波算法对灰度转化后的图像进行去噪,用边缘检测和二值化处理得到图像的大致轮廓,最后对图像进行膨胀腐蚀处理以确定车牌图像的水平和竖直方向的坐标,完成定位。综合以上各部分的设计,本文的设计方案如图3 所示。

图3 FPGA 内部模块设计布局

3.1 灰度化转换模块的硬件实现

系统设定摄像头的输出为格式固定的RGB565图像,彩色空间YCbCr 图像格式的Y 分量显示的灰度图像更加具有层次感[6],灰度显示更加真实,因此本文将利用YCbCr 图像格式进行灰度转换。转换过程为首先将RGB565 图像转换成RGB888 图像(见表3),然后通过式(1)所示的计算过程完成RGB888 图像定点转换成YCbCr 图像。

表3 RGB565 转换RGB888

这种方法用Verilog HDL 语言来实现是非常复杂的,所以本文采用了另一种转化方法,即利用FPGA中流水线的设计思想。从输入到输出加入3 个clock的时钟延[7],第一级流水线计算所有的乘法,即对Y 分量,计算括号中的乘法运算;第二级流水线计算所有的加法,把正的和负的分开进行加法来进行数据求和;第三级流水线计算最终的和,若为负数则取0。虽然每一级运算相差了一个时钟,但每一级都是新的运算,通过流水线的功能将运算速度提升了3 倍[8],这样在RGB565 转化YCbCr 成功之后,提取Y 值通道的输出就是灰度图像,其RTL 如图4 所示。

图4 RGB565 转YCbCr 的RTL

3.2 中值滤波模块的硬件实现

为了更好地实现中值滤波,本文利用FPGA 强大的并行数据能力,在硬件逻辑中建立3×3 的图像模板矩阵来进行运算。而想要对图像进行矩阵操作就必须要用到行缓存,这里首先引入IP 核Shift Register(RAM-Based)模块[9],将3 行像素数据存储,再并行输出,实现图像的动态滤波。针对本文480 行的图像数据,丢失2 行数据并不会造成太大的影响。FPGA 实现中值滤波的框图如图5 所示。

图5 中值滤波框图

针对行缓存中每次得到的3 行图像数据进行运算,其步骤分为3 步。

(1)分别对3行像素进行排序,由M11、M12、M13得到Max1、Med1、Min1;由M21、M22、M23得到Max2、Med2、Min2;由M31、M32、M33得到Max3、Med3、Min3。

(2)分别对3行像素中的3个最大、3个中间和3个最小进行排序,由Max1、Max2、Max3得到Max_max、Max_med、Max_min;由Med1、Med2、Med3得到Med_max、Med_med、Med_min;由Min1、Min2、Min3 得到Min_max、Min_med、Min_min。

(3)对最大的最小(Min_of_Max)、中间的中间(Med_of_Med)以及最小的最大(Max_of_Min)进行排序,得到Midian。

3.3 边缘检测与二值化模块硬件实现

3.3.1 Sobel 边缘检测模块硬件电路

经过中值滤波处理后的车牌灰度图像不仅过滤了椒盐噪声[10],还保持了图像边缘的完整性。在输入8位位宽的灰度图像后,经2 个行缓冲与原图像构成同列的3×3 相邻像素对FPGA 图像进行Sobel 边缘检测,得到目标图像中的车牌区域和少数背景区域。Sobel算子属于一阶导数算子,通常带有方向性,利用3×3 图像模板矩阵进行卷积,将得到的结果与指定阈值相比,大则置255,小则置0。

使用3×3 与3×3 的矩阵相乘,每行像素480 个,形成3 行流水线功能,通过调用IP 核Shift Register(RAM-Based)来实现该功能,将计算得到的结果与设定的阈值进行比较[11],用iTHRESHOLD 来表示阈值,根据阈值大小来决定边缘提取的力度。通过与Matlab得到的结果对比可以看出FPGA 的并行运算将Sobel边缘检测的运行速度提高了40 倍以上,实现了算法上的硬件加速。

3.3.2 二值化模块硬件电路

目标图像经Sobel 边缘检测之后,边缘信息比较明显,下一步对梯度图像进行二值化处理,本文采用给定阈值法[12],通过公式来确定阈值,如果梯度图像中灰度值大于阈值则取1,小于阈值取0,二值化运算用FPGA 中的比较器来进行高速处理。

阈值GTH的计算式为:

其中G(i,j)表示图像的灰度值,X、Y 分别表示图像的宽度和高度。

3.4 形态学运算模块硬件实现

在FPGA 上实现对二值图像的形态学运算[13],其方法与之前Sobel算子边缘检测运算类似,通过lineBuffer 行缓存的设计形成3 行数据像素的输入,以流水线的方式对窗口像素点进行处理,因为形态学膨胀和腐蚀处理的数据是经Sobel 边缘检测之后完成,所以数据都是1 位的,将得到的结果与形态学模板进行比较,重新确定被处理像素点的值。在比较的过程中通过结构单元对图像进行卷积运算后输出像素值,整个处理过程由控制电路来完成,形态学处理的原理如图6 所示。

图6 形态学处理电路结构

对目标图像进行腐蚀处理,其目的是去除背景和其他不相干的信息,针对3×3 模板进行操作。

在硬件逻辑上实现腐蚀算法,利用3×3 像素矩阵P 对像素点进行与运算:

在Verilog HDL 中,通过窗口面积来加快运算速度,将式(3)转化为:

对目标图像进行腐蚀处理之后,图像的干扰信息大致已经被清除,再对目标图像进行膨胀处理,让车牌区域更加明显。

在硬件逻辑上实现膨胀算法,利用3×3 像素矩阵对像素点进行或运算:

在Verilog HDL 中,通过窗口面积来加快运算速度,将式(6)转化为:

3.5 投影法定位车牌位置

目标图像经过上述一系列的处理之后,所需的车牌大概位置已经可以看出。经过中值滤波过滤了图像中大量的噪声[14],通过形态学处理之后车牌的大致轮廓都已经显示出,这样为车牌的准确定位打下了良好的基础。而最后一步的任务就是从目标图像中找到车牌的位置,为此本文采用了投影法来确定车牌位置。

利用水平定位得到的结果读取车牌所在的水平区域并进行垂直投影,我国车牌的长宽比为3.14∶1,所以只要统计投影值大于3 倍小于3.5 倍车牌宽的区域,得到车牌的上下边界,统计垂直方向上的像素点,得到车牌的左右边界。通过上面的计算,可以把干扰区域去掉,最终留下车牌区域,对原图像进行分割并计算得到目标图像的车牌区域如图7 所示。

图7 车牌定位处理结果

4 车牌定位系统板级测试

通过对整个车牌定位系统的RTL 电路设计和算法程序的仿真测试之后,在系统的硬件验证平台上运行结果,进行板级验证。为了验证本系统的可靠性,本设计将随机选取附近的汽车进行拍摄识别。

考虑到常用车牌定位系统的周边电路(如补光灯、系统电源等)并不在本设计的研究范围内,无法在路边进行实时采样检测。本文通过采集行驶车辆的视频,以电脑显示器播放的方式模拟车牌定位环境来进行功能验证。

在图8 中,TFT 屏显示的内容为车牌定位算法的定位结果,液晶显示器播放采集到的车辆视频。

图8 车牌定位处理结果

为了验证车牌定位算法的稳健性,对500 幅来自停车场、高速公路等地方的行驶车辆在FPGA 上进行系统验证,测试结果显示,本文设计的车牌定位算法的准确率为98.9%。摄像头像素过低,采集图像时光照、车牌污染等环境的影响,以及对目标图像的预处理不足都会对最终车牌定位的结果有所影响。硬件电路中流水线、并行处理等技术的使用,可以对每一帧图像都进行处理,每幅车牌图像的定位时间仅为1.2ms。

5 结论

本文对车牌定位算法的硬件实现进行了详细研究,在FPGA 中通过引入3 级流水线和IP 核模块等功能,结合图像处理算法的优缺点,提出了基于流水线架构的图像处理方法,提高了车牌定位算法的运算速度。采用QuartusⅡ13.0 将仿真通过的代码进行板级测试,通过选用500 张车牌图像进行实验,达到98.9%的定位准确率。整个车牌定位系统利用了FPGA 强大的并行处理能力,使系统可以随视频数据流就可以快速定位到车牌。

猜你喜欢

车牌灰度滤波
航空滤光片阵列多光谱图像条带灰度调整算法
基于HP滤波与ARIMA-GARCH模型的柱塞泵泄漏量预测
基于改进自适应中值滤波的图像降噪方法*
采用改进导重法的拓扑结构灰度单元过滤技术
车牌颜色里的秘密
天津港智慧工作平台灰度发布系统和流程设计
Arduino小车巡线程序的灰度阈值优化方案
第一张车牌
基于非下采样剪切波变换与引导滤波结合的遥感图像增强
一种侧向插装型车牌架