http://www.eeworld.com.cn/qrs/2015/1023/article_25403.html
2.1 项目背景及技术难点
-
项目名称:智能交通:汽车车牌定位识别;
-
项目内容:本项目是在FPGA前端实时完成图像采集、预处理、车牌定位和字符分割以及数据传输工作,在后端完成车牌字符识别工作。FPGA接收采集的实时图像,在内部采用流水线方式依次完成图像预处理、车牌定位和车牌字符分割工作,最后通过高速USB端口将已分割字符传输到后端进行字符识别。其中,图像采集和数据传输是通过EDK内嵌的MicroBlaze内核控制实现的,这简化了FPGA内部控制电路;而FPGA内部信号处理电路采用的流水线方式,大大提高了系统实时处理视频帧的能力。
-
技术难点:(1)车牌自身特征的多样性及外界环境的不确定性导致的定位识别不准确;(2)图像处理算法的较高计算复杂度导致的实时性不满足。
2.2 关键技术及创新点
-
算法:采用了一种基于边缘检测和区域搜索的车牌定位算法,该算法直观且运算量小,利于硬件实现;
-
电路实现:FPGA内部采用流水线方式依次完成图像处理、车牌定位和字符分割三部分工作,极大地提高了对视频流的实时处理能力;
-
嵌入式控制:采用Xilinx EDK内嵌的MicroBlaze软核控制完成图像采集和数据传输工作,简化了FPGA内部的控制电路。
2.3 性能指标及可行性分析
-
设定的性能指标:我国电视视频标准采用PAL制,其帧频为 25,因此设定本系统所需达到的处理速度为25帧/秒,并可以将字符分割信息通过USB端口上传至PC机或其它设备。
-
可行性分析:本方案已经过MATLAB仿真,结果表明可以有效进行车牌的定位、分割和识别。在保证车牌识别效果的前提下,通过对算法结构进行改进,结合流水线方式的FPGA实现,可以达到实时性要求。另外,本小组成员均有丰富的FPGA设计功底和扎实的信号处理理论知识,有能力保证顺利完成交付该项目。
二、软件设计方案概述
汽车车牌识别系统一般分为三个部分,即车牌区域定位、车牌字符分割和车牌字符识别。为了突出图像的有用特征,通常在车牌定位之前需要对所拍摄图像进行预处理,以达到更好的定位效果。图3—1为本项目所设计软件方案流程图,其中车牌区域定位部分设计采用了一种基于边缘检测和区域搜索的车牌定位分割算法,其仿真结果见附录。
图3—1 软件设计方案流程图
3.1 图像预处理
在车牌定位之前对摄像机所拍摄图像进行预处理,是指突出图像中的有用信息,抑制可能对后续步骤产生不利影响的无效信息,以达到减小运算复杂度、提高识别效果的目的。图像预处理主要包括图像灰度化、去噪和灰度拉伸三部分。
3.1.1 RGB2Gray
摄像机所拍摄的图像一般为RGB彩色图像,每个像素包括R、G、B三种颜色分量,每个颜色分量用8 bit表示,即24 bit表示一个像素。而灰度图像是指只包含亮度分量的图像,每个像素用8 bit表示,亮度值量化为256级。对于车牌识别,灰度图像足以满足要求,且相对于RGB图像具有计算复杂度低、所需存储空间小的优点。因此,可以把RGB彩色图像转换为灰度图像,计算公式为Gray = 0.299R + 0.587G + 0.114B。
3.1.2 图像去噪
图像的能量主要集中在低频部分,高频部分多为边缘信息,而噪声一般也集中在高频部分,因此需要对图像进行去噪,以使得车牌定位中进行边缘检测时得到更好的效果。中值滤波是一种非线性图像处理方法,它将一个窗口内所有像素排序后的中间值代替窗口中心的像素值,能够在去除噪声的同时有效保护图像边缘,因此本方案中选用中值滤波方法进行去噪。
3.1.3 灰度拉伸
为了增强车辆图像和牌照图像的对比度,有利于牌照定位和识别,需对去噪后的图像进行灰度拉伸。灰度拉伸是指将输入图像中某点 的灰度 ,通过分段映射关系T,映射成灰度 后输出,即 。
3.2 车牌定位
车牌定位是指从图像中正确的识别分割出车牌区域,其基本原理是根据目标与背景的先验知识,对图像中的车牌区域进行标记定位,并完成有效分割。图像中车牌区域具有明显的纹理特征,含有丰富的边缘信息,如果对整幅图象进行边缘检测处理,则车牌区域相对于其他非车牌区域含有更多的细节边缘信息。因此,本方案中选用了一种基于边缘检测和区域搜索的车牌定位分割算法,该方法直观且运算复杂度较低,利于硬件实现。
3.2.1 Sobel边缘检测
边缘检测的实质是采用某种算法来提取出图像中对象与背景间的交界线,一般包括滤波、图像增强、检测和定位四部分。Sobel边缘检测是指将Sobel算子与给定图象进行模板卷积,然后分析卷积结果图象中各边缘点的变化方向,并求取图象的局部最大值点作为边缘输出,这样即可获得图像的边缘信息。相对于一般的简单卷积并阈值化处理方法,Sobel边缘检测能够减少杂乱信息,抑制噪声,更好地突现车牌区域的纹理特征,而且其计算复杂度较低,硬件实现难度较小,因此我们选用Sobel边缘检测提取图像边缘信息。
3.2.2 车牌区域搜索
车牌区域存在相对连续的多次灰度跳变,且两次跳变间距在一定范围之内,而非车牌区域则一般不具有这个特征。根据这种特征,我们采用行扫描和列扫描的方式来分别搜索确定车牌区域的上下边界和左右边界。
行扫描确定上下边界是指从左往右、从上而下对每行像素进行扫描检索,若遇到跳变点则计数加1,若某行中跳变数大于阈值M,则认为是可能的拍照区域,并设其为下边界;若跳变数大于M的行数超过阈值N,则认为时真实牌照区域,并把最后一行设为上边界,否则,行计数归0并重新寻找牌照下边界。
列扫描确定左右边界是指对已确定上下边界的车牌区域从左往右搜寻左边起始点、从右往左搜寻右边起始点,遇到第一个跳变点即停止并记录,然后跳转到下一行。这样既可获得车牌区域的左右边界。
3.2.3 候选车牌区域判定
通过上述方法搜索得到的候选区域可能不止一个,因此需要对它们进行判别来确定真正的车牌区域。车牌区域的判定标准包括车牌尺寸大小和长宽比例、像素分布关系、二值化投影是否为波峰-波谷分布等,由于车牌尺寸为已知条件,所以本方案中采用尺寸大小和长宽比例作为判定标准来确定真正的车牌区域。
3.3 车牌字符分割
由于牌照图像很有可能出现向左或者向右的倾斜,且任何一种倾斜都会影响牌照字符的划分,所以需要对搜索出来的车牌区域进行预处理,以达到更好的字符分割识别效果。
3.3.1 车牌区域预处理
车牌区域预处理一般包括二值化、几何变换等步骤,其效果的好坏将直接影响后续的字符分割识别工作。牌照区域由前景字符和背景色组成,二值化即相当于确定合适的阈值分离字符和背景,这样可以大大减小后续工作的计算复杂度;几何变换是指通过对车牌图像进行缩放、旋转、平移等,矫正车牌的形变及倾斜,达到增大字符分割、识别率的目的。
3.3.2 字符分割
字符分割是指把车牌区域图象分割成单个字符图像,它属于图象分割问题。字符分割是是特征提取和模式匹配的前提,并直接关系到后续的字符识别效果,因此字符分割是车牌识别中关键的一步。本方案选用一种新的字符分割方法,即轮廓特征与垂直投影联合分割法,其基本原理如下:字符之间的分界处往往是投影比较少的地方,分割点处的投影接近零或者为零,因此可以利用这种特点进行粗略的分割得到第一组分割点,然后从左到右从上到下、从下到上依次对每列进行扫描获得字符的上轮廓和下轮廓,分割点在上轮廓曲线上表现为波谷,在下轮廓曲线上表现为波峰,最后根据三组分割点的相对位置确定真正的分割点。相对于一般的垂直投影法,该方法能够很好地解决车牌字符图像的轻度污染导致的字符粘连问题。
3.4 车牌字符识别
本方案中采用模板匹配法进行字符识别,其基本原理是先对字符分割后的二值化图像缩放到字符数据库中模板的大小,然后与所有模板进行匹配,最后选取最佳匹配作为结果。
三、硬件设计方案概述
4.1 FPGA设计总体方案及模块分析
图4—1为本项目硬件原理框图。CCD摄像头采集的视频图像输入视频解码芯片,经过视频解码转换成数字信号存入FPGA的Block RAM中;FPGA芯片内部电路依次完成图像预处理、车牌定位和车牌字符分割三个功能,三部分采用流水线方式实现,这将大大提高图像的处理效率;最后将分割出来的车牌字符通过高速USB端口传入后端,进行后续的字符识别。其中,视频解码芯片及USB数据传输的控制是通过FPGA内部Microblaze软核来实现的。
图4—1 系统硬件框图
4.1.1 图像采集模块
本系统图像采集模块包括PAL制CCD摄像头和飞利浦公司的SAA7113视频解码芯片,通过MicroBlaze软核控制视频解码芯片,将拍摄的模拟视频信号转换成数字信号。SAA7113将解码、采样和量化集成于一体,支持隔行扫描和多种数据输出格式,并内置了A/D转换电路、预处理电路及I2C接口,通过I2C接口对内部寄存器进行配置,即可实现对芯片内部电路的控制。
4.1.2 RGB2Gray模块
图4—2 RGB2Gray硬件框图
图像采集模块输出的RGB彩色图像转换成灰度图像的硬件框图如图4—2所示,该模块由三个乘法器和一个加法器组成,其中权重小数在FPGA中采用XQN格式定点数表示。
4.1.3 图像去噪模块
本方案中图像去噪模块是通过对图像进行中值滤波实现的,图4—4为其硬件框图。图4—3为一个3×3的滤波模板,不同的模板即可得到不同的滤波效果。如图4—4所示,采用移位寄存器对图像数据缓存输出,将图像数据和模板进行并行一维卷积即可得到三个卷积结果,输入加法器即可得到滤波结果,其中buffer的大小为图像的列数。