1摘要
该项目要求基于FPGA完成车牌定位算法。本项目拟充分发掘FPGA并行运算在图像处理领域的优势,实现基于Adboost算法的车牌检测硬件架构,最终完成车牌定位信息的实时输出。
2系统原理和技术特点
2.1 Adaboost车牌定位算法原理
Adaboost车牌定位算法的设计,分为离线训练模块和在线识别模块如图1所示,离线训练模块通过对大量正、负样本的学习,形成一系列的弱分类器(典型特征),然后依据权重把这些弱分类器组合成强分类器,如图2(a)所示。实际应用时,若干个强分类器构成如图2(b)所示的Cascade结构,Cascade结构就像一个筛孔可变的筛子,开始的筛孔很大,使得大多数车牌都能通过,在此基础上尽量抛弃反例,位置越靠后的筛孔越复杂,即包含越多的弱分类器,因而也具有更强的分类能力。在线检测模块通过离线训练模块训练好的Cascade结构分类器,使用可以缩放的Haar特征,在待识别图片上进行多尺度的扫描,最后经过后续处理输出识别结果(车牌位置信息)。在线检测算法流程如图3所示。首先检测当前窗口,若未通过分类器则跳出;若通过所有分类器则判定为车牌,然后检测下一窗口。扫描完当前图像以后,放大检测窗口,重新扫描。
Adboost车牌定位算法基于Haar特征,Haar特征由一组矩形构成,图4所示就是几种Haar特征,黑白矩形内像素的灰度加权和是该特征的特征值。积分图表示其图像中任意一点,都是原始图像中行号和列号均小于该点的像素点像素值之和。利用积分图可以快速计算矩形的灰度和,即Sum=P1 +P4-P2-P3,其中Pi是积分图中矩形顶点对应的积分值。多个Haar特征组成一个分类器,多个分类器级联可以提高检测精度。
通过对近30000车牌样本的离线训练,本实验室已经得到能够适应复杂环境的Adaboost车牌特征(识别)库,实现的Adboost车牌检测算法在固定环境下拍照车辆图像,车牌定位识别率可达99%。本次大赛将重点关注车牌Adaboost算法在线检测的FPGA实现。
图1 AdaBoost车牌定位算法框图
(a)
(b)
图2 (a)强分类器构造 (b)Cascade结构图
图3Adboost车牌定位算法流程图
(1) (2) (3)
图4(1)Harr特征 (2)积分图 (3)灰度和
2.2系统工作原理
2.2.1 系统组成
如图5,整个系统由FPGA完成车牌定位算法,配合外围的视频A/D,D/A、存储器等芯片,完成图像的采集和定位标记与原始图像地叠加输出。
图5 车牌检测系统
图6 基于FPGA的Adaboost车牌定位方案
2.2.2 系统方案
FPGA实现的Adaboost车牌定位方案如图6所示:
系统内I2C模块通过I2C总线配置A/D芯片的寄存器,使得A/D芯片能够正常工作。
视频输入模块接收A/D芯片输出的Ycbcr格式的视频数据,解码并提取出图像灰度数据后,将数据存到图像RAM和帧存RAM中。
车牌检测模块开始工作,读取图像RAM中内容,在被检图像中扫描是否包含车牌。车牌检测模块包括图像读取单元,流水线处理单元,分类器读取单元和检测单元。如果检测到车牌,则将车牌信息存储到检测结果合并单元。
车牌检测模块工作的同时,图像缩放单元负责将存储在帧存RAM中的图像进行缩小,并存储到图像RAM中。
交换处理对象,重复步骤3-4直到图像缩小后的大小与扫描窗口相当。
检测结果合并单元合并图像中检测到的重复的车牌,减少冗余的窗口以及误检的车牌。
绘制单元读取合并后的车牌位置和大小信息,并在原始图像中相应车牌位置绘制矩形标明。
在步骤1-7的同时,视频输出模块读取帧存RAM中的图像数据,并以VGA格式输出至D/A芯片,显示到显示器上。
重复以上步骤。
2.2.3 功能模块
整个系统负责接收经过流水线计算得到的特征向量值,并根据这些值以及扫描窗口的平方积分和等信息判断扫描窗口是否包含车牌。
视频输入模块:视频输入单元负责从A/D输出端接收视频数据,并将其中的有效像素提取出来,并产生正确的像素地址信息,保存到帧存中。
视频输出单元:视频输出单元负责从帧存中读出需要显示的图像,并按照VGA格式输出至D/A芯片,最终显示到显示器上。
图像读取单元:图像读取单元负责从帧存中读出扫描窗口,完成列积分和平方积分。
图像缩放单元:利用扫描窗口检测图像时,只能检测到与扫描窗口大小一致的车牌。图像缩放单元用于将图像缩小,使得同样大小的扫描窗口能够检测原图像中大于扫描窗口的窗口中是否含有车牌。
绘制单元:在原始图像上绘制车牌位置信息和车牌号码信息。
流水线处理单元:该流水线包括扫描窗口(存储阵列)及特征向量两条流水线,用于计算特征向量的特征值。
结果合并单元:车牌检测结果合并单元的作用就是将车牌区域周围的多个合格扫描窗口合并为一个,并去除不包含车牌区域的伪扫描窗口。
图像RAM:用来保存从视频采集模块接收到的图像数据和缩放以后的图像数据。图像RAM有两个写端口和一个读端口,写端口用于向RAM中写入原始图像数据和缩放以后的图像数据;读端口用于向后继处理模块输出图像数据。
帧存RAM:用来保存从视频采集模块接收到的图像数据、车牌位置信息和车牌号码信息。
Casecade_ROM:用来保存训练得到的Adboost分类器数据(特征向量),包括Haar特征中矩形的位置、大小、权重、阈值、分类器阈值等信息。
分类器读取单元:它从分类器ROM中读出分类器数据,向扫描窗口流水线提供矩形位置、大小、权重、阈值、分类器阈值等信息
2.3 技术特点
(1)基于Adboost算法的车牌检测硬件架构设计;
(2)针对640x480彩色图像,定位时间<40ms。
(3)固定环境下,车牌定位识别率99%
3.技术路线
本设计采用45x15的阵列架构,通过流水线可快速计算矩形灰度和。硬件结构如图7所示。其中白色45x15个方块表示当前检测窗口的行积分,每个单元存放的是在当前所在的行中该像素点之前的像素值之和。横线填充的方块存放的是矩形位置数据和权重,竖线填充的方块存放的是部分灰度和,这两部分构成的特征矢量流水线每时钟周期流动一次,而行积分阵列(白色方块)构成的流水线仅在当前窗口检测完毕流动一次,载入新的被检数据。图像数据和分类器数据分别保存在图像RAM和分类器ROM当中。行积分逻辑由一个加法器和45个寄存器构成,每45个时钟周期计算出一行像素的行积分,并输出到检测阵列。分类器检测逻辑接收上一级计算出的矩形灰度和,计算其特征值和相似度,并累加所有的相似度,并与阈值进行比较,判断是否通过该级分类器。扫描控制逻辑生成图像RAM的读地址,控制检测窗口对当前图像进行扫描,扫描完毕后,将当前图像大小乘以3/4,重新扫描,直到被检图像与检测窗口大小一致,则完成一幅图像的检测。
图7 基于Adboost的车牌检测并行算法的架构