|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
W; R0 s2 ^6 ^! }% H m( I1 E1.简介" }+ g- q3 @6 w; {. X1 @
智能交通系统利用先进的信息技术改善交通状况,使交通更畅通、更安全、更绿色。车牌识别系统是的核心技术之一,它主要包括车牌定位、字符分割和字符识别三个核心模块。随着安防视频步入高清时代,视频的分辨率越来越高,智能交通系统对车牌识别技术有了更高的要求:处理速度更快、环境适应性更强、识别率更高。+ @# S! ^% M ?: l+ v
8 I9 \% X) {/ A7 z. y本文从预处理、边缘检测、车牌定位、字符分割、字符识别五个方面,具体介绍了车牌自动识别的原理。并用MATLAB软件编程来实现每一个部分,最后识别出汽车牌照。& u$ C: z0 I5 a: {* y6 z) D
# U! g Y+ ~, [! o- o
- p( m3 q1 S; A, K; t2 B) W: Q0 ?+ c& z# [$ @" E
2 牌照字符分割0 A5 V. v# Z$ ]1 B' ^
6 [4 r( B( l+ F+ m3 n完成牌照区域的定位后,再将牌照区域分割成单个字符,然后进行识别。字符分割一般采用垂直投影法。由于字符在垂直方向上的投影必然在字符间或字符内的间隙处取得局部最小值的附近,并且这个位置应满足牌照的字符书写格式、字符、尺寸限制和一些其他条件。利用垂直投影法对复杂环境下的汽车图像中的字符分割有较好的效果。
5 r+ g$ ?. i0 n( P
* c4 F# m5 Q0 E/ Z计算水平投影进行车牌水平矫正。3 F5 N3 ]" T0 n, g
# [) V, @$ j, F2 r6 w! j8 R; K去掉车牌的框架。4 n. G1 J% T3 H$ s% m# r
, u4 i" I! w6 K) C! Z, k* p$ _分析垂直投影找到每个字符中心的位置。' G1 M+ T, H6 @
) _1 e3 R# w& M+ Z. U按左右宽度切割出字符。
- P8 E' ?. `: T6 \7 y. i
0 w- U' g1 r( s: [- f$ `* o F
7 h5 o/ p3 z$ m5 k9 W& l4 |3. 牌照字符识别5 A4 m6 ]/ \# [- Z! w) ~ E
- K9 h' }, i% B" Y6 b' o
- 字符识别方法目前主要有基于模板匹配算法和基于人工神经网络算法。基于模板匹配算法首先将分割后的字符二值化,并将其尺寸大小缩放为字符数据库中模板的大小,然后与所有的模板进行匹配,最后选最佳匹配作为结果。基于人工神经元网络的算法有两种:一种是先对待识别字符进行特征提取,然后用所获得特征来训练神经网络分配器;另一种方法是直接把待处理图像输入网络,由网络自动实现特征提取直至识别出结果。实际应用中,牌照识别系统的识别率与牌照质量和拍摄质量密切相关。牌照质量会受到各种因素的影响,如生锈、污损、油漆剥落、字体褪色、牌照被遮挡、牌照倾斜、高亮反光、多牌照、假牌照等等;实际拍摄过程也会受到环境亮度、拍摄亮度、车辆速度等等因素的影响。这些影响因素不同程度上降低了牌照识别的识别率,也正是牌照识别系统的困难和挑战所在。为了提高识别率,除了不断的完善识别算法,还应该想办法克服各种光照条件,使采集到的图像最利于识别。" {0 n% T! Z5 x6 d- M
; I* E A, S2 E1 v( D# M7 {
2 a& Y8 e g0 I- h" W: K& b3 R/ W, i5 s6 T
- 支持从导入原始图像,到最后的图像中的最后牌照输出到excel表格,其中经历了灰度处理,中值滤波,边缘检测,腐蚀,平滑等各种处理手段,之后产生了定位切割后的牌照图像,再对此牌照进字符识别处理,最后输出在excel表格上。# Y1 P4 a) }1 E0 _6 @
J+ n0 Z4 @) J; f- H$ c' o/ z# a: {1 b; W# A. j' e9 L
二、源代码
, G8 @2 a! S" G" t5 N9 r' p 6 c0 T' P4 x2 |
- clc
- close all;
- clear;
- load imgfildata;
- [file,path]=uigetfile({'*.jpg;*.bmp;*.png;*.tif'},'Choose an image');
- s=[path,file];
- picture=imread(s);
- [~,cc]=size(picture);
- picture=imresize(picture,[300 500]);
- if size(picture,3)==3
- picture=rgb2gray(picture);
- end
- % se=strel('rectangle',[5,5]);
- % a=imerode(picture,se);
- % figure,imshow(a);
- % b=imdilate(a,se);
- threshold = graythresh(picture);
- picture =~im2bw(picture,threshold);
- picture = bwareaopen(picture,30);
- imshow(picture)
- if cc>2000
- picture1=bwareaopen(picture,3500);
- else
- picture1=bwareaopen(picture,3000);
- end
- figure,imshow(picture1)
- picture2=picture-picture1;
- figure,imshow(picture2)
- picture2=bwareaopen(picture2,200);
- figure,imshow(picture2)
- [L,Ne]=bwlabel(picture2);
- propied=regionprops(L,'BoundingBox');
- hold on
- pause(1)
- for n=1:size(propied,1)
- rectangle('Position',propied(n).BoundingBox,'EdgeColor','g','LineWidth',2)
- end
- hold off
- figure
- final_output=[];
- t=[];
- for n=1:Ne
- [r,c] = find(L==n);
- n1=picture(min(r):max(r),min(c):max(c));
- n1=imresize(n1,[42,24]);
- imshow(n1)
- pause(0.2)
- x=[ ];
- totalLetters=size(imgfile,2);
- for k=1:totalLetters
- y=corr2(imgfile{1,k},n1);
- x=[x y];
- end
- t=[t max(x)];
- if max(x)>.45
- z=find(x==max(x));
- out=cell2mat(imgfile(2,z));
- final_output=[final_output out];
- end
- end
- file = fopen('number_Plate.txt', 'wt');
- fprintf(file,'%s\n',final_output);
- fclose(file);
- winopen('number_Plate.txt'), @# x) ~# J, d0 Q# F7 q
& U1 [% L ?/ `& x8 ?8 A- x3 f
+ K/ ]0 V: D3 ^+ N/ C# @- U三、运行结果+ D5 a6 h" A: n! C4 H1 S
# f m9 S$ e; i$ r
$ w4 `" I/ S$ D3 \# B$ z! o$ s4 j& @* Q# T1 p. p
. g4 s; f% `/ @% [
1 A/ E" @' S( `! Z% d
0 S6 @1 b5 v/ k8 c3 R( r
|
|