基于FPGA的数字识别方案
数字识别方案
基于FPGA的数字识别的实现
原理介绍
数字特征信息的提取基于打印体,如上图1,以图1数字5举例,红框是数字5的水平和竖直的上下左右边界。X1在竖直方向的2/5处的水平线,x2在竖直方向的2/3处的水平线,y在水平方的1/2处的水直线。我们以此特征来统计x1,x2,y与数字5的交叉点。
以交叉统计法来区分0-9数字的特征如下表1:
数字 | 与y交叉点个数 | 与x1交叉点个数 | 与x2交叉点个数 | 分类 |
---|---|---|---|---|
0 | 2 | 2 | 2 | A |
1 | 1 | 1 | 1 | B |
2 | 3 | 1 | 1 | C |
3 | 3 | 1 | 1 | C |
4 | 2 | 2 | 1 | D |
5 | 3 | 1 | 1 | C |
6 | 3 | 1 | 2 | E |
7 | 2 | 1 | 1 | F |
8 | 3 | 2 | 2 | G |
9 | 3 | 2 | 1 | H |
由于2,3,5的数字特征统计表一样,无法区分所以我们继续增加数字特征以区分2,3,5。如表2:
数字 | 与x1的交叉点位置(左,右) | 与x2的交叉点位置(左,右) | 分类 |
---|---|---|---|
2 | 右 | 左 | I© |
3 | 右 | 右 | J© |
5 | 左 | 右 | K© |
这样通过数字统计完全区分开数字0-9。然后利用FPGA系统搭建实时数字识别系统。
FPGA原理
图像采集使用 ov5640 cmos 500W像素摄像头,将采集到的彩色RGB图像首先存入SDRAM中,然后由TFT显示控制端读出图像数据,读出RGB图像数据后,我们首先进行RGB转Ycbcr算法操作,然后对灰度图像进行阈值分割,形成二值图像,对二值数字图像进行边界追踪的基础上进行数字识别,最终将边界显示在TFT5寸屏幕上,将识别的数字信息显示在数码管上。
数字识别核心代码
模块图
ps: 字母和汉字识别
将字符或汉字分成N*M等份,这样针对同一字符,不同大小得到的特征值相差不是很大。相当于对字符进行降维统计,因此N和M值应相对合适,否则特征值过多或过小。N*M越大,模板越大,特征越大,区分字符的能力就越大,但同时计算量越大,失去了降维的意义。N*M过小,则对比结果不准确。
根据经验样品数与特征数之比应足够大,通常样本数是特征数的5~10倍左右。根据车牌字符的特殊形状,取5*8。
如图,统计每一份内的像素个数,与每一份所有像素点个数进行对比。若大于二分之一则记这一份为1。