1.简介
智能交通系统利用先进的信息技术改善交通状况,使交通更畅通、更安全、更绿色。车牌识别系统是的核心技术之一,它主要包括车牌定位、字符分割和字符识别三个核心模块。随着安防视频步入高清时代,视频的分辨率越来越高,智能交通系统对车牌识别技术有了更高的要求:处理速度更快、环境适应性更强、识别率更高。
本文从预处理、边缘检测、车牌定位、字符分割、字符识别五个方面,具体介绍了车牌自动识别的原理。并用MATLAB软件编程来实现每一个部分,最后识别出汽车牌照。
2 牌照字符分割
完成牌照区域的定位后,再将牌照区域分割成单个字符,然后进行识别。字符分割一般采用垂直投影法。由于字符在垂直方向上的投影必然在字符间或字符内的间隙处取得局部最小值的附近,并且这个位置应满足牌照的字符书写格式、字符、尺寸限制和一些其他条件。利用垂直投影法对复杂环境下的汽车图像中的字符分割有较好的效果。
-
计算水平投影进行车牌水平矫正。
-
去掉车牌的框架。
-
分析垂直投影找到每个字符中心的位置。
-
按左右宽度切割出字符。
3. 牌照字符识别
字符识别方法目前主要有基于模板匹配算法和基于人工神经网络算法。基于模板匹配算法首先将分割后的字符二值化,并将其尺寸大小缩放为字符数据库中模板的大小,然后与所有的模板进行匹配,最后选最佳匹配作为结果。基于人工神经元网络的算法有两种:一种是先对待识别字符进行特征提取,然后用所获得特征来训练神经网络分配器;另一种方法是直接把待处理图像输入网络,由网络自动实现特征提取直至识别出结果。实际应用中,牌照识别系统的识别率与牌照质量和拍摄质量密切相关。牌照质量会受到各种因素的影响,如生锈、污损、油漆剥落、字体褪色、牌照被遮挡、牌照倾斜、高亮反光、多牌照、假牌照等等;实际拍摄过程也会受到环境亮度、拍摄亮度、车辆速度等等因素的影响。这些影响因素不同程度上降低了牌照识别的识别率,也正是牌照识别系统的困难和挑战所在。为了提高识别率,除了不断的完善识别算法,还应该想办法克服各种光照条件,使采集到的图像最利于识别。
支持从导入原始图像,到最后的图像中的最后牌照输出到excel表格,其中经历了灰度处理,中值滤波,边缘检测,腐蚀,平滑等各种处理手段,之后产生了定位切割后的牌照图像,再对此牌照进字符识别处理,最后输出在excel表格上。
4.代码如下
% function [d]=main()
close all
clc % 清空命令窗口的所有输入和输出,类似于清屏
%自动弹出提示框读入图像
[filename,filepath]=uigetfile('.jpg','输入一个需要识别的车牌图像');% 直接自动读入%
file=strcat(filepath,filename); %strcat函数:连接字符串;把filepath的字符串与filename的连接,即路径/文件名
I=imread(file);
figure('name','原图'),imshow(I);title('原图')
%图像增强
% h=ones(5,5)/25; %过滤器h
% I=imfilter(I,h);%真彩色增强
% figure('name','真彩色增强');imshow(I);title('真彩色增强');
I1=rgb2gray(I); % RGB图像转灰度图像
% %figure('name','灰度处理前'),subplot(1,2,1),imshow(I1);title('灰度处理前的灰度图');
% % subplot(1,2,2),imhist(I1);title('灰度处理前的灰度图直方图');
%线性灰度变换
I1=imadjust(I1,[0.3,0.7],[]);
figure('name','灰度处理后'),subplot(1,2,1),imshow(I1);title('灰度处理后的灰度图');
subplot(1,2,2),imhist(I1);title('灰度处理后的灰度图直方图');
%进行中值滤波
I1=medfilt2(I1);
figure,imshow(I1);title('中值滤波');
%边缘检测:sobel,roberts,canny,prewitt等
I2=edge(I1,'roberts',0.25,'both'); %边缘检测算法,强度小于阈值0.15的边缘被省略掉,'both'两个方向检测(缺省默认)
figure('name','边缘检测'),imshow(I2);title('robert算子边缘检测')
se=[1;1;1];
I3=imerode(I2,se);% 腐蚀Imerode(X,SE).其中X是待处理的图像,SE是结构元素对象
figure('name','腐蚀后图像'),imshow(I3);title('腐蚀后的图像');
se=strel('rectangle',[20,20]);% 25X25的矩形 strel???
I4=imclose(I3,se);% 用25*25的矩形对图像进行闭运算(先膨胀后腐蚀)有平滑边界作用
figure('name','平滑处理'),imshow(I4);title('平滑图像的轮廓');
I5=bwareaopen(I4,1000);% 从二进制图像中移除所有少于2000像素的连接对象,消失的是连续的白色像素数量少于2000的字符
figure('name','移除小对象'),imshow(I5);title('从对象中移除小对象');
[y,x,z]=size(I5);% y是行数,x是列数,z是维数
myI=double(I5);% 转成双精度型
tic % 开始计时
Blue_y=zeros(y,1);% zeros(M,N) 表示的是M行