基于图像采集的汽车车牌定位识别,软硬件协同
1项目概述在图像采集与处理的过程中,一般来说前端的数据处理相对后端来说数据量大但是操作相对简单,如果利用CPU等串行结构的处理器来进行运算的话会大大占用其资源,大大影响了整个图像采集与处理的时间;而FPGA则与CPU相反,其并行的结构会使图像处理算法简单的部分变得十分高效,因此,在图像采集与预处理过程中涉及到的一些简单的算法如果利用FPGA来实现的话将会使整个图像采集与处理的时间大大减少。
汽车车牌的定位识别需要对摄像机拍摄的含有汽车车牌的图片中的车牌的位置信息进行检测,并将检测结果输出,经过这样的预处理后,图像中车牌数据的获取就会变得相当省时省力了,处理时间的大大缩短对于对图像处理时间有严格要求的收费卡口以及交通路口来说是求之不得的。
2项目任务
本项目的主要任务是利用摄像机以及FPGA开发板,设计一个可以在交通路口和收费卡口对来往车辆的车牌进行预处理的系统,实现对车辆进行图像拍摄,并对图像中的车牌进行识别,输出车牌在图片中的位置坐标等信息。
3 方案设计
3.1 系统框图
本项目的系统框图如图1所示。电源及FPGA的Flash存储器等未画出来。
CMOS相机通过接口与FPGA内部的CMOS传感器数据获取模块相连,由数据获取模块配置相机并发送控制信号来控制相机采图。采得的图是Bayer格式的图像,为方便图像的存储与处理先将其转换为RGB格式的图像,然后将转换完后的RGB数据通过SDRAM控制器存储到SDRAM中。
图1 系统框图
同时,通过VGA控制器将存储在SDRAM中的数据利用DAC转换为符合VGA格式的模拟信号,然后通过显示器显示,这样就完成了图像的采集与显示。通过显示器显示是为便于实时了解图像处理的结果,易于算法设计者进行算法的设计与改进。
车牌定位是通过 Image Process模块实现的,处理完之后将提取的车牌坐标信息输出,可以通过USB传输到PC,也可以传输到DSP以进行后续处理。
3.2硬件平台各部分说明
3.2.1 FPGA开发板
本项目基于Nexys™3 Spartan-6 FPGA 开发板,核心处理器为Xilinx公司的 Spartan-6 FPGA。该项目会用到的板上主要资源为:
● Xilinx Spartan6 XC6LX16-CS324
● 16Mbyte Micron Cellular RAM
● 16Mbyte Micron Parallel PCM
● Digilent Adept USB2 port
● VHDC expansion connector
● 8-bit VGA
XC6LX16-CS324是Xilinx公司Spartan-6系列的FPGA,具有丰富的逻辑资源和存储资源,非常适合进行一些简单算法的实现。FPGA用于配置与控制Camera,通过Camera采集图像,获取Camera输出图像数据并将其存储到Cellular RAM,然后对图像数据进行处理。所有图像处理算法均在FPGA上实现。
Cellular RAM是一种PSRAM 设备,具备类似 SRAM 的架构、隐藏的刷新操作和 SRAM 管脚兼容性等特点。此混合内存集 SRAM 和 DRAM 的优点于一身,兼具低功耗与高速读写功能。由于FPGA内部存储空间有限,因此本项目用Cellular RAM缓存图像,这样就省去了人工刷新RAM的步骤,大大降低了数据存取的复杂度。
Digilent USB2 port用于为板卡提供电源,对FPGA进行编程和将车牌坐标信息传输到PC显示。
VHDC connector是为扩展板卡功能而预留的IO口,该项目用此接口连接Camera。
8-bit VGA接口用于将处理后的图像输出到显示器,以便直观的观察图像处理的效果。
3.2.2 CMOS相机
图像采集部分选用Terasic公司的TRDB-D5M系列彩色摄像头,该系列摄像头具有500万像素,具有2752x2004个总像素,其中有效像素为2592x1944个像素,多余的像素可以避免在进行图像处理时由于边缘梯度太大而可能导致的边缘效应。该系列相机的接口为数字接口,可以通过这些接口对相机的寄存器进行设置,从而调整相机的拍摄模式、焦距以及曝光时间等,可以与FPGA很好的配合,且操作方便、速度较快,相当适合做FPGA图像处理的图像获取设备。
3.3 图像结构及相机接口
由于采用的是是Terasic的CMOS相机,该款相机采用的是Micron的MT9P001系列CMOS图像传感器,图2所示为该相机所使用的传感器的像素分布图。图3为相机模块的输出接口引脚定义。
图2CMOS传感器像素结构
在上图所示的Rigion II为有效的像素区域,Rigion I为为边缘区域,其有效宽度为100 pixels,有效避免了在进行图像处理时可能造成的边缘效应。
图3相机模块的输出接口引脚定义
该相机是专门为FPGA开发人员设计的,因此其输出为数字信号,且控制线、数据线等时序都较为清晰,且提供了许多实用的功能。这大大降低了对图像采集的设计难度。
4.图像算法
车牌定位方法的一个共同出发点是通过牌照区域的特征来判断牌照。可利用的车牌特征可以概括如下:
(1)车牌区域内的边缘灰度直方图统计特征:有两个明显且分离的分布中心。
(2)车牌的几何特征:车牌的宽、高比例在一定范围内。
(3)车牌区域的灰度分布特征:穿过车牌的水平直线其灰度呈现连续的峰、谷、峰的分布。
(4)车牌区域水平或垂直投影特征:车牌区域水平或垂直投影呈现连续的峰、谷、峰的分布。
(5)车牌形状特征和字符捧列格式特征:车牌有矩形边框,字符位于矩形框中且有间隔。
(6)频谱特征:对图形作行或列的DFT变换,其频谱图中包含车牌位置信息。除此之外,车牌字符的纹理特征、字符与背景之间的灰度特征、车牌的字符颜色与底色的固定搭配、车牌的结构特征等越来越多地的车牌特征也正被发掘出来作为车牌定位算法的依据。
根据车牌的不同特征,可以采用不同的定位方法。目前车牌定位的方法很多,最常见的定位技术主要有基于边缘检测的方法、基于彩色分割的方法、基于小波变换的方法、基于遗传算法的方法、基于数学形态学的车牌定位和基于灰度图像纹理特征分析的方法等, 车牌定位算法在车牌识别技术中占有很重要地位,一个车牌识别系统的识别率往往取决于车牌定位的成功率及准确度,考虑到FPGA适合做数据量大且运算简单重复的特点,我们将采用基于数学形态学的方法来进行定位。
对采集存储在Cellular RAM中的图像进行处理的过程分为两大步:预处理和车牌定位。其具体流程如下:
图4 图像处理流程
● 灰度化
通过CMOS摄像机或数码相机等设备拍摄的汽车图像以二进制格式存放在FPGA中,在预处理前的图像都是彩色图像。彩色图像又称RGB图像,它是利用R、G、B 3个分量表示一个像素的颜色,R、G、B分别代表红、绿、蓝3种不同的颜色。通过三基色可以合成出任一颜色。所以对于一个尺寸为m×n的彩色图像来说,存储为一个m×n×3的多维数组 由于彩色图像中所含的信息比较分散,而且数据处理量很大,因此我们需要首先对车流彩色图像进行预处理,本项目的算法是基于灰度图像,因此首先将RGB图像转化为灰度图。
FPGA实现:直接提取G通道的数据即可。
● 直方图均衡
直方图均衡化是一种图像对比度增强的方法,它的实质是通过减少图像的灰度级以换取对比度的增大。
● 图像去噪
采集的图像由于各种原因难免会引入噪声,因此有必要对噪声进行消除或减小,以便于后续处理。本项目初步选择中值滤波来减小噪声,中值滤波是一种非线性的图像平滑法,它对脉冲干扰级椒盐噪声的抑制效果好,在抑制随机噪声的同时能有效保护边缘少受模糊。
● 二值化
为了更好的利用车牌的某些特征将车牌从图像中突显出来,为车牌定位打好基础,再将预处理的图像转换为二值图像。二值化算法又称为阈值算法,常见的二值化方法有动态阈值法、局部阈值法及全局阈值法,典型的全局阈值法有Otsu、迭代法等,其目的就是要找出一个合适的阈值,将待处理的区域划分为前景和背景两个部分。我们认为车牌区域是车流图像的前景区,其他的部分都看成是背景区.因此简单来说,对于梯度图像的二值化实际上就是确定一个最佳的分割阙值,可根据具体的实验结果选取合适的方法。
● 边缘提取
边缘是图像最基本的特征之一,是图像分割、纹理分析及图像识别所依赖的重要依据。在汽车图像中,牌照区域内含有丰富的边缘包括水平边缘、垂直边缘和斜向边缘,而其它区域则很少具有这个特点,故可通过边缘检测技术来寻找存在较多边缘的区域,来很好的突现车牌区域的水平梯度特征,从而使其与背景图像有效的分开。边缘提取可以基于灰度图像,也可以基于彩色图像,由于彩色图像的背景复杂且数据量大,因此选择采用二值图像进行边缘提取。
FPGA实现:本项目采用初步选用sobel边缘检测算法,如图5所示。
Gx与Gy是x与y方向的模板,处理时需要将图像像素与模板做卷积。在用C语言实现该算法时很简单,因为图像像素都存储在二维数据内,根据数组的下标即可获取像素的值,但Verilog不能做到这点,因此需采用其他方法,下面以Gx与图像卷积为例来说明用Verilog的实现方法。
图5 Sobel边缘检测模板
检测过程中需要实现下面的运算:
X1 * P1 + X2 * P2 + X3 * P3 + X4 * P4 + X5 * P5 + X6 * P6 + X7 * P7 + X8 * P8 + X9 * P9
对于x1-x9的获取很简单,可用parameter直接定义,而对于p1-p9的获取就成为关键问题,因为p1-p9是依次传入的,没有C语言的位址概念,也没有二维数组的概念,因此可设计3条line buffer做以上运算,Line buffer的结构如下。
图6line buffer结构
如上图所示的电路,Data是图像数据,从第一行开始,依次传输给Line0的输入端。Line0、Line1、Line2为移位寄存器,每个移位寄存器的深度为图像的行宽。由于图像中相邻两行中上下相邻的数据从一维的角度来看恰好是一个行宽,因此可以发现每次Line0、Line1、Line2所输出的数据均是相邻三行中同一位置的数据,同时,相邻时刻同一移位寄存器输出的数据在当前行上是相邻的,于是可以发现,每一时刻P1~P9共9个数据就是进行边缘检测所需要的矩阵,获得数据矩阵后利用乘法器将每个数据与边缘检测模板对应位置上的数据相乘,然后通过并行加法器将其相乘即可获得边缘检测后图像上每个点的值。
● 形态学处理
数学形态学是由一组形态学的代数运算子组成的,它的基本运算有4个: 膨胀(或扩张)、腐蚀(或侵蚀)、开启和闭合, 它们在二值图像和灰度图像中各有特点。数学形态学方法利用一个称作结构元素的“探针”收集图像的信息,当探针在图像中不断移动时, 便可考察图像各个部分之间的相互关系,从而了解图像的结构特征。数学形态学基于探测的思想,与人的FOA(Focus Of Attention)的视觉特点有类似之处。作为探针的结构元素,可直接携带知识(形态、大小、甚至加入灰度和色度信息)来探测、研究图像的结构特点。在车牌识别中引进形态学算法可以简化FPGA中实现方法的复杂度,充分利用FPGA擅长简单、数据量大的算法的特点,使算法的准确度与速度都有了很大的提升。
在本项目中,可先采用结构元素对二值汽车图像作腐蚀运算以去除一些噪声,在去噪基础上,使用结构元素作闭运算,使车牌区域形成连通的区域。经过形态学运算,车牌区域已形成闭合的连通区域,然后对连通区域作标记。
FPGA实现:结构元素可以用parameter直接定义,难点依然在于图像像素的获取。这里同样可以采取边缘检测中提到的line buffer,只是所做的运算不同。
● 精确定位
形态学处理后的图像可能包含干扰区域,因此,在连通区域标记的基础上,计算出每个连通区域的外接矩形框,并利用车牌的先验知识确定车牌区域的位置。该方法可以较好地确定图像中车牌区域的位置,且算法简单、实时性较强。
在以上各步骤中,灰度化、去噪、二值化、边缘提取形态学处理等算法可用VerilogHDL实现,精确定位算法涉及到连通区域分析,相对复杂,可考虑利用Microblaze实现。
页:
[1]