新闻  |   论坛  |   博客  |   在线研讨会
基于fpga的车牌自动识别系统
330554237 | 2009-09-13 01:19:54    阅读:1330   发布文章

1.       车牌定位
第一步预处理:首先对图像灰度化,通过资料查询运用公式f(x,y)=0.3R(x,y)+0.59G(x,y)+0.11B(x,y),即对彩色图像完成灰度化,并可计算其均值和均方差从而获得分割门限作为后面要用的区分度阈值,其次二值化获得最佳阈值,可采用公式g=X*Y*(A-B)* (A-B),其中X代表前景点数占图像比例,A为平均灰度,Y代表背景点数占图像比例,B为平均灰度,当g达到最大时极为分割的最佳阈值。
第二步边缘检测:将获得的图像按照每三列划分为一帧,帧窗口的数据按照每三行划分为一个像素处理窗口进行逐一处理,采用SOBEL算子,设置权重来检测水平,垂直,左对角,右对角对各个不同方向上的密度幅度的不同。即各方向
H=(Q0+2Q3+Q6)-(Q2+2Q5+Q8),V=(Q0+2Q1+Q2)-(Q6+2Q7+Q8), DR=(Q1+2Q0+Q3)-(Q5+2Q8+Q7), DL=(Q1+2Q2+Q5)-(Q3+2Q6+Q7)。
在该系统中可分为四个大的模块:
   帧窗口接受模块:负责接受传送过来的一个帧窗口的数据,
   串入并出模块:负责把上模块的数据转换成为像素处理窗口的列像素向量,
   像素窗口刷新模块:实现对需要处理的像素的刷新,
   数据处理模块:本模块为该设计的核心部分,主要是实现SOBEL算法。
   在这些模块中可使用参数化模块库LPM使设计更加简单,效率更高且更加精确。
2.       字符分割,字符识别:这两个模块主要是还限于理论方面的研究,和深入的算法选择。
   字符分割目前先采用垂直投影分割算法,因为我们所要处理的对象是相对类型较少,变化较小的车牌图像,所以采用简单的直接分割法,具体来所就是直接找到车牌上每个字符的边界,之后对单个字符进行识别。
   字符识别我们作为备选的由两种:模块匹配和BP神经网络。
1.           在对图像灰度化过程中运用的公式明显过于复杂,在用EDA技术对其运算时不太方便,最后经过讨论与查阅资料最后为了简化处理选择直接取三个分量的平均值作为像素的灰度值:f(x,y)= (R(x,y)+G(x,y)+B(x,y))/3。
2.           在边缘检测中其实在过去二十年中产生了许多边缘检测器,如rorberts算子,sobel算子,prewitt算子,laplacian算子。在这些算子的选择过程中徘徊了很久,最后考虑到sobel算子只涉及加法操作,但却可以得到很好的划分效果,因而选择该算子。
3.           最难的一点也是关于该算子算法的设计,这一模块耗费的相当大的功夫,因为对时序的要求相当的严格,最后选择参数化模块库LPM,这是一相当有用的,大大简化了我们的设计,且功能也很好的满足了。
4.           帧窗口接收模块的使用具有很大的作用,因为考虑到高速设备与慢速设备之间的处理速度的差别,它们之间的数据传输可采用查询方式和中断方式,于是在该模块中采用先进先出的数据缓存器FIFO,它能够很好的处理模块之间的通信。
5.           由前述算子的公式可看出,对一像素窗加法需要执行24次,加法的中间结果寄存20次,大小比较3次,于是可看出对整幅图像来说是相当大的运算量,于是我们采用两级并行流水方案,在不采用流水线的情况下,像素从进入处理器到结果输出,需要经过两级加法和一级减法的时延,但是使用流水线技术后,结果输出仅仅滞后三个时钟频率,但是增加了数据吞吐量,同时也提高了时钟的频率,为提高加法运算的速度,还能采用超前进位加法器。
 

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客