基于STM32的车牌识别系统
一、系统概要
本系统以STM32F103RBT单片机为主控,控制OV7670摄像头(带FIFO)进行图像采集,通过模式识别、匹配,最后获得车牌的识别结果。
为尽大可能的提高处理速度,STM32单片机进行了16倍频。
识别主要过程包括
五过程。
二、系统框图
三、识别原理
1、图像采集
图像通过OV7670摄像头进行数据采集,采集的图像大小为320*240像素,像素格式为RGB565。
每个像素由两字节组成,第一字节的高五位是R,第一字节的低
三位和第二字节的高三位组成G,第二字节的低五位是B。
图像通过STM32单片机
读取,并将数据进行特殊处理后,显示于TFT显示屏上。
2、二值化分析
摄像头的数据在采集过程中,对每个像素进行二值化处理,即设定R、G、B的阈值。
通过二值化处理,将像素值分为全黑0x0000和全白0xffff两种。
同时通过程
序分析出每行的跳变点。
分析跳变点的目的是识别出车牌区域。
3、识别车牌区域
通过二值化分析出各行的跳变点,车牌区域处由于字符,导致跳变点明显较多,约大于15个,通过跳变点的分析和判断,即可识别出车牌区域位置。
如下图中左
侧红色标记点,即为各行的跳变点数目。
本系统程序中设定跳变点大于15个,在
连续行存在多个跳变点大于15的位置处,将起始位置设定为车牌区域的上边边界
Y_up,结束位置设定为车牌区域的下边边界Y_down。
再通过RGB-HSV颜色转换,
识别出车牌区域的左边边界X_left和右边边界X-right。
这样既可获取车牌区域的准
确边界,如下图蓝色边框范围。
4、字符分割
车牌区域识别后,再次通过二值化进行字符的分割处理。
处理过程中,获取各个字
符的左边边界kk和右边边界k,若分割出来的字符数为8,则分割比较准确。
如下
图所示,竖向蓝线为各个字符的边界标记。
字符分割,为下一步字符匹配准备总要
参数。
5、字符匹配
字符分割后,进行归一化处理,再逐一对各个字符进行字符匹配。
字符模板通过取
模软件先提取出,存放于程序中,其大小为24*50的单一像素。
匹配后,将相似性
最大值的对应字符作为输出结果,并予以显示。
因单片机容量有限,目前车牌识别的汉字只有6个:渝闽京浙陕粤。
买家可以通过
更改程序,更换其他的汉字。
数字和字母是全部能识别。
四、电路原理图
系统供电为DC5V ,接入STM32核心板5V引脚。
STM32核心板上通过稳压芯片AMS1117将5V变为3.3V电压,并通过核心板引脚输出。
3.3V电压为STM32芯片、摄像头模块、TFT 彩屏的供电电压。
焊接电路时,将摄像头模块和TFT彩屏接至3.3V引脚,而不是5V引脚。
五、重要问题解答
1、如何进行车牌定位?车牌定位是怎么实现的?
答:车牌定位是通过分析横向跳变点实现的,横向的每一排像素进行二值化后变成“黑”和“白”两种像素,非车牌区域黑与白的跳变次数较少,通常少于15个跳变点。
而车牌区域的每一排像素黑与白的跳变次数通常都大于15次。
因为车牌区域的字符是白色,非字符区域二值化为黑色。
因为字符的填充,使得跳变点数量变多。
这就是通过跳变点分析出车牌区域的关键原理。
2、截取车牌的程序是什么?
答:截取车牌程序即车牌的纵向定位分析与横向定位分析,纵向定位分析即为车牌定位步骤,并获得车牌的高度。
横向定位分析获得车牌的宽度。
a)纵向定位分析,获取车牌的上下边界和高度值程序
a)横向车牌分析程序(采用“蓝色相似”方法,获取车牌的左右边界)
3、用什么样的算法来实现定位截取车牌的?
答:纵向定位的方法为像素二值化后的跳变点计数法,利用车牌区域跳变点数量突出且连续,记录在数组中,最后分析数组值实现车牌纵向定位。
横向定位截取采用RGB转HSV 算法实现左右边界的定位。
HSV对用户来说是一种直观的颜色模型,通过HSV的转换可判断出“相似的蓝色区域”的目的,也就是车牌的左右边界定位时,寻找最左边和最右边的蓝色位置。
4、硬件10s左右能识别车牌,这个是怎么实现的?为什么是需要10秒左右?
答:10S这个值是为了给拍照时间。
因为拍照是认为的拍照,摄像头对着车牌时需要调节好位置与角度。
为了更好的对准车牌,给了这样一个时间。
5、电路板中晶振的作用是什么?
答:是STM32芯片所需的8MHz晶振。
每个单片机系统里都有晶振,全称是叫晶体震荡器,在单片机系统里晶振的作用非常大,他结合单片机内部的电路,产生单片机所必须的时钟频率,单片机的一切指令的执行都是建立在这个基础上的,晶振的提供的时钟频率越高,那单片机的运行速度也就越快。
-The End。