|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 qpggup 于 2020-7-16 13:23 编辑
& k+ ^% G% l6 S2 Y. p. n: e9 Y: u& [
做一个基于MATLAB的车牌识别系统,出现索引超出矩阵维度的错误。主函数和自定义函数都写出来了(书上找的),希望大神帮助
' J, {& o! F% o+ G( W+ _' o+ r+ ~; {+ e[fn,pn,fi]=uigetfile('AD.jpg','选择图片');
* |$ m- N) h$ |9 {I=imread([pn fn]);, C, i5 X/ e2 D7 ?* b+ P
figure,4 Y: g/ P3 _: P" m! ]
imshow(I);
# X( V# z; F1 S3 p0 `0 htitle('原始图像');
8 w: T1 p2 I3 }; P' q7 H/ L- aIm1=rgb2gray(I);
# e+ _/ j+ `9 xfigure(2),) P7 x, q2 Q+ H4 b$ l5 V% G+ ]
subplot(1,2,1),
1 Q! _/ }3 j& z' ~imshow(Im1);
; ?5 ^, Y# ]- D7 N; h$ Y1 D, \title('灰度图');
1 Q* j1 W/ A; T% v" A& @figure(2),
, b3 Q; t: _2 ]( W2 ~subplot(1,2,2),
5 Y+ Y5 _2 ^3 A5 Z- I+ U2 ]* Y' _imhist(Im1);
1 Y2 W t: L! o* m" W4 Q, ttitle('灰度图的直方图');
, {5 f" x& U4 c, U% pTiao=imadjust(Im1,[0.19,0.78],[0,1]);# ~- {2 @9 k$ e9 b8 ^. I
figure(3),8 a' k) f) _; f6 B: E, a- ]( p
subplot(1,2,1),# v) ^- i( K3 _- R: x$ O0 m
imshow(Tiao);
; t2 I% F) `- R# w: @! v4 V- Ptitle('增强灰度图');" J7 i1 U! _) Q5 i& \: ^9 H/ O
figure(3),
: m, }3 H2 R! o* R& |' ^4 Jsubplot(1,2,2),$ \2 G: {9 U/ l" b% M) ~# M
imhist(Tiao);
( h$ y8 e: X Z! W) ptitle('增强灰度图的直方图');7 k; F: E% X# q) ^
Im2=edge(Im1,'sobel',0.15,'both');* O* b# a( o8 q) A) E" J
figure(4),
2 K" f# Q+ u3 H" Dimshow(Im2);- P ]8 P% I# e' G( H _
title('sobel算子实现边缘检测')
" m' q+ h0 U4 pse=[1;1;1;];
4 y1 f; y+ v A. g5 sIm3=imerode(Im2,se);, d: h) J4 i# \3 b W1 w% D& z
figure(5),, m8 y; F2 v+ {( u$ C9 q+ {
imshow(Im3);
. ~( H4 d1 I' l7 Utitle('腐蚀效果图');- S8 Y" z' |/ m% x8 Q8 Q7 W8 M
se=strel('rectangle',[25,25]);
. n. l; W0 O/ h4 D! N/ w, OIm4=imclose(Im3,se);
8 q8 i! X. q9 Y6 e% Z+ W. D$ afigure(6),
4 D N% F9 w. N7 U9 Vimshow(Im4);
) S# \9 s' [2 i+ \1 |2 btitle('平滑图像的轮廓');
1 h, [; z7 R& l- t% m3 EIm5=bwareaopen(Im4,2000);
1 `8 q8 Y1 C2 f! |figure(7),% [: Y9 M% c$ P# z; j* R
imshow(Im5);9 W# I) p$ z1 R) y" ]9 t
title('移除小对象');! w1 q( G) ]' }, E; n
[y,x,z]=size(Im5);' w: b- \+ n- U
Im6=double(Im5);
. A1 E1 ~; V% F2 `6 a. B0 KBlue_y=zeros(y,1); c, x; h4 t* C6 ?! R
for i=1:y- @5 G E7 |+ B
for j=1:x, A' E& } P, h" I' D% X6 m
if(Im6(i,j,1)==1)2 }; h/ l6 ~% R4 V) K6 |# y9 T
Blue_y(i,1)=Blue_y(i,1)+1;. ?& K: x1 K( Y8 W& F t2 k- S
end
* P/ {* Y" u* P3 F n/ e# W& G$ d end
) J$ L0 b6 V- d! L7 Z9 tend
( ^- H8 \" c7 A/ ]+ G( q! E- i[temp MaxY]=max(Blue_y);
4 n6 K6 a& E( B8 q3 _! f/ T: W9 EPY1=MaxY;
+ w& v6 t6 v1 jwhile((Blue_y( PY1,1)>=5)&&( PY1>1))" f$ t8 E8 h% v2 i! Z: h
PY1=PY1-1;3 d3 c7 G3 V. S1 J1 T8 d, T
end
' Z1 V" i P7 R$ A2 q6 {+ QPY2=MaxY;
+ l0 t4 g2 P8 S( ^: {while((Blue_y( PY2,1)>=5)&&( PY2<y))7 Q2 I0 Y! P# r" C$ b
PY2=PY2+1;
* w1 _! d# P# L3 Z0 s; `end* v1 j6 v; p) O0 o1 Q
IY=I( PY1: PY2,:,: );
8 o# |2 L" R. @$ |2 Z0 H0 m( z1 TBlue_x=zeros(1,x);1 z* H, f9 f9 p6 f1 H
for j=1:x
1 ?) {. e q# s4 g) @ for i=PY1: PY2
8 ?! ]: D5 F# M8 Z$ I if(Im6(i,j,1)==1)9 A6 x2 B, }% _3 l2 m' k
Blue_x(1,j)=Blue_x(1,j)+1;- g( ^9 o' P! ~+ [/ K; E) c
end- [/ S) ~! k- n+ W2 I; _
end _8 U# i8 U- I/ R
end
: _& c8 U# F0 ^. K) f0 L3 R+ wPX1=1;
4 Q% {! c+ j' w1 dwhile((Blue_x(1,PX1)<3)&&( PX1<x))
3 _- U0 Y' P- Q; m/ V0 x8 z, x PX1=PX1+1;
y, s6 H% O, V8 ]end
6 }7 F2 ~& Y9 \: Q8 O+ \PX2=x;
: Q: p( I7 u l7 e, gwhile((Blue_x(1,PX2)<3)&&( PX2> PX1)), V1 h; ~2 W% r0 Z
PX2=PX2-1;# H! o8 Q) O; j a9 j
end/ n6 d' C/ v$ c) n
PX1=PX1-1;
( J; I' M! v2 q$ H& b4 `* ~PX2=PX2+1;* q) e) L7 \! B( S4 R& d, }8 e, ^
dw=I(PY1: PY2-6,PX1 : PX2,: );7 k0 S) Y$ z" v! d( g7 p9 G
figure(8),
7 j6 B; f- | R2 Msubplot(1,2,1),: V- |. e& E, @" n7 o
imshow(IY),
9 I; D: ?8 A8 ktitle('垂直方向合理区域');" @( {' L( s3 y/ J& D
figure(8),8 d+ ]/ ?/ |4 o' ?8 H0 ]& q
subplot(1,2,2),
% p/ o. O( c2 n$ K }) Z) eimshow(dw),
% E+ H, A' V. y- A' _1 Vtitle('定位剪切后的彩色车牌图像'): ?) \& a. W0 ?1 W
imwrite(dw,'dw.jpg');) C# G8 i e, ~0 z. N! `
a=imread('dw.jpg');9 P, J, f# g' J' k
b=rgb2gray(a);
3 U% p0 N; b1 w6 R6 s- R1 u) Oimwrite(b,'车牌灰度图像.jpg');
2 }$ ^7 @: |: U8 i/ O# G" J! _figure(9);, A- D) R' a) ^2 J3 k* I$ V
subplot(3,2,1),
! ^' f; W: p& Y! v$ A. ]4 ximshow(b),
2 h, e% B: O# S- ]8 _title('1.车牌灰度图像')
, l1 }$ ?% U' _; m, ~g_max=double(max(max(b)));
4 ~6 {4 W3 H/ _g_min=double(min(min(b)));$ r5 _% y1 B6 \4 i/ P2 q* S# `
T=round(g_max-(g_max-g_min)/3);
) }) N* p; N" A9 E[m,n]=size(b);
' X9 r3 \+ v# T, a0 ad=(double(b)>=T);
6 m& F- p2 U) Dimwrite(d,'车牌二值图像.jpg');
8 n0 T" h# M- `( L! G* Kfigure(9)
+ D- H" n0 B% Y* j5 @* O4 h' N% `subplot(3,2,2),
% b& t5 x8 C- d0 Z4 C( \# g0 @1 Y* oimshow(d),
3 L- W- ^/ u9 C0 F4 `3 X! r% Htitle('2.车牌二值图像')
; o# z+ ?1 ^6 \0 x- P" lfigure(9)% a$ S* R4 \( K+ q( G7 B
subplot(3,2,3),6 H' R: S1 p- A" S) b8 }. z/ i* w) H
imshow(d),
7 ]/ s; A0 {! e; Utitle('3.均值滤波前')
, y- w1 y- E! F% ?0 vh=fspecial('average',3); S8 H) E" `$ s4 D8 o
d=im2bw(round(filter2(h,d)));
8 Y! F3 W2 X- W: R2 `, p9 t9 w$ p5 Simwrite(d,'均值滤波后.jpg');! f* h2 E3 r0 @2 n* L" t- l
figure(9), e7 y$ Y* W' ~% L
subplot(3,2,4),' {9 k7 H: ~; p+ t8 A) W
imshow(d),
2 z7 ^, L M: Vtitle('4.均值滤波后'); t, V3 v0 J6 a
se=eye(2);
* n; o/ c8 v4 `& k8 b, O9 F: B[m,n]=size(d);
4 r: d' Q8 u, U# @4 ?$ s; i, Nif bwarea(d)/m/n>=0.365
, ]. _5 K* _- W5 T- s$ N! e d=imerode(d,se);! r w' m: a" f1 O7 P
elseif bwarea(d)/m/n<=0.2356 S/ p0 }& w" r" N4 X# i
d=imdilate(d,se);
0 |1 l' N" [* D8 L# Eend" b, o; p$ V' T K: r$ k5 c
imwrite(d,'膨胀或腐蚀后处理后.jpg');
6 H, ], _4 ?4 {- Hfigure(9)
9 M' x0 ^$ b, `1 Msubplot(3,2,5),; G# \3 a, \: V
imshow(d),
: }- K' O" A. ?, f: ctitle('5.膨胀或腐蚀后处理后')' K$ L3 V5 ^1 T; h. j: a" A, a* j
d=QieGe(d);
* i" S. A9 y% W Z! {. H[m,n]=size(d);
2 Q+ E! D9 h' ]5 N5 Uk1=1;k2=1;s=sum(d);j=1;. ~+ w/ N; c$ _; d) `0 @7 m0 k
while j~=n
?& t: D* U U4 Y while s(j)==0;, _, _) h6 j* ~
j=j+1;
$ }' g! f$ @* L0 W end
- |7 S0 j( ~( j+ A; \$ l k1=j;# l$ D; Q7 }8 S- z6 J @8 n
while s(j)~=0&&j<=n-17 v& R6 }) x6 n) S6 U/ ^
j=j+1;
6 r9 J5 c' m- F0 I end; U- `4 P/ b( d7 g, z
k2=j-1;
6 ]& A, X$ t4 l; U7 @9 S/ g7 \ if k2-k1>=round(n/6.5)
! q6 L o9 k' C' L' M [val,num]=min(sum(d( :,[k1+5:k2-5])));
: x3 B0 z& S2 I" m; |! K d( :,k1+num+5)=0;% H6 p1 V4 v3 t8 C# U& ?
end/ h, h9 R. j; F
end
" n7 y; U* T$ J1 Kd=QieGe(d);
$ W3 N! t- V7 D) P3 Ry1=10;y2=0.25;flag=0;word1=[];8 R. l* z. |! x- P. z- e
while flag==0
; q6 e& X/ p3 Q [m,n]=size(d);
/ ?! m# b* f" Q, ~ m! y left=1;wide=0;9 N$ `3 i) \+ x: D2 j" K, Y7 j
while sum(d( :,wide+1))~=0# o s. ^ z8 u
wide=wide+1;; C& N8 J9 Y- u1 q3 k; D6 J' K
end$ {3 H: i! c& R7 ]2 Q7 k3 \$ n0 z6 h7 F
if wide<y1;8 t2 x3 q8 m( v
d( :,[1:wide])=0;
9 m0 a" Y$ R) W( d7 G G2 C I% | d=QieGe(d);
$ E) _( X8 J6 @( w6 v+ d4 l else4 N+ _7 M9 f1 `4 f( T9 |9 \
temp=QieGe(imcrop(d,[1 1 wide m]));
: A; C( x: \7 U$ b* A& M2 X [m,n]=size(temp);
- F( N: {, l( z8 m& Y6 y" Z. i" ~ all=sum(sum(temp));
7 D. Q3 ~) y+ j! t! y* k S- l/ ` two_thirds=sum(sum(temp(round(m/3):2*round(m/3),: )));/ z" y& ~3 t$ \! K! D' O/ Q
if two_thirds/all>2
( J0 l8 f+ g" _ flag=1;word1=temp;' g% p5 k4 A k8 T; c
end) d0 k7 D2 M. M9 n* p( V: ?# j
d( :,1:wide)=0;d=QieGe(d);
& W. r, ]3 h2 h. v4 z end
7 ~0 D! E) k, u* ^5 \end2 g8 C' |5 a; n# t0 K2 R1 A( J
[word2,d]=FenGe(d);
# ^9 D3 r" j' ~& g7 o1 V7 F" T! E[word3,d]=FenGe(d);9 E& x0 Z& k9 X* S* P) R h* n
[word4,d]=FenGe(d);
% w: @9 E* i% |5 |0 i[word5,d]=FenGe(d);1 Y! z6 D0 w( m/ x
[word6,d]=FenGe(d);
$ _8 C/ [+ }. g, {! P4 I5 q[word7,d]=FenGe(d);, X+ A, A$ G( w" A0 ~
word1=imresize(word1,[40 20]);
' l) f# B$ J$ g1 Kword2=imresize(word2,[40 20]);# k$ R* ?2 h$ y' {/ \( W
word3=imresize(word3,[40 20]);7 z8 I" H/ e7 O& c' w- C2 Y
word4=imresize(word4,[40 20]);) B- ?& l' x8 k1 J
word5=imresize(word5,[40 20]);: N& O1 k- H5 ^: T5 Z: z6 Y. o
word6=imresize(word6,[40 20]);9 @7 U' M k6 ?( I, i: q
word7=imresize(word7,[40 20]);' d- r" ~' U7 h# O4 ~- e
figure
6 ~& `1 A7 u( L( s0 asubplot(2,7,1),7 |* ^' ~( P) z D
imshow(word1),
% `: ?1 H, N1 i( a# S x: B H& |8 Otitle('1');+ t3 k; @9 V1 D0 o
subplot(2,7,2),/ E/ e5 Z2 e% U3 |
imshow(word2),4 h# z2 `, I/ _1 v
title('2');
! x2 I" Y7 g5 @. h) v2 _0 T3 Msubplot(2,7,3),
" C v5 |5 ~' | {! Limshow(word3),6 k* R1 @8 |2 c
title('3');
$ }0 n7 l) E1 f: R, ?$ _subplot(2,7,4),
: c7 Z) \1 |! B7 [# `imshow(word4),4 I( A2 c& P7 h: P' v" Y5 r
title('4');
! ?( i% X; K: `subplot(2,7,5),
& D% a- u8 V! [" V% r+ aimshow(word5),
: u0 |6 _4 R( N/ l* M+ atitle('5');% W+ }" z& S" q
subplot(2,7,6),
/ w& n' F' v: o8 v8 F- limshow(word6),
, }, P4 g4 ~, b/ H0 ftitle('6');! e, S$ Z/ b4 W
subplot(2,7,7),
( o8 K. A3 _6 A: Y7 Z( t2 Yimshow(word7),
; N, Z; G, Q6 P8 y- L3 m% ntitle('7');
. {3 w* l) f1 I/ \7 K- a( Q# Bimwrite(word,'1.jpg');
6 ^4 n5 ?. k, w5 S1 f! W, Ximwrite(word,'2.jpg');
% G3 u3 J3 o% ]imwrite(word,'3.jpg');
/ M" X) i- i- l$ E2 a. Uimwrite(word,'4.jpg');
, N( h; F( q% \, U+ X% Pimwrite(word,'5.jpg');
3 D+ P3 G* l- S) }imwrite(word,'6.jpg');
: f, B# P2 b$ P3 Rimwrite(word,'7.jpg');
. r0 ]# l6 E r$ k+ u8 D) x3 m9 c g/ |0 a+ ^. f- ]
liccode=char('0':'9''A':'Z''京津冀晋蒙辽吉黑沪苏浙皖闽赣鲁豫鄂湘粤桂琼渝川贵云藏陕甘青宁新');
* A0 e# ]. D& s9 X' ^l=1;2 R$ H% m+ z9 V2 {( ]5 L2 E: d- X
for I=1:7" u* u7 O- ^# a2 q2 k" x- }9 S
ii=int2str(I);
) {+ j0 r; c, i: J# u) P& U, v t=imread([ii,'.jpg']);, W- R) t8 a9 }9 w+ w% w9 |3 e
SegBw2=imresize(t,[40,20],'nearest');+ V$ r! G. N) r
if 1==1
; `0 ?- V+ G6 |" y" S7 d" z* t kmin=37;: j9 G+ N( q+ z/ E2 e$ N) A( P
kmax=40;
/ r( ~9 t/ A& Y: x8 F/ M6 {. B6 k elseif 1>=2&&1<=3
- u! R5 D% ?- X( u/ s( } kmin=11;
3 k/ v( {* E2 g4 G: v }; ~ o- g: p kmax=36;
& ~0 t7 D* z8 _- _( v7 J elseif 1>=4&1<=71 b, V0 y: {& j9 M
kmin=1;
4 Y9 R5 }1 p0 N# a8 J kmax=10;) u% `- ~( A0 d3 t/ h3 V9 l
end6 p# [+ r" \) s9 z1 d7 U
for k2=kmin:kmax9 m4 P: U# N5 |& I. z' N
fname=stract('字符模板|',liccode(k2),'.jpg');
9 V9 d9 C j& m' e. u SamBw2=imread(fname);
1 ^' l3 e8 T2 y2 q Dm=0;/ X3 S6 C, Y$ J- t
for k1=1:402 |9 u- Q- t- O+ o
for11=1:20;6 ^# g7 P0 i( Q5 `
if SegBw2(k1,11)==SamBw2(k1,11)
3 ^- K, Z1 K0 n8 Y W3 W Dm=Dm+1;4 j5 P% h) Q9 \1 a, |; d! g% _' G
end
! ?+ N! Z8 R/ ? K' Z end0 V7 i" Q7 c& v6 _9 l
end1 \7 ^. A4 f3 V! y d8 i( \9 K
Error(k2)=Dm;
2 i% H R) k% c6 `end
& i& f) a' N$ |6 q% ^4 `9 B* a$ iError1=Error(kmin:kmax);
( W* r4 T7 m {- `3 O8 {( aMinError=max(Error1);
( p5 W. M* h. d3 o% ^findc=find(Error1==MinError);
; A6 v0 o9 @4 g7 f, ?Resault(1*2-1)=liccode(find(1)+kmin-1);; h, O5 V! \3 m0 i
Resault(1*2)='';
, X6 K; H3 }# j7 Z/ W9 z t3 Hl=1+1;
0 a# P3 o/ y- ]; `3 x+ V2 xt=toc;5 a* r7 P3 S. ~& C* r) i" a
Resault;6 r0 C6 z7 X# P
mesgbox(Resault,'识别结果')
5 S& L" ?8 I' Ofid=fopen('Data.xls','a+');
" Z5 @8 p6 \- ufprintf(fid,'%s|r|n',Resault,datestr(now));
$ l" l! \7 L/ T/ Vfclose(fid);
0 r: f3 Z. D: V( c- ?' ^/ S索引超出矩阵维度。
* X* s" }' H9 f8 E) }9 f' m6 |
$ }: c. Y; w/ I7 R; B, h出错 main (line 152)
" _# d& P* P- A% z) [ while sum(d( :,wide+1))~=0
4 S6 j! f) `3 l4 a( N+ x1 f0 W |
|