车牌识别项目

1图像识别部分软件设计

图像处理部分是本系统的重中之重,本系统的图像处理部分图像处理视觉库是OpenCV2.4.9,采用C++编程,编程环境是VS2015,先在VS2015上实现opencv算法设计,然后将代码移植到QT上。

1.1车牌定位

为了能够识别到正确的车牌信息,必须将字符图像从原图像中分离出来,然后对每字符进行识别定位,本系统采用的方法如下:

首先对原图像转换到HSV色域,留下蓝色图像(本系统暂时只能识别色车牌),通过Canny边沿检测,对其进行腐蚀膨胀处理,然后查找轮廓信息通过车牌的长宽比例信息筛选出车牌图片,经过这些处理以后,对二值化的图像进行边沿检测寻找轮廓,根据轮廓大小进行滤波处理得到正确的字符的轮廓,再通过寻找每个轮廓的像素点位置信息的最小包围矩形,然后将原图中对应矩形内的图像进行截取和旋转得到某一个字符的图像,就可以对该图像进行后续的类型识别和定位。

1.1.1通过HSV色域初步筛选车牌信息

首先需要将处理的图像转换到HSV色域,转换到HSV色域空间的主要是为了侧重图像的颜色、深浅以及明暗的表示,这个模型就是按色彩、深浅、明暗来描述的。H是色彩;S是深浅, S = 0时,只有灰度;V是明暗,表示色彩的明亮程度,但与光强无直接联系。这样的处理是为了将图像的背景色去掉,只保留清晰的车牌图像信息,通过阈值的选择,将有关车牌的信息设置为0,其余像素点设为255。得到了滤除背景的图像。经过反复的实验,H的范围定在100~125、S的范围在125~255之间、H的范围在50~245之间这几个范围能很清楚的得到车牌的信息,虽然背景没有滤除干净,但是通过后续的处理,能够得到完整的车牌信息。

车牌识别项目_第1张图片

 

1.1.2腐蚀膨胀获得车牌图像

为了使车牌的信息更加的明显,将图像腐蚀膨胀后,可以滤除一些小黑点,通过对处理后的图像信息的轮廓的长宽比例进行筛选得到正确的车牌信息,然后截取车牌的图像,获得车牌的二值化图片。

车牌识别项目_第2张图片

1.2字符分割

1.2.1分割字符

得到车牌灰度图后,由于有的汉字并不是连在一起的,采用检测边沿的方法就会导致将汉字误识别的结果,因此先保留原图信息,将复制出来的车牌信息进行膨胀处理,将汉字的图像信息连接在一起得到完整的汉字信息。如图是膨胀前后的图像对比。膨胀后“浙”的笔画连接在了一起方便识别。

车牌识别项目_第3张图片

 

通过对二值化图像进行边沿检测,得到闭合轮廓信息,对闭合轮廓寻找其外接矩形,通过长宽比例和车牌的长宽比例进行对比可以得到单个字符的图像。

 

1.2.2对字符进行定位排序

对单个字符的外接矩形的位置进行判断确定该字符需要识别的类型(汉字或者是字母数字)得到字符的识别顺序。

车牌识别项目_第4张图片

 

 

1.3字符的识别

该系统中的识别方法采用了基于BP神经网络算法的图像识别。在opencv下有对应的API接口来实现BP神经网络算法。opencv中代码主要分为两部分:训练网络和实现网络。其大致流程如图。

车牌识别项目_第5张图片

 

1.3.1训练神经网络

训练网络大致又分为三个过程:创建网络、训练网络以及保存网络。在opencv中创建神经网络使用create函数,在创建网络前,须要准备好训练的样本,这些样本都是是由我从网络上搜集的图片,本系统一共训练了两个神经网络,分别是汉字(chinese文件夹)和数字字母(charSamples文件夹),训练图像的文件夹如图。汉字由于收集到的图片有一类只有61张因此我们只选取了60(张)*20(类)张图片,没有包含所有省份(主要是图片太少分类太多会导致识别效果不佳,经过实验选取了20个省份)。字母和数字方面抛弃了‘O’和‘I’两个字母(车牌里没有这两个字符,而且和数字‘0’和‘1’不易区分)一共选取了175(张)*34(类)个样本图片。图片的训练大小都是16*20,图片的类型都在代码种转换到了二值化图片进行分类。

车牌识别项目_第6张图片

 

样本准备好以后使用opencv下对应的API函数,完成相训练。训练完成后通过save函数保存bpcharModel_chinese.xml、bpcharModel_16_20.xml供实现网络使用。

车牌识别项目_第7张图片

 

1.3.2识别车牌字符

实现神经网络的函数是predict(const Mat &inputs,Mat &outputs);inputs为输入矩阵。它存储了当前需要检测样本的特征。outputs为一个1*分类数的行向量,其中待检测图像与各个类的相似程度,通过选取相似程度最大的那一类即可实现工件种类的识别,通过上一小节已经截取好的图像(像素大小为16*20),将图像数据保存在inputs输入矩阵中,识别结果如下。

车牌识别项目_第8张图片

2QT应用程序软件设计

2.1开发环境

由QT安装时的选项选择了msvc2015,导致opencv2.4.9在QT上无法使用,因此代码移植到QT上时使用的开发环境是QT5.9.1+opencv4.1.0。

2.2界面设计

软件界面设计如下,主要包括两个pushButton控件用于选取图片和开始识别,一个textBrowser控件显示识别信息,9个graphicsView控件显示图像。

车牌识别项目_第9张图片

 

2.3代码设计

识别部分的代码主要是由VS上的调试代码移植过来。QT上主要是两个按键的代码,包括载入图像和识别图像以及显示识别信息。

项目使用说明

QT上位机软件的使用方法如下:

(1)打开图片

车牌识别项目_第10张图片

 

(2)开始识别

车牌识别项目_第11张图片

 

(3)识别结果:

车牌识别项目_第12张图片

你可能感兴趣的:(计算机视觉)