FPGA实现车牌的倾斜校正
2014-10-21李佳悦
李佳悦
【摘 要】作为车牌识别系统的关键环节,车牌倾斜直接导致车牌识别准确率降低。本文主要基于FPGA实现车牌倾斜校正算法,完成如下功能:采用Hough变换计算倾斜角度,采用CO RDIC(坐标旋转数字计算)算法计算三角函数值;采用双线性插值实现重采样。
【关键词】倾斜校正;FPGA;Hough变换;CO RDIC
引言
随着我国科学和技术的日益发展,世界范围内汽车数量的增长,城市智能化交通系统(ITS, Intelligent Traffic System)[1]受到人们越来越多的关注并且成为了一个热门的研究领域。车牌识别(LPR, License Plate Recognition)作为重要技术已经成为系统关键部分的组成。采集到的车牌图像在一定程度上存在着角度的倾斜,若倾斜角度偏大,则会干扰到了字符识别的准确性,对字符进行分割和识别等工作带来相当大的困扰。所以说车牌倾斜校正在车牌识别系统中起到了重中之重的地位。基于FPGA在硬件层面对车牌图像进行倾斜校正,根据倾斜校正算法的特点要求的是实时性和并行性,因此FPGA能很好的达到系统要求,无论是在速度、稳健性、存储容量、复杂环境等方面都可以有可观的改善。并且基于FPGA的车牌图像倾斜校正系统可以广泛的应用在车牌图像处理和识别系统当中。
系统的整体框架设计
如图1所示为系统的整体设计框图,车牌图像经过DA转换模块ADV7180转换成图像数据,将数字图像输入到图片输入FIFO,再进入到Hough变换模块,同时由CORDIC算法得到的正余弦函数值存入片内ROM后,将函数值送到Hough变换模块进行倾斜角度的测量,将角度存入片内RAM中,进入图像旋转模块进行图像旋转,再对旋转后的图像进行双线性插值,将经过倾斜校正的车牌图像存入FIFO通过显示控制器到D/A转换模块ADV7123,最后通过VGA显示出倾斜校正后的车牌图像。
车牌倾斜校正的软件实现
对于车牌倾斜校正算法,要确定车牌的倾斜角,之后对其进行旋转,采用Hough变换测得直线,从而得到倾斜角,在Hough变换的过程中通过CORDIC算法来实现正余弦三角函数值的确定,通过基于CORDIC算法的Hough变换实现得到倾斜角度,最后对图像进行相应的旋转和插值,最终达到倾斜校正的目的。
对于车牌倾斜校正算法的基本原理,Hough变换,CORDIC算法以及图像旋转原理和插值方法这些传统的方法,经过进一步的研究后得出新的优化算法。首先,倾斜校正算法由两部分来完成,一个是通过Hough变换来求得车牌图像的倾斜角度,第二部分是通过得到的倾斜角度,对车牌图像进行旋转为了产生“空洞现象”再进行插值方法,最终得到结果图像,以达到倾斜校正的目的。不论是Hough变换,还是旋转变换,都需要大量的三角函数计算,在FPGA硬件实现中,通常都是使用三角函数查找表来完成,在这里,将用到的是基于CODRIC算法来得到三角函数值,并存在FPGA内部的ROM中,来配合Hough变换的进行。
采用CORDIC迭代算法的流水线结构[2],每一级CORDIC迭代运算都采用独立的一组运算单元,流水线被填满后,每个时钟周期都会计算得到一组数据,它的快速处理确保了数据实现实时高速处理的前提,每一级功能的实现都迭代一次,移位的位数与当前的迭代级数相等,选择加减法的依据由该级中Z的最高符号位来决定,从而得到下一级运算中的x、y、z值。经过流水线运算N级后,z等于0,x为初始值z0的余弦值,y为初始值z0的正弦值。每一级运算单元的结构主要由3个加(减)法器和2个移位器组成,级与级之间不需要其他的寄存器,直接相连。唯有值为arctan(2- i),可将其转换为二进制数后,在存储单元内提供查找表给每一级流水线。
对于FPGA实现Hough变换主要分为对ρ值的计算和Hough变换空间点坐标值累加两部分。对于平面空间中的直线上的所有点,在参数空间中的正弦曲线都将交于一点,因此,对值进行计算,并且逐次加1,完成累加后,设定阈值,因此,在阈值上的点就是参数空间中相交的这个点,在平面空间中对应的就是要检测得到的直线,最后获得倾斜角度。ρ值的计算过程,用乘法模块计算α从CODRIC算法模块中sinα和cosα得出的值和空间坐标的x与y相乘的值,最后通过加法模块的运算得出ρ的值[3]。
乘法模块的作用是完成倾斜校正算法中Hough变换和旋转算法中图像坐标变换所需要的乘法运算。在Hough变换中x,y是8bit,在图像旋转中,正余弦三角函数值是16bit,由此,本系统中,构造乘法模块的规格是8bit×16bit,这样才能进行乘法运算,在乘法模块的输入端是8bit和16bit的变量,输出端为24bit的数据。
符号运算模块的作用是完成倾斜校正算法中符号数的处理和运算操作。这里主要是针对算法中的正余弦函数值以及在图像旋转算法中的减法运算结果可能为正也可能为负。对于sin和cos可以通过对sin_sign和cos_sign赋值来表示,0正,1负。在图像旋转中,x,y则用x_sign和y_sign赋值表示,0正,l负[4]。通过对符号进行异或运算得到叠加运算中的所有符号,最后得到运算结果。
仿真结果
采用ModelSim仿真工具进行仿真,下图为对系统整体仿真的波形图,并且对仿真的结果进行了分析。
角度的精确值与系统中处理过后的三角函数值,精度基本为10- 5,所得误差在接受范围内。从仿真图可以看到,该系统能完成对倾斜车牌图像的校正,对于圖像的效果需要接下来的车牌识别的步骤得以完善,最终呈现出一副端正清晰地车牌图像。
参考文献:
[l]史其信,陆化普.中国ITS发展战略构想.公路交通科技.1998.
[2] 孔德元.针对正余弦计算的CORDIC算法优化及其FPGA实现:[硕士学位论文].长沙:中南大学,2008.
[3]商尔科,李健,安向京等.基于FPGA的实时Hough变换.计算机工程.2010,36(16).
[4]曾祥萍.实时图像的电子消旋技术:[硕士学位论文].西安:中国科学院光电技术研究所,2006.
[5]李洪伟.图像跟踪器中视频处理系统的设计与电子消像旋的实现:[硕士学位论文].成都:电子科技大学,2006.
[6]王新新,于素萍,赵小明.基于CORDIC算法的Hough变换及其FPGA实现.通信技术2010,7(43)
[7]Tso- Bing Juang,Ming- Y u Tsai.Para- CORDIC:Parallel CORDIC RotationAlgorithm[J].IEEE Transactions on Circuits and Systems,2004,51(8):1515- 1524.