基于神经网络的车牌识别系统

基于神经网络的车牌识别系统


前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、总体方案设计

车牌识别是常见的一种识别场景,特别是对于刚入门机器学习同学来说,通常车牌识别都是基于模板匹配来做的,这里介绍一种基于神经网络的车牌识别系统。
基于神经网络的车牌识别系统主要分为三个部分,第一个部分,准备数据;第二个部分,训练神经网络模型;第三个部分,测试模型以及使用模型;

在这里插入图片描述

二、数据准备

2.1 车牌定位

这里主要利用 颜色特征,每种车牌的底色具有各自特殊的RGB值,例如程序中使用的蓝底车牌的典型RGB值为 R = 28,G = 63, B = 138; 当RGB值接近时则认为可能是车牌,将该点像素赋值为255,否则0;具体代码如下(如有侵权请联系)。
代码如下(示例):

function [y_image] = extract_blue_region(image);
% extract_blue_region: Determines the blue regions in the picture using
% the CIE-XYZ color system, and returns a black and white picture which is
% set on the yellow regions only.

% Define the lines in CIE-XYZ space, use to determine yellow color 
lower_A = 0.87; lower_B = 0.04;
upper_A = 1.5 ; upper_B = -0.125;

% Convert 8-bit format of org_pic pixels to double format
pic = double(image)+1;
pic = pic.*1.6;

% Conversion from RGB709 to CIE-XYZ
x = ( pic(:,:,1).*0.412453 + pic(:,:,2).*0.35758 + pic(:,:,3).* 0.180423);
y = ( pic(:,:,1).*0.212671 + pic(:,:,2).*0.715160 + pic(:,:,3).* 0.072169);
z = ( pic(:,:,1).*0.019334 + pic(:,:,2).*0.119193 + pic(:,:,3).*0.950227);

sum = x + y + z;
x_bar = x./sum;
y_bar = y./sum;

% Define yellow color in CIE-XYZ space
x_sum_conds = ( ((x_bar > 0.34) & (sum > 400) & (sum < 500) ) | ((x_bar > 0.37) & (sum > 200) & (sum < 500)) );
xy_conds = ( (y_bar > 0.35) & (y_bar < 0.5) & (y_bar > (lower_A*x_bar + lower_B)) & (y_bar < (upper_A*x_bar + upper_B)) );

y_image = (x_sum_conds & xy_conds);
return;

以一张图片的效果为例,定位效果如下图
在这里插入图片描述

在这里插入图片描述

2.2 字符裁剪

在定位以后,想要知道具体车牌是多少,必须对车牌进行字符切割,切割的方式有很多,这里是利用车牌的彩色信息的彩色分割方法。根据车牌底色等有关的先验知识,采用彩色像素点统计的方法分割出合理的车牌区域,确定车牌底色蓝色RGB对应的各自灰度范围,然后行方向统计在此颜色范围内的像素点数量,设定合理的 阈值,确定车牌在行方向的合理区域。然后,在分割出的行区域内,统计列方向蓝色像素点的数量,最终确定完整的车牌区域
代码如下(示例):

function e=qiege(d)
[m,n]=size(d);
top=1;bottom=m;left=1;right=n;   % init
while sum(d(top,:))==0 && top<=m
    top=top+1;
end
while sum(d(bottom,:))==0 && bottom>=1
    bottom=bottom-1;
end
while sum(d(:,left))==0 && left<=n
    left=left+1;
end
while sum(d(:,right))==0 && right>=1
    right=right-1;
end
dd=right-left;
hh=bottom-top;
e=imcrop(d,[left top dd hh]);

2.3 构建字符库

将不同的车牌进行裁剪,然后将字符归类,如下图所示,可以建立一个字符库,然后利用批量读图程序,将所有数据读进去Dataset和label中,其中Dataset=[40,20,220],label=[220,1],220表示样本个数,40,20表示一张图的大小。
在这里插入图片描述
该数据库样本个数越多,后期模型精度越高。

三、神经网络模型训练

3.1 数据预处理

这里主要对建立的字符库进行处理,需要对Dataset进行归一化处理,然后将label变成适应神经网络输入的形式,如下面的代码。

for i=1:len
    for j=1:max(label)
        if j-1==train_y(i)
        train_y1(i,j)=1;
        end
    end
end
train_y= train_y1;

3.2 模型训练

神经网络训练主要是调用Matlab自带的工具箱,训练的网络结构如下图所示,这里需要注意的是输入输出层的大小。在训练完成以后,对模型进行测试,测试结果如下图所示。可以看到,该模型的精度基本满足需求。

在这里插入图片描述

请添加图片描述
在这里插入图片描述

四、车牌识别系统软件

在设计完成整个流程以后,这里利用Matlab的GUI对整个程序进行整合,得到一个车牌识别系统软件,如下图所示,

在这里插入图片描述
我们任意选择一个车牌,识别效果如下图所示,
在这里插入图片描述

可以看到,该模型对某些图片的识别精度还是比较高的,但是并不是每个都能识别这么准确,这和模型训练的样本个数,以及模型的泛化能力息息相关。

总结

本文没有对理论过多介绍,主要是介绍了基于神经网络的车牌识别系统所需要的基本流程,来最终做出一个简单的车牌识别系统,如果想要用其他算法,或者是提高精度,需要对流程中的某个部分进行精细替换。

  • 6
    点赞
  • 106
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值