|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 qpggup 于 2020-7-16 13:23 编辑
9 [9 z1 c4 T) F0 [! Q3 j. c' M% `! m2 g8 G
做一个基于MATLAB的车牌识别系统,出现索引超出矩阵维度的错误。主函数和自定义函数都写出来了(书上找的),希望大神帮助# \* Q3 F) `# k0 B. I1 M P9 b8 p
[fn,pn,fi]=uigetfile('AD.jpg','选择图片');- C: M! m% }( B3 @: p
I=imread([pn fn]);" F* e4 r. ^. s0 M' g; M; `" Y
figure,& D) ?7 P9 F. E# V
imshow(I); W0 M( m: K0 w
title('原始图像');$ Y* E) X# S) U- |* L
Im1=rgb2gray(I);9 F; K' x( J8 ?
figure(2),! z2 D5 n( L3 }8 Y6 M
subplot(1,2,1),
, B; u2 y5 [) W5 h( N9 y, ?; d5 oimshow(Im1);/ z4 ~! F1 n' Y9 @/ ]
title('灰度图');' A5 S' x1 d3 Y6 c' p
figure(2),
0 W8 G; ?6 p& Z( ~8 h6 ^; m. dsubplot(1,2,2)," c5 \/ G' M7 P3 O
imhist(Im1);
& N6 ?- d% ]8 S2 n' X8 j* v' q# _title('灰度图的直方图');
# k, l; x/ I6 \8 a9 y9 Q- v' f) i/ VTiao=imadjust(Im1,[0.19,0.78],[0,1]);
5 X2 z+ E0 Q8 h5 qfigure(3),
. J8 ]8 B$ r: v. osubplot(1,2,1),7 Q$ h) J% a; Z
imshow(Tiao);$ e I6 k6 i) ]9 z/ e) ^4 G" M
title('增强灰度图');
3 y* `. @, F" G% ]% Efigure(3),
6 ?( J7 b4 E! i: u- Wsubplot(1,2,2),
6 J2 @. g* D m% Y( w% ximhist(Tiao);
% V2 j, j$ H& |title('增强灰度图的直方图');, z1 r/ \6 Y! t. L
Im2=edge(Im1,'sobel',0.15,'both');
5 A( J* I4 v5 Z4 [1 Ofigure(4),. p/ y; m4 w, A7 X. L3 d; _' z6 u
imshow(Im2);
0 c0 K8 G8 O0 ~2 e- Ktitle('sobel算子实现边缘检测')$ {+ q% K* C4 l$ k; m" x1 m& X
se=[1;1;1;];+ C1 J: b6 q. `2 C
Im3=imerode(Im2,se);
8 r( A8 a5 A" C; F+ sfigure(5),( L: b) Y% z# M' J
imshow(Im3);
9 _! G' @4 s# w1 D1 X8 H5 Ititle('腐蚀效果图');5 H' F: U) o/ L: x
se=strel('rectangle',[25,25]);
% C5 D# O/ D+ B+ u, q( }0 j5 dIm4=imclose(Im3,se);% g5 f/ M1 |& l
figure(6),
1 k) d7 b3 ?% V1 f# Zimshow(Im4);
0 A- r5 E- _$ S8 G3 ]title('平滑图像的轮廓');
% q& q4 t9 v \+ @5 `+ [( _Im5=bwareaopen(Im4,2000);
. A3 [( F. H# ^$ s. {: i4 gfigure(7),
+ ?8 ]: r/ ^. L- f9 Wimshow(Im5);
4 C7 N: P; k3 L$ j" c1 {title('移除小对象');
+ ]) D2 M3 j9 M% V4 e0 o& w[y,x,z]=size(Im5);- o8 L6 I( w; o! k. J
Im6=double(Im5);& ~$ D2 C& Y( D1 v5 |4 s" A
Blue_y=zeros(y,1);$ a8 f1 C/ Y9 M6 b. \/ _
for i=1:y
* @' i) l8 u; j5 q3 a" ?2 ?4 E8 k# i for j=1:x
3 J6 A8 V# \" n( ]5 d- n if(Im6(i,j,1)==1)
. [5 Y; u& { h5 @5 c/ w( e Blue_y(i,1)=Blue_y(i,1)+1;
' P( l: q- F' H" Q( V/ L end
; @% l7 _; R1 j8 w6 X) Q end) ~; M1 c7 C9 G+ H0 S/ k; N
end: M; S3 R) ?9 h, o* V. H) C( s% J& w
[temp MaxY]=max(Blue_y);
' }4 [, b$ V+ E4 }: c1 a& D# uPY1=MaxY;
; M; @: ^# D5 O4 d9 Jwhile((Blue_y( PY1,1)>=5)&&( PY1>1))
7 V& f `# } j2 p1 J0 [; ]* H PY1=PY1-1;
2 D/ ?2 b! t4 r/ _8 lend" l1 @, I$ A" J$ q, |( {: a8 m
PY2=MaxY;' q |2 Y! u1 v9 |( \/ x! u- f
while((Blue_y( PY2,1)>=5)&&( PY2<y))
c5 b9 K V# O v c8 I$ C PY2=PY2+1;! }6 }3 e* f) H& ]' ^3 r* C6 t. _
end# l3 F& {5 B$ m0 ]1 Z8 G
IY=I( PY1: PY2,:,: );* J4 B1 R" D/ S8 [
Blue_x=zeros(1,x);6 [3 V, d1 _; R) T
for j=1:x
4 Y9 X# x" x; C* f- h for i=PY1: PY2
$ F' D5 X# J, x6 F if(Im6(i,j,1)==1)
" ]' A; ~8 A* g* \) _+ P Blue_x(1,j)=Blue_x(1,j)+1;
9 z! i" K, y$ t9 N! H" M end
! ~5 B2 U+ |% f- b$ d1 ? end2 ]( i- v" g: s
end
) k; Y+ |1 ]1 dPX1=1;- f% U0 u) E. M+ |! L
while((Blue_x(1,PX1)<3)&&( PX1<x))
- ~4 a5 ^( C. A. K6 J PX1=PX1+1;( W2 q& ?" s- L- h" F
end9 h( D% J- X0 g+ N' a5 k' M
PX2=x;
- N8 P# ~9 I/ z) u& X( w2 Qwhile((Blue_x(1,PX2)<3)&&( PX2> PX1))7 D0 {. ~& C G# b$ A' [. j( H' |" W
PX2=PX2-1;! J- @; C. s3 O; E* s4 r _
end \3 k" T3 G) b* v% S
PX1=PX1-1;/ \6 E" S! u. x ~) i/ [
PX2=PX2+1;& B9 ?3 P% G- M, J9 z
dw=I(PY1: PY2-6,PX1 : PX2,: );9 d2 O/ R6 ^' U
figure(8),
1 D! j( ]% t: B8 hsubplot(1,2,1),
0 t- D# P; z& F9 ]' Pimshow(IY)," Q0 ?1 U* U* t/ X4 E
title('垂直方向合理区域');
. H' o! i) o& h" V6 u. d3 Bfigure(8),
- K8 p" P: C5 t! @0 S+ `8 zsubplot(1,2,2),8 A2 g/ [' [0 ~& P$ Z% p
imshow(dw),
/ b# s# S; @$ d) vtitle('定位剪切后的彩色车牌图像')" L+ q- P1 @. k
imwrite(dw,'dw.jpg');
/ N, s+ y$ T/ r4 r; C( q* N N; Ha=imread('dw.jpg');+ W7 U9 z( j3 X+ m& \
b=rgb2gray(a);+ r- {# Q# y5 |- C. f
imwrite(b,'车牌灰度图像.jpg');
% f: z& U- M: T7 P2 }% `; t: n$ i) V3 `figure(9);1 b/ L3 V0 }$ [' ?+ C, [
subplot(3,2,1),8 _' o3 W: S3 g" X
imshow(b),
' k" G7 t6 a6 z2 ltitle('1.车牌灰度图像')" D/ d" b3 ^0 l/ C9 |
g_max=double(max(max(b)));$ V% t" Q: Y/ o h4 f
g_min=double(min(min(b)));$ }: v8 F$ P8 X
T=round(g_max-(g_max-g_min)/3);
9 P: v9 D* A/ P7 k% H7 H' f. o[m,n]=size(b);
2 J4 n! D |" E1 g- |+ gd=(double(b)>=T);
' M& A9 M! z6 U/ x0 K" Y% Rimwrite(d,'车牌二值图像.jpg');
7 ^4 g S+ w3 C8 {$ ~) l% Yfigure(9)
# P a& f; p3 n! Hsubplot(3,2,2),* m5 w2 I: H: ]: O
imshow(d),% ?) Q/ B/ f" k& Y! B9 }
title('2.车牌二值图像')5 {# C3 F& d- [7 i. p
figure(9)
) |+ E& S$ r* i1 zsubplot(3,2,3),& V1 F0 l/ z6 P. J! a6 r7 q
imshow(d),1 ]9 U- U: N% ?; T. `- Y! t. J
title('3.均值滤波前')5 j: a/ w, `! i4 r2 T( h4 r* ~2 B
h=fspecial('average',3);
$ W7 c; g4 l' K' Ed=im2bw(round(filter2(h,d)));' V5 Z% b4 J( r5 x |9 E+ k/ A' x
imwrite(d,'均值滤波后.jpg');: |2 C, o( V( i' l
figure(9)4 W8 S% u, J9 t" D6 F
subplot(3,2,4),
. j# w* l. j+ I/ b; F/ Z* h& _' }imshow(d)," P- w% r$ a) M( l
title('4.均值滤波后')+ E0 b" B$ c+ [5 U+ I
se=eye(2);9 b7 ^, ]9 h" b1 }, d5 X! B% L& J
[m,n]=size(d);/ b+ o8 f! d7 w0 g: ?* Q/ A7 a7 d3 B
if bwarea(d)/m/n>=0.365. o1 S( ~% v. J
d=imerode(d,se);2 e8 b2 W) }, y2 ]; b8 y
elseif bwarea(d)/m/n<=0.235' p3 F& ?- u# s( V* a" i# ]( K3 y
d=imdilate(d,se);
1 N6 `. B9 Q0 X5 n& |end4 w: s9 Q; _# }2 x3 g" T5 z6 {$ t
imwrite(d,'膨胀或腐蚀后处理后.jpg');5 f/ g5 M/ `8 ~; [) @$ _
figure(9). W- Y# X4 {$ {' {3 l. s5 X
subplot(3,2,5),
% J# n1 {4 D2 e! [! `$ B2 P, Jimshow(d),6 \0 p" J8 X1 M! V4 f
title('5.膨胀或腐蚀后处理后')% f' s1 b0 g3 P6 Z1 d1 g* a3 l
d=QieGe(d);) @! T+ p- w0 z( W. V! e
[m,n]=size(d);/ l& r# H. T4 R( _- S, U2 Y0 K
k1=1;k2=1;s=sum(d);j=1;
9 {1 g+ F. t; T) H& Jwhile j~=n+ v- t6 M7 o" x
while s(j)==0;! n- ~5 L! L1 ]* C
j=j+1;" ~9 Y) U; V2 t! k B" M& ]: |
end" q4 ]6 O$ H' u: u8 }5 A) k
k1=j;$ z6 q2 r2 J: D- H! @ ?
while s(j)~=0&&j<=n-1
! f* f' k% p$ Q" f3 h$ N j=j+1;8 m7 Z* F# [* Y
end8 O; ?0 H1 i! s8 [. E# b
k2=j-1;/ W7 o P4 ^; A! N/ r
if k2-k1>=round(n/6.5)$ ?8 S) @( S! B' G3 ^
[val,num]=min(sum(d( :,[k1+5:k2-5])));2 i, m$ B" N+ e
d( :,k1+num+5)=0;
7 i x: w' n; l7 p: U1 v end
+ A! J, a6 B3 Dend0 X6 ]$ ?& O3 v. [' K* b% k
d=QieGe(d);
M6 |1 N4 `7 X" ^4 by1=10;y2=0.25;flag=0;word1=[];5 o% k7 Z' q+ {' j
while flag==0: q, f# d9 @5 \# _
[m,n]=size(d);' s5 w$ \! P9 Q
left=1;wide=0;' A( b* l" O5 W( K* K2 L9 X( V& ^+ O. g
while sum(d( :,wide+1))~=0
( [5 y- w+ f& _) }2 R7 T& T wide=wide+1;
3 ?# O( {1 q5 u1 E, a: q5 q end
5 F; b( Y& q5 @9 u+ n if wide<y1;6 E& s$ o) z. w8 ^1 X
d( :,[1:wide])=0;& @* j5 H! r. j( I# L6 d0 [9 E6 g1 C8 D
d=QieGe(d);( X8 b* J n1 Q
else) D4 U( H9 x7 z* q/ y/ x0 p5 `
temp=QieGe(imcrop(d,[1 1 wide m]));
Q. t6 w% p' r7 Z2 E0 u [m,n]=size(temp);
; l- ~5 ?" O+ A/ G all=sum(sum(temp));
3 u' N; [' P4 @1 x) @ two_thirds=sum(sum(temp(round(m/3):2*round(m/3),: )));
$ u1 x( W5 @) M3 H6 D if two_thirds/all>2# { Y8 w3 r& `+ {; A0 S! {" V
flag=1;word1=temp;
5 d+ v g( g' H0 f2 J end
; U5 H6 p+ x5 |6 L d( :,1:wide)=0;d=QieGe(d);
. B6 C3 ?& G/ C end
; ~, f$ k9 u |& Xend. a7 y, c7 f- f3 }" B
[word2,d]=FenGe(d);# a( J+ `/ |, r+ Q: c9 z
[word3,d]=FenGe(d);
# b, q# h1 Z6 E' F[word4,d]=FenGe(d);
! n# M, U ?2 n) q: D4 Y4 [[word5,d]=FenGe(d);
3 e) w# \5 N/ [! ~* w[word6,d]=FenGe(d);
; l! K+ k; {1 ^9 N* ^[word7,d]=FenGe(d);
' q, Z- z, d5 w0 sword1=imresize(word1,[40 20]);- M0 D) ^' R4 @, ]2 @1 b. H
word2=imresize(word2,[40 20]);
" ?6 d+ Q: s8 o* M6 q3 l; h8 uword3=imresize(word3,[40 20]);
& z" q9 F3 w# I3 Lword4=imresize(word4,[40 20]);% l' \$ _9 O* P6 ~' T
word5=imresize(word5,[40 20]);
+ `$ G6 A9 H5 G! d3 A- zword6=imresize(word6,[40 20]);( d1 {" A, C5 S8 }4 u, n* C
word7=imresize(word7,[40 20]);
& K; s8 S8 ~6 V$ Z- m+ A! kfigure
! h. |# C/ g' Y, v; Hsubplot(2,7,1),! ~+ u9 H' U2 N4 C4 y
imshow(word1),
2 [4 C% F K4 |5 Z1 ]title('1');8 P( _ c5 p3 E1 h) W
subplot(2,7,2),
H0 x# b3 h( e7 R( Pimshow(word2),
: r' U6 z1 e9 w3 L! B: ltitle('2');+ I+ q# f/ }' z3 i# @
subplot(2,7,3),0 E+ l1 b( J: O5 t9 S
imshow(word3),
5 D/ Y5 s: }% S& ]9 g; ]" X4 E9 |: vtitle('3');# }& Y# a0 @# L. Q. `
subplot(2,7,4),) c- K+ d4 [# |' n7 x
imshow(word4),: ^4 x5 p* E6 P* r0 T" v
title('4');* H5 i" B( P; f& T, o# l
subplot(2,7,5),$ `: g3 n. s9 d6 B6 R3 J5 j
imshow(word5),
$ G: r' t- B' _- ?' _7 @title('5');
1 x7 Z& e* H/ Vsubplot(2,7,6),5 I8 c' C6 M( ^; w$ O
imshow(word6), G! c; J/ d& a0 w
title('6');
# @- E5 S3 X* r# K* dsubplot(2,7,7),; n# S2 k+ W& ~- k( ]5 W
imshow(word7),& `2 ]& x" @' C6 @; G6 p4 R3 @
title('7');- H4 v, J5 b; @7 D; S( v
imwrite(word,'1.jpg');; F+ {& n/ j0 V2 p& s# Z" a+ Q; d; }
imwrite(word,'2.jpg');: s7 Y6 L* o( m" ~" n# P% U( Q. \( l
imwrite(word,'3.jpg');7 y8 F4 M8 g6 \: h
imwrite(word,'4.jpg');4 Z0 b U4 x- g6 @3 R
imwrite(word,'5.jpg');
5 M, H1 B1 `1 t9 b9 R6 l( U9 b8 ~imwrite(word,'6.jpg');
# J- `6 a6 Q' m ^" iimwrite(word,'7.jpg');
! C! ?8 y/ s i& U! ^
% P" t- d6 D* }liccode=char('0':'9''A':'Z''京津冀晋蒙辽吉黑沪苏浙皖闽赣鲁豫鄂湘粤桂琼渝川贵云藏陕甘青宁新');
2 }# J3 V0 f1 h D- p! Fl=1;
$ O; l: c4 V9 p. _9 T- N$ Y' M3 l5 vfor I=1:7
, E3 Q" i6 U* d) H5 v C! f* N$ a ii=int2str(I);
! b6 p6 b( z- Y9 k* S7 {& k% T t=imread([ii,'.jpg']);" H0 T* S& c# M' H+ A0 }
SegBw2=imresize(t,[40,20],'nearest');
7 n9 n6 Y3 U2 y# E if 1==19 O% I) c5 _ P% W; q
kmin=37;' x4 X! c( @3 T, d0 b+ d
kmax=40;, v( g: R9 Z' A1 V) c
elseif 1>=2&&1<=3& L9 t. z: y8 G- F' r# \
kmin=11;
5 e7 _5 H- ^: G0 @, ^ kmax=36;/ e. S8 h0 v$ x1 g! a; s
elseif 1>=4&1<=7
0 Z3 M* O6 A0 R8 [. w kmin=1;
' Z! e! v) {5 l1 p. W( Y3 F kmax=10; U# j L' o1 M z3 c
end
( K3 q0 r3 E( A; O for k2=kmin:kmax5 t" [8 W1 _1 G
fname=stract('字符模板|',liccode(k2),'.jpg');
# j8 A, l& ^. \$ E6 x SamBw2=imread(fname);
9 @" k: ^+ T; V' S# \0 X( j Dm=0;3 k4 C$ J" p! u
for k1=1:40
9 i( l# g8 I8 }7 ~$ ~1 Q X; h for11=1:20;; z3 l# y# W% G% b! R3 ?0 O% g3 Z
if SegBw2(k1,11)==SamBw2(k1,11)7 f; s; [1 s$ R4 n
Dm=Dm+1;
1 E: l' d% Y ]# u: o end
. S1 ^9 `( }" i5 n end
. e7 O$ R$ {. N' a/ [ end
* o. y/ A# p0 J8 ]+ b Error(k2)=Dm;
3 y8 ^- o$ E3 C* C4 g0 }6 P4 Cend7 c% }6 f& O# g: `( O7 a- M4 X
Error1=Error(kmin:kmax);
) |) I# K3 n% v( ?MinError=max(Error1);
$ _' h* G- p& Q/ @, wfindc=find(Error1==MinError);$ }2 e$ L1 @7 V0 D0 v4 l7 g' m
Resault(1*2-1)=liccode(find(1)+kmin-1);
3 @7 q" W; G0 p# d) VResault(1*2)='';# e! ^5 O7 d2 Q* ^& [2 n: R
l=1+1;1 c, P+ y, s* l! j
t=toc;
9 e" Z- x$ m# X zResault;
5 w1 p% h; s' {( _5 K" w; s z# Q; ymesgbox(Resault,'识别结果')
6 B8 z+ I, C0 ~ T/ r$ X; @fid=fopen('Data.xls','a+');6 ?& y( L& L T- |
fprintf(fid,'%s|r|n',Resault,datestr(now));
- q$ ~5 }# c: f9 X5 R" Sfclose(fid);
w' {9 ~; ^1 g" h; L5 Z# p索引超出矩阵维度。
4 u6 `' @( f( S/ f" u2 ^' n$ q" `4 P3 ]( a1 W4 `
出错 main (line 152)' b% z8 n0 H1 J) r1 C
while sum(d( :,wide+1))~=0* E' X1 @/ h X/ P- S: t$ _
|
|