找回密码
 注册
关于网站域名变更的通知
查看: 494|回复: 3
打印 上一主题 下一主题

做一个基于MATLAB的车牌识别系统,出现索引超出矩阵维度的错误?请大神指导

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-7-16 11:14 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 qpggup 于 2020-7-16 13:23 编辑 ' Z; g! ~3 q- M, W, Z& P
5 I5 D3 a: m9 x7 F( K5 ?8 x
做一个基于MATLAB的车牌识别系统,出现索引超出矩阵维度的错误。主函数和自定义函数都写出来了(书上找的),希望大神帮助- L0 W$ h) m$ N8 v
[fn,pn,fi]=uigetfile('AD.jpg','选择图片');
# t% a4 _6 K1 n" R4 W- F5 CI=imread([pn fn]);) r" J0 @* Q% [1 ?7 z4 O! q
figure,
, q& a1 X. b' _8 bimshow(I);5 O9 x5 y5 X: u+ s
title('原始图像');8 `8 L  X3 T" K6 K- j8 D
Im1=rgb2gray(I);- f, C9 h8 C6 ?% d: G* f) a$ E
figure(2),! a+ v/ K) ~( `3 {8 T2 t
subplot(1,2,1),0 d3 x3 `: i& ^6 b/ `
imshow(Im1);7 T% d$ d$ H2 Q. F* a  g1 z
title('灰度图');
& q. i. C' A* `' m  F+ M% v) \# mfigure(2),/ z5 M$ T% c; i* Z" }) e7 M
subplot(1,2,2),
) |6 C" B" S$ D# o* u" r+ R* }imhist(Im1);) ~8 V" {3 C- i- _" E# A# C4 B1 q# T
title('灰度图的直方图');% P$ I8 L2 D  L+ c+ s! M! O
Tiao=imadjust(Im1,[0.19,0.78],[0,1]);3 y& H9 B$ g, B* N  n  \
figure(3),
+ a0 v# T  M, \  Zsubplot(1,2,1),5 J2 S) z; I' _! @* u. M
imshow(Tiao);
+ f6 t1 l, W+ `title('增强灰度图');8 H/ |) e' L2 L9 Q9 }+ `7 H  p
figure(3),( V( X2 m+ K9 \/ R* L
subplot(1,2,2),
4 h9 G- f- Q1 Z. H! Uimhist(Tiao);" O7 I+ b7 X* a8 G1 _. S
title('增强灰度图的直方图');8 ?  I, ]/ P- I
Im2=edge(Im1,'sobel',0.15,'both');  v$ d1 m3 z, b( X
figure(4),
, X  W  Y  q* M+ d0 M# Nimshow(Im2);- l1 h* i3 I. F8 x2 n3 }: R
title('sobel算子实现边缘检测')4 N7 [- z/ }/ R& K- O* |
se=[1;1;1;];
5 [8 f( z" {6 B( T% _. T6 c8 |: CIm3=imerode(Im2,se);) ^" \1 X$ M& T, S) f2 E
figure(5),
, r6 `0 t: ?6 z2 c) }imshow(Im3);
7 L6 L0 d  w1 ]title('腐蚀效果图');1 s" p6 q* ?% G8 ]) |
se=strel('rectangle',[25,25]);! D1 L( w3 w2 ?4 k; O; e8 p
Im4=imclose(Im3,se);2 O) j$ ^( l" G4 Z. \7 T8 h3 f
figure(6),
: @3 F$ @( i- b* d* j; k7 o& L* M  pimshow(Im4);7 M$ ?7 M* x# V  N
title('平滑图像的轮廓');& Q& H+ |) n) [; t- x
Im5=bwareaopen(Im4,2000);
7 m5 F. X- ?- B0 U+ [) e2 N( Lfigure(7),' R- P7 }8 l! u9 `. V$ ~0 e
imshow(Im5);1 I: R5 w0 w3 I
title('移除小对象');
. E& v$ O$ `$ Z' f[y,x,z]=size(Im5);$ i: L; o) h8 ]5 Y7 a% @' L1 x
Im6=double(Im5);6 e2 b; ^4 o  Y& ^& o+ \( g
Blue_y=zeros(y,1);0 ]: @1 ], Y( K+ Y" s
for i=1:y
; X" H. n# }5 A    for j=1:x' y7 G8 Q  L( p7 y9 Z
        if(Im6(i,j,1)==1)4 i7 _3 i6 I0 [' Q, A$ q7 Z
            Blue_y(i,1)=Blue_y(i,1)+1;* E5 k" m+ U' o" l- c
        end
  k' x7 [2 S: l) X    end6 K& f3 E+ @. l6 |4 V. h+ l4 l( O5 I
end
/ L8 I" T8 L  T3 p0 |9 l[temp MaxY]=max(Blue_y);' h( r: C" Q/ p
PY1=MaxY;
7 D! d7 z' U4 f& n7 Z  h. ~while((Blue_y( PY1,1)>=5)&&( PY1>1))
  }) O2 E5 E4 f9 V* u+ B    PY1=PY1-1;
1 @9 ?5 Z4 ]" V5 fend
9 p$ i& [' {+ l* U3 U( U& V8 xPY2=MaxY;7 i( }8 M+ l7 |3 P* u
while((Blue_y( PY2,1)>=5)&&( PY2<y))& J" r. m1 H5 ?8 \, h4 H) o
    PY2=PY2+1;8 @4 W3 n" _' C+ [7 v* d! F
end
+ J* j9 P* F8 Y* }& DIY=I( PY1: PY2,:,: );7 t& y5 [, n4 w6 Y6 ]
Blue_x=zeros(1,x);
! y5 v+ _' \! g. O  V0 M7 q# ^; _for j=1:x' r, u: r5 y8 n7 F2 ^
    for i=PY1: PY2; J0 |& W3 a8 K
        if(Im6(i,j,1)==1)
0 ^; L7 d. E- p- u2 e" b& a" O            Blue_x(1,j)=Blue_x(1,j)+1;7 h" F" A# S  X. C, {+ H- S
        end- Y" g+ K  p- e
    end+ f# A2 }" X! A6 c/ A' i) Z) a
end5 ?$ v. s7 k& t% B8 k
PX1=1;+ O4 e7 f2 L) @& X; _: Z8 T; F* U
while((Blue_x(1,PX1)<3)&&( PX1<x))
7 D+ g& D$ D$ f" e" z    PX1=PX1+1;) o: q+ f: U  a) L% w
end
' @2 A7 m6 t/ zPX2=x;
6 Z( A. c( Z4 ]+ G: F$ c9 ]  nwhile((Blue_x(1,PX2)<3)&&( PX2> PX1))2 y' p6 j" h8 K* V
    PX2=PX2-1;" h. O9 _( S! z$ H! d
end1 E8 w  r5 c) {" I
PX1=PX1-1;2 `# G* ~( f2 G7 }% X2 A
PX2=PX2+1;
; k. j7 ~2 w  M, tdw=I(PY1: PY2-6,PX1 : PX2,: );! i2 A) ~' K) H
figure(8),
4 Q# O% A4 ^# _2 Ssubplot(1,2,1),
) p* T# W- J! P) P+ P  r8 G+ himshow(IY),6 i- R2 x6 c, R9 ~& R7 h
title('垂直方向合理区域');
! x* l  @9 Z3 R: ]# w$ efigure(8),# k3 V* C7 A1 o8 v; v7 |# A+ u, T7 i
subplot(1,2,2),' _) W& X( C& Y8 N
imshow(dw),6 i$ u# D$ R, V$ y3 r$ h* d
title('定位剪切后的彩色车牌图像')5 s  ?  ?) R  J9 N4 Z# i
imwrite(dw,'dw.jpg');* ]* b9 U; ~1 U# ^, a
a=imread('dw.jpg');( [( h. ]2 m! V; }
b=rgb2gray(a);/ u7 l- ~3 z5 F3 w& a6 @) K; m
imwrite(b,'车牌灰度图像.jpg');0 r, I; H, g" g" p" c2 J! u& S
figure(9);: u1 q- f/ i& Y' }% d, p
subplot(3,2,1),
3 X6 E" v1 l+ @* l  I% p: Z9 a- O( N" Jimshow(b),
$ X7 G9 o; t% Q- U3 P" W- E( Ltitle('1.车牌灰度图像')
9 U3 W! a  ^& u" Z3 Og_max=double(max(max(b)));
1 p6 S' I2 e5 x( L; ]g_min=double(min(min(b)));
2 M: }3 ]  B- W6 Y  d/ UT=round(g_max-(g_max-g_min)/3);
  x! F1 N7 O4 r[m,n]=size(b);! p/ m" }* D3 s: k1 P
d=(double(b)>=T);- a  v9 o7 L5 ?% c
imwrite(d,'车牌二值图像.jpg');
/ v, B/ g3 v  U7 q. I' |2 o6 Afigure(9)1 G7 I1 H% F, J, k( @% s" V
subplot(3,2,2),. Q  {/ o/ W5 _- k- X  V
imshow(d),
3 [7 V3 z  j, F- h' stitle('2.车牌二值图像')
. @0 V. Y) y& Z9 W; Nfigure(9)- a/ m' _+ I* R8 b. s
subplot(3,2,3),
  P% S) k6 P* m7 Z5 o, nimshow(d),
9 z" s( u4 l6 o7 Dtitle('3.均值滤波前')
, J" e/ }) X" ]) k( qh=fspecial('average',3);8 Q$ v' h1 I. x
d=im2bw(round(filter2(h,d)));# h/ S. W3 l: d; s, @: s$ r
imwrite(d,'均值滤波后.jpg');
  @/ g! f" w* Y' @6 e* U1 gfigure(9)3 q& ]* o9 s! w/ }4 k5 Q
subplot(3,2,4),$ F( Q7 E9 }! \' j! z
imshow(d),
0 K, T# l/ o% r( y0 N1 ltitle('4.均值滤波后')3 ~+ L& k9 ]5 g$ r( T
se=eye(2);4 m5 l) J8 o+ ~3 J& W
[m,n]=size(d);
7 P$ v. H% v) t+ p' R3 F2 Eif bwarea(d)/m/n>=0.365/ x: b" q+ @$ J7 u0 k; M
    d=imerode(d,se);
; r7 o1 a8 f8 W2 U" B* {elseif bwarea(d)/m/n<=0.235" X, ^( |: z. z7 p* Z1 p
    d=imdilate(d,se);
! o4 B- `  r2 T* {end: z3 H9 Q9 o2 e5 a3 U& x/ ?8 |( w
imwrite(d,'膨胀或腐蚀后处理后.jpg');" ^, d/ q- ]' `
figure(9)0 c( Q$ R7 B  @7 t0 f& ?
subplot(3,2,5),) _( {1 e" ^2 K: e- @
imshow(d),
' t; c$ v  q1 i" Z( M" _* y2 Xtitle('5.膨胀或腐蚀后处理后')
5 |( L2 M2 E% ?, y6 R; F2 ?9 dd=QieGe(d);
9 v! {+ ?7 F) R3 {[m,n]=size(d);& Y$ k) \, m' N0 m8 C6 e& V
k1=1;k2=1;s=sum(d);j=1;
) x2 a9 Y6 D! B1 swhile j~=n
  f) q$ |, A8 ?% {; L: H3 M. T   while s(j)==0;
: l2 s  `7 O+ k# b        j=j+1;8 k9 F% r# `( y& x" V/ }, w
    end+ N+ y- K9 w6 D  O( Y/ t; _
        k1=j;  g" w3 `) r' T4 l
        while s(j)~=0&&j<=n-1
( ~2 J/ n( p" t" O7 Y3 A            j=j+1;, x  J" q( V4 `+ y2 U7 t
        end: Q- Y" @+ U0 \, v4 C
        k2=j-1;
2 q9 b3 k4 ~# y1 M+ C        if k2-k1>=round(n/6.5)" C0 c% o+ W3 K* S( F. `" B
            [val,num]=min(sum(d( :,[k1+5:k2-5])));
/ C3 Y8 F3 ^/ R7 ?( a, C; E            d( :,k1+num+5)=0;( d% _7 {0 x6 R2 W. m6 C) i
        end3 d! h$ P) ?, R7 A* e* n9 p
end" [- J" w% X" q' ~: x
d=QieGe(d);
# O; y5 j8 M# Hy1=10;y2=0.25;flag=0;word1=[];: g+ K7 q; q  O4 T
while flag==06 p/ ^9 Q' R, u0 [8 \3 t
    [m,n]=size(d);$ B: x& u) w& v3 P7 z4 F5 v
    left=1;wide=0;# g; v1 Z4 f; U2 V6 \* C/ ~
    while sum(d( :,wide+1))~=0
2 _( @$ Y5 ?+ f5 [2 M8 [) Q        wide=wide+1;
) i! R+ u" @- y# Y: C/ e3 h; o    end
+ P" s( X( m) l1 A" V2 s% M    if wide<y1;/ r- j# J1 t5 _. L! c' J+ B+ k
        d( :,[1:wide])=0;
2 c+ A9 n0 R* b2 K" B$ V        d=QieGe(d);
$ H. }4 x, g0 k% ~; n    else5 x) k- ]0 H# }& Z
        temp=QieGe(imcrop(d,[1 1 wide m]));0 C( b( \; P5 y% i
        [m,n]=size(temp);; h2 b5 m/ @/ ?: r, R
        all=sum(sum(temp));& G7 h5 }9 z( `* Z" k, y; A
        two_thirds=sum(sum(temp(round(m/3):2*round(m/3),: )));& Z4 n8 `/ B+ \, z, B+ U
        if two_thirds/all>2! \% J& p3 A, C& X. f3 `, c% |; w
            flag=1;word1=temp;
9 k! k1 E3 G" B* @+ k+ E9 a. Z4 \* \. {7 z        end! P& Z/ F! N, E! y( i0 {$ Z" M1 ^
        d( :,1:wide)=0;d=QieGe(d);* `. {1 b4 g* D: d* F8 |+ E& D  N4 \
    end3 h0 b$ q' k! R! x1 h
end
, d+ O( B* s7 g3 {[word2,d]=FenGe(d);
+ d( k5 r7 U6 T( `[word3,d]=FenGe(d);
# ?) g8 q. }* \( |[word4,d]=FenGe(d);: h5 \" _; Y6 T, B- }% }5 x, r
[word5,d]=FenGe(d);
! ]: N3 s; P4 i! U7 b" p6 L[word6,d]=FenGe(d);
7 [  X! p8 u/ y: z4 w2 {[word7,d]=FenGe(d);' L( ~, y* w& A$ t& x* k: x
word1=imresize(word1,[40 20]);0 b, z; \; M' ?0 W2 d3 m7 _0 E* T
word2=imresize(word2,[40 20]);
  X3 ^+ A. E/ q9 j, E7 ^5 cword3=imresize(word3,[40 20]);5 Q4 q9 X0 n+ P2 I$ s2 A8 V) L
word4=imresize(word4,[40 20]);
. E$ i: ~* C1 L% M2 x0 x# X  oword5=imresize(word5,[40 20]);
$ ~+ t5 y+ y& p, e3 w- J! hword6=imresize(word6,[40 20]);7 X: R& g. i; W% M9 ?7 a
word7=imresize(word7,[40 20]);
: f, B" y) e! L; K+ }/ N% K0 |figure
1 y7 e1 I8 ?7 L& {$ osubplot(2,7,1),/ {/ o& h% f( i* Z, J
imshow(word1),
  W# E8 `* g9 p9 q) Atitle('1');( z' g( q0 P2 G2 Y0 o8 q
subplot(2,7,2),
" g9 Q, _0 Y- l" X2 `9 W  o$ J" f5 pimshow(word2),
! ?* y/ S8 x4 h3 `5 n6 ytitle('2');
, b% Y4 J8 u2 g# f% j% usubplot(2,7,3),6 c9 M$ r0 f5 {: y1 r0 ]
imshow(word3),- D7 p9 @* O7 m4 U' }3 M, G
title('3');
1 d' J' R8 J3 T6 Wsubplot(2,7,4),
. S" {0 S$ v6 x% z: t, Wimshow(word4),7 v8 Y5 |5 y3 O( C0 g
title('4');) u( h( i  z; `
subplot(2,7,5),5 K, `1 i" e  `# w' ~1 T/ o
imshow(word5)," A: i' G6 j8 a# I
title('5');
- e9 D- `. b) M) N" b; _4 F$ _subplot(2,7,6),# H& V+ z" A" X  B) w
imshow(word6),
! ]0 @& a  |3 h5 F, m* z! n0 q/ Ztitle('6');
' F  B; ~" P8 P- n0 A' S% Dsubplot(2,7,7),! h1 ^+ N, K7 W
imshow(word7),
: ]) D: O) T  _* gtitle('7');' g% l9 m5 O  `! \/ V( j4 ^$ C6 b3 E
imwrite(word,'1.jpg');
# \, g! e9 @& ?9 ?imwrite(word,'2.jpg');
& G* f6 }( r& |+ Yimwrite(word,'3.jpg');
) ]! z# ?# R- P1 C& I# m8 m3 Aimwrite(word,'4.jpg');! ~* D/ E- l, p4 [& R6 W
imwrite(word,'5.jpg');
  h: u" {) q$ p: ]imwrite(word,'6.jpg');8 E" i5 O6 y1 \3 x% g: s7 h0 M# H* f
imwrite(word,'7.jpg');& r2 [% T3 r3 N* r) u  C! y
, U( A# u3 O% B- U. q" K
liccode=char('0':'9''A':'Z''京津冀晋蒙辽吉黑沪苏浙皖闽赣鲁豫鄂湘粤桂琼渝川贵云藏陕甘青宁新');
# c! i/ U2 p7 K5 f) x' t# n8 dl=1;! ], Z6 `5 u$ Q% ]: D
for I=1:7/ r3 f% I( `& W7 y* n, s/ _
    ii=int2str(I);; ]- ^& |6 K5 X7 ~& |% T( g4 s" z
    t=imread([ii,'.jpg']);
3 j6 `. q( C; u+ L: V/ h$ P    SegBw2=imresize(t,[40,20],'nearest');
: r) o4 T2 R& w7 k, s8 h1 @) a    if 1==1% ^1 f. z( J3 A+ B; O9 o
        kmin=37;( H0 e: ]- E4 A, F) _7 X# B/ D- j
        kmax=40;2 M# h" P1 [' [+ I, u) Y1 E% T2 U
    elseif 1>=2&&1<=3( q4 s( `# s8 e# V
        kmin=11;& c+ |7 k; {) Y& N9 r4 Q4 O
        kmax=36;
, N+ ~3 Y  f& b$ @" @- S6 S    elseif 1>=4&1<=79 z' A9 N& T/ q
        kmin=1;
  ]$ f. J6 r( X2 H        kmax=10;! u2 U: J  s" `5 I4 o
    end) A$ t# j& m7 t% A
    for k2=kmin:kmax
* Z' l- S8 i" T8 B3 A        fname=stract('字符模板|',liccode(k2),'.jpg');- R9 z3 ]( s5 P
        SamBw2=imread(fname);
6 P3 @  \, n: o" f; I  p8 ~1 b        Dm=0;4 a6 l5 _( m) X* w2 ?
        for k1=1:40$ A& v0 }5 k2 H0 l
            for11=1:20;
  c* h# R+ C$ T1 N1 g( G' r            if SegBw2(k1,11)==SamBw2(k1,11)9 H! s0 Z4 `# t" U/ S# \
                Dm=Dm+1;
, Z0 i$ `3 j9 d            end" {6 m4 Q9 G1 N/ Q6 F
        end
0 M" o" v. M, h  f( v7 w4 y    end7 [8 Y2 O& y, C. G9 }  ]9 U
    Error(k2)=Dm;
: L7 }9 h9 e' |# ?& ~/ Mend
% m% v) T# b9 P# ]" m9 bError1=Error(kmin:kmax);
  V  k1 c# N! e3 v" J5 `# c( r  uMinError=max(Error1);
8 r* m1 G% n) z8 z5 K9 U, Afindc=find(Error1==MinError);
" C! h; F! [0 x/ P" B5 P- WResault(1*2-1)=liccode(find(1)+kmin-1);& G% E; e5 B; h* E! j8 a
Resault(1*2)='';& }1 a7 b7 U% `2 Q
l=1+1;9 U; }7 l! o% F
t=toc;
$ k" O$ u9 F, _  fResault;
# b5 F% w& @- ymesgbox(Resault,'识别结果')
7 g! @( K7 M+ J1 L- K  ?. afid=fopen('Data.xls','a+');
: A4 h) {% h( Pfprintf(fid,'%s|r|n',Resault,datestr(now));4 J+ z7 y0 v4 v' b, A
fclose(fid);
& q2 Y% U! h, T9 V7 L: B( p) Z索引超出矩阵维度。
) e2 A: R4 M" \
" \' r7 V0 N6 p) t出错 main (line 152)& x# [5 Y7 H( L6 S% N
    while sum(d( :,wide+1))~=0
- `$ z! D' }3 o3 b

该用户从未签到

4#
 楼主| 发表于 2020-7-16 16:45 | 只看该作者
haidaowang 发表于 2020-7-16 16:28
2 O7 b7 o$ w/ _2 R; P根据错误提示:5 ]! [' X( Z4 K
出错 main (line 152)
2 F( C, Y# ^0 u7 l& }8 _    while sum(d(:,wide+1))~=0

- I3 t. n9 N1 q* ?4 e谢谢啦,我检查一下2 S; T+ j# C- l' k" k: N/ k- a

该用户从未签到

3#
发表于 2020-7-16 16:28 | 只看该作者
根据错误提示:0 y. L2 g; V6 ^8 I
出错 main (line 152)
6 ~5 ~2 e  i, \* B5 L/ j    while sum(d(:,wide+1))~=0
4 g9 Q+ K' r  I9 H
3 j/ B% b- h9 w8 i* D: A2 ?# X' L
  v' V# Q! \5 x% `猜测原因是wide+1在某次循环中大于矩阵d的列数;& J" {* d. K+ N8 r0 g6 V# ?9 V; k
建议在这一行设置断点,然后步进程序,查看wide变量的变化规律以找到超出矩阵维度的原因。

点评

谢谢啦,我检查一下  详情 回复 发表于 2020-7-16 16:45

该用户从未签到

2#
发表于 2020-7-16 13:23 | 只看该作者
帮你顶一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 21:00 , Processed in 0.187500 second(s), 25 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表