当前位置:文档之家› 基于STM32的车牌识别系统

基于STM32的车牌识别系统

基于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。

相关主题