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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 qpggup 于 2020-7-16 13:23 编辑
) B" m2 s7 E- J( z3 o; Q3 B1 X2 k* N! l& r, N/ V# X; X0 L3 D) ]) l  L
做一个基于MATLAB的车牌识别系统,出现索引超出矩阵维度的错误。主函数和自定义函数都写出来了(书上找的),希望大神帮助  {. d8 t4 \- t& |
[fn,pn,fi]=uigetfile('AD.jpg','选择图片');
  q$ I6 Y1 G6 b3 n3 @/ KI=imread([pn fn]);
# y( `9 e" W& k7 z( N3 ufigure,
, M/ E/ I- ^/ b9 m5 u( uimshow(I);& h. _& O5 \3 e3 _( K
title('原始图像');) h* _! m2 E: S- n8 M" ~  Q7 ?
Im1=rgb2gray(I);
! O% a! l( o3 f  D1 _figure(2),; {* M$ }  E/ N7 Z% x* g
subplot(1,2,1),
, C% S: Y- b2 j( l5 m" _: ?imshow(Im1);
5 r0 W( F. F) E* c5 s8 |title('灰度图');
; ~' G2 v# a! S8 f0 bfigure(2),
0 C: {1 t3 e0 S7 t3 Gsubplot(1,2,2),
, c  y8 C1 F' O/ B( [+ U8 wimhist(Im1);9 v9 L0 q- |) i9 g1 i5 {  j
title('灰度图的直方图');
% n* \/ f% t; S$ G! cTiao=imadjust(Im1,[0.19,0.78],[0,1]);
0 f  s$ Z" f& r2 [  [figure(3),2 R, P- C- S9 A' j5 W; k
subplot(1,2,1),
- {% |$ J( k' `( z: Dimshow(Tiao);  y& e# s) Z( |. J: q4 h
title('增强灰度图');
7 g3 p/ l8 F8 h) v7 o4 k( {figure(3),6 C; J: \9 x: u2 h
subplot(1,2,2),
  V: s# w/ A1 W! G: ~" {  ]imhist(Tiao);3 E9 f9 }* @9 |, V
title('增强灰度图的直方图');
8 _% m- J  T2 [; ?/ M1 j+ hIm2=edge(Im1,'sobel',0.15,'both');3 n/ t7 Y; `: S4 B+ R6 g/ j
figure(4),. d0 G. g% o) _  w! E
imshow(Im2);5 _% ^( `& {: ?" W) O  c
title('sobel算子实现边缘检测')
4 V) E2 F8 l4 ]9 p; k+ Sse=[1;1;1;];
% c7 t8 H/ r2 s% t* z: hIm3=imerode(Im2,se);
0 y: h6 k+ b- m8 u& Q* o- ], Mfigure(5),. o1 D, T  P* {8 Q0 z
imshow(Im3);
  o& V5 S6 g  L0 Qtitle('腐蚀效果图');
3 k/ F. \7 G+ S3 R/ }9 ?se=strel('rectangle',[25,25]);
0 x! R0 n( I0 B0 q  D! CIm4=imclose(Im3,se);  e1 t! H& C7 ?
figure(6),( V6 n7 v5 C8 m4 [( R: Y. r& s
imshow(Im4);
0 T) R6 ]# d" wtitle('平滑图像的轮廓');# z( K, n" q; \% {8 l- g3 a& U7 }$ q! h
Im5=bwareaopen(Im4,2000);
" H* _5 e) }! q$ L2 t' Afigure(7),
2 ]& @) P1 A! Y" P  I9 \imshow(Im5);
, b7 t$ R3 y! l6 H" q4 ltitle('移除小对象');- n4 U4 V* q+ k, L
[y,x,z]=size(Im5);
2 ]0 e- D. c% ~4 U( x, r5 W: HIm6=double(Im5);
! `% j" F5 n) b( ?4 k$ v& H, fBlue_y=zeros(y,1);4 }% M5 A; y8 q" `$ H( V) v5 g
for i=1:y, x# P9 r1 _! a/ }9 n
    for j=1:x* c6 [/ u$ u6 Z6 ~8 I2 w( }% w
        if(Im6(i,j,1)==1)) {& R# h! }& Y7 n+ F1 J
            Blue_y(i,1)=Blue_y(i,1)+1;% [  z7 v& h& p  e# g: b
        end
4 I% M- W1 |# j5 C2 l6 Q    end% d) [8 Q3 y2 A
end
) I" H9 u7 T* \[temp MaxY]=max(Blue_y);+ i, v* W1 b! p/ c8 S* i- {
PY1=MaxY;
' E6 @+ l+ G! _4 o% @while((Blue_y( PY1,1)>=5)&&( PY1>1))6 K1 M6 R" J5 L, [: m
    PY1=PY1-1;! l/ j, M( l/ c$ l7 s) Y! U
end
5 H5 C/ n: k9 k! p# ~! f0 VPY2=MaxY;
" c1 y# W5 C3 y9 V% c8 k; b, \/ Qwhile((Blue_y( PY2,1)>=5)&&( PY2<y))$ K( m$ |5 y, S, U, t' ~& u
    PY2=PY2+1;. a, d. l& K& x) B
end4 U  q9 z$ f4 y1 k
IY=I( PY1: PY2,:,: );& x3 z- a" M8 c: x: H
Blue_x=zeros(1,x);4 g+ @% l! j; z+ w4 x
for j=1:x
: L$ }# s2 u8 u! }. v9 ~3 T* |0 J    for i=PY1: PY2
3 N6 A9 \. B- V7 a  d6 i! w' I        if(Im6(i,j,1)==1)
* H; c! V4 a" l# J& h            Blue_x(1,j)=Blue_x(1,j)+1;
4 p) F6 W( {. P" l        end
% n1 L) b9 X5 ?    end
8 P% a- }% Z! o. a, _2 p/ {: p" Xend
+ Q5 e+ @$ e1 u/ k. I, QPX1=1;) D+ j7 ^7 [: N$ N& i
while((Blue_x(1,PX1)<3)&&( PX1<x))
0 R+ o. f8 ]% B- ^3 {% c2 q    PX1=PX1+1;7 b  \# h; q9 F4 S' q- A/ I/ Z1 V# W: O
end1 @; m1 ~; f' N) X0 W" Z: Y
PX2=x;2 o2 k$ T# Z- b& x! L& L. c1 p
while((Blue_x(1,PX2)<3)&&( PX2> PX1))0 g9 S- b2 O3 j4 a- r
    PX2=PX2-1;
4 n  n! F  h, e  {4 e; nend9 `  T& _2 l* C0 C
PX1=PX1-1;
. J8 k! M: y8 C. ?! M/ S# z: GPX2=PX2+1;
2 f1 J0 W2 n' S  B& \dw=I(PY1: PY2-6,PX1 : PX2,: );' D- ]+ D2 i+ L# o( Z
figure(8),( B4 x( d% ]4 m' H
subplot(1,2,1),& W% ]& J2 C$ n. p9 j+ ?" N
imshow(IY),
2 p* W3 D& A) o6 Xtitle('垂直方向合理区域');) o4 C5 _: d; a( \% _1 C7 b0 Y) l
figure(8),. b; K1 C" l+ ^) n, _+ \/ }8 h, u
subplot(1,2,2),
$ @! i$ w- C& W& Ximshow(dw),- Z* [% N! ?% ~
title('定位剪切后的彩色车牌图像')3 K+ D" M; p2 m) Q
imwrite(dw,'dw.jpg');
* P# X$ \. z, e0 w# ra=imread('dw.jpg');
& [# n2 C% P- h& f" }3 G1 `7 ?. D3 fb=rgb2gray(a);+ K1 W' A7 l7 }  B- o0 d  `
imwrite(b,'车牌灰度图像.jpg');
+ Y9 }# n2 B% O- N0 Xfigure(9);
; g% f& Q3 c( ~$ `# H2 O3 y( ]/ Usubplot(3,2,1),
3 Y1 _* t+ J6 n$ j1 {0 ~imshow(b),6 E" r: P2 R! P0 _( l
title('1.车牌灰度图像')* D) `' j8 {. Z( ]* ]
g_max=double(max(max(b)));3 z0 P" f! a) t  x$ d
g_min=double(min(min(b)));
( M) w  s6 g$ e" {! h8 P  lT=round(g_max-(g_max-g_min)/3);
) ^: u1 s- u  ?: i1 @5 i+ a! Y5 U[m,n]=size(b);
0 e: `" }3 `  M& R% ~) M" Od=(double(b)>=T);. V/ v/ _& ]+ x' C/ \% v
imwrite(d,'车牌二值图像.jpg');+ o' J  ], _$ K' T8 _4 b
figure(9)
3 v: {! c$ `+ @* Msubplot(3,2,2),; v' \0 j9 _1 y0 I. b$ W% ^; Y
imshow(d),. \9 `" d! w+ e$ Q: O; u+ a
title('2.车牌二值图像')
( X% M* i& j/ m. e7 r% Vfigure(9)
0 b" q1 J5 r5 f! Q) msubplot(3,2,3),
% Q. W" X9 \' Q6 T- O( a6 Aimshow(d),
3 J' ^5 S3 O" ]3 B7 h$ U* Ztitle('3.均值滤波前')
" T' I' o+ Y4 ^% S9 I8 q' ]h=fspecial('average',3);; t3 v& t, p9 L
d=im2bw(round(filter2(h,d)));3 |9 F2 a. |6 d' l3 _$ {. E
imwrite(d,'均值滤波后.jpg');
1 W0 t" a2 |; |) A2 r- a" {. y1 xfigure(9). J) {9 g0 f7 k( ~, Z
subplot(3,2,4)," j. g+ c. ~. f
imshow(d),3 }3 d. x1 w$ z! x' ?8 Q9 i  E: q
title('4.均值滤波后')
( H/ G7 h! N% j0 B" @; hse=eye(2);
' P5 M; ^, L8 z+ J[m,n]=size(d);7 c, _* C8 z. Y
if bwarea(d)/m/n>=0.365. O# K2 a% O$ B- p$ K) N
    d=imerode(d,se);/ s1 [8 X# K: o
elseif bwarea(d)/m/n<=0.235
0 c4 O- r( _4 M4 J    d=imdilate(d,se);: J1 B2 y, A# l* l2 y2 V2 }8 i
end0 A! Q5 N$ [, D3 ~# m  Q& `" ?8 a
imwrite(d,'膨胀或腐蚀后处理后.jpg');
% J/ ]; s  m( }8 }! wfigure(9)
8 z: `3 b$ o$ Y8 ]) D4 |subplot(3,2,5),0 A  D4 }  c! \8 r5 X% V9 r! W
imshow(d),$ @+ y/ _& d- `$ b, z2 f4 ?
title('5.膨胀或腐蚀后处理后')
" B0 I# b  b7 q) |( id=QieGe(d);  x: \. _! ~. _& e& f9 Y2 L
[m,n]=size(d);
, T# Y8 v6 H2 `& y! Q1 a7 M% rk1=1;k2=1;s=sum(d);j=1;) {: C& @) j3 [9 Y1 F9 Y4 H! d
while j~=n
, \  x) I8 C4 [$ f7 _: O$ ]0 N   while s(j)==0;
1 d1 R- D: \$ z) F8 \6 d  _% r        j=j+1;) ?& [+ ]( S. x* }2 S* J8 G. v
    end  I/ c# z$ q# V1 y# n
        k1=j;+ ]$ s5 ?" U1 g4 F3 n* J
        while s(j)~=0&&j<=n-1$ f1 l  g# c. B( B+ r
            j=j+1;# E# q& g* a. @& p: [2 \3 f3 B
        end
1 q$ ?+ ^7 r+ j/ L  W' g* h3 v' W        k2=j-1;5 @7 C/ F3 j$ V3 `# v" j
        if k2-k1>=round(n/6.5)
# k1 p6 K1 Q. V0 ]# y& S! l7 ~% o            [val,num]=min(sum(d( :,[k1+5:k2-5])));/ I, ~! z9 l$ c+ Q. M. C
            d( :,k1+num+5)=0;
  n  F0 ^  I* J5 r, r/ V, Z- s5 \        end
( k2 E% @, C& ~" ~% r3 J: y* iend6 r& j4 L$ s! F4 B( I& Y$ R3 n
d=QieGe(d);
# `& l1 h3 Z6 K2 X3 \y1=10;y2=0.25;flag=0;word1=[];& E* M  k& l, H" W" T$ \
while flag==0- F# K9 S& z+ ~. e& }' a% A
    [m,n]=size(d);' H& R* C" A: {3 C  J, O
    left=1;wide=0;
' h5 q4 @+ o8 b+ d: W2 o3 E3 N    while sum(d( :,wide+1))~=02 T5 v6 k4 _( j  |. w( B
        wide=wide+1;
- c. Q9 |- d8 i7 j) D    end2 w$ V; b+ N) o$ N& U
    if wide<y1;
$ A% c$ t; c' i% Z* p) ?        d( :,[1:wide])=0;
' J- D" ^: D7 k        d=QieGe(d);" V1 D# k& H8 e. Y; A
    else" h* ?: e# Y- [9 ?
        temp=QieGe(imcrop(d,[1 1 wide m]));% K  k4 I) u& @3 i
        [m,n]=size(temp);! ~3 ~" u0 g+ {: c9 o
        all=sum(sum(temp));' D2 N, ?) D+ L6 {7 T4 o& G
        two_thirds=sum(sum(temp(round(m/3):2*round(m/3),: )));
) L1 ]8 \( s, h' D7 c        if two_thirds/all>2
2 C% W" b: i) j0 F            flag=1;word1=temp;# T0 v2 V$ F; T& I% d* ~0 ?
        end2 H+ F9 T2 G; O8 z: U  J
        d( :,1:wide)=0;d=QieGe(d);( w* b, j) X$ D6 E
    end& `" f+ r; V, u# v$ ^
end
/ M, Y4 _- J# n* n5 O' p[word2,d]=FenGe(d);
+ P1 Z7 i3 O  L[word3,d]=FenGe(d);5 b" ]( _( M( w! @
[word4,d]=FenGe(d);
9 Y, H' E0 Z( A  p! G) M& b. }[word5,d]=FenGe(d);: `( F) B$ K2 K8 @$ c8 Y% j% R# W
[word6,d]=FenGe(d);
( t, i# W" N; u8 j[word7,d]=FenGe(d);
- r) J+ R8 \1 Tword1=imresize(word1,[40 20]);" C: {, ?8 q+ A' l/ T
word2=imresize(word2,[40 20]);
# \: F+ c: U5 m% sword3=imresize(word3,[40 20]);
3 _4 O, |' D! V* J( L0 E/ T5 Uword4=imresize(word4,[40 20]);. ]' S1 ]  f5 ~4 j7 J
word5=imresize(word5,[40 20]);
0 F& t; ^0 S6 c8 Oword6=imresize(word6,[40 20]);
* |& v1 Q; d' x1 ?, bword7=imresize(word7,[40 20]);
5 ]8 c0 c: t: R) Kfigure5 e& v$ ~% J% _
subplot(2,7,1),: N& |# }# S1 r  C# O$ Y, L6 Y
imshow(word1),' [) A2 X! o/ D3 F% u+ j
title('1');; d* q$ d$ l' O4 H+ Q
subplot(2,7,2),& i/ X; j6 M, a. o& ]2 }" f% j
imshow(word2),; P5 F2 Z1 M: u9 A
title('2');
6 F- s/ Y( A/ q# r; `$ I: Qsubplot(2,7,3),
4 [. C, ]& \3 pimshow(word3),
9 m5 p3 c9 U2 r6 X6 _title('3');  d" D+ c6 e+ u- }( V
subplot(2,7,4),
& P: |$ f2 N- g* ?) f  Himshow(word4),
  H6 `/ }2 r* T) F% _) }title('4');
; s# d' {- b0 |subplot(2,7,5),
! [( n% q0 g4 zimshow(word5),
2 l+ r: O" f. p" O! ]: v6 ~  {0 Btitle('5');$ c  a) O$ ~$ {) }; D7 ]
subplot(2,7,6),
3 l/ f& R1 \# N. H4 B0 Iimshow(word6),8 O( t& q4 Q$ f7 b' A
title('6');$ M8 e5 D5 Z9 `
subplot(2,7,7),/ _7 Q. X5 [( D9 c+ p# B
imshow(word7),+ H* ?" D! |) J0 f8 [. k* A' w
title('7');
6 P  C( d+ y& |& kimwrite(word,'1.jpg');
( H, Q  r4 K7 Y7 qimwrite(word,'2.jpg');
- O5 K1 x1 @4 P$ ~& E# ?imwrite(word,'3.jpg');
4 Q% p3 J2 z3 T( U- W. Zimwrite(word,'4.jpg');
) A1 P- r$ U6 G0 f0 `& Nimwrite(word,'5.jpg');
$ T2 k( v& J+ u+ O$ ^: @8 z) P+ kimwrite(word,'6.jpg');2 Q1 g4 R, [. c+ O( V* d6 q
imwrite(word,'7.jpg');6 p( _# R' p& ~' M

. X( U$ R  {$ M! P3 V) c' M0 aliccode=char('0':'9''A':'Z''京津冀晋蒙辽吉黑沪苏浙皖闽赣鲁豫鄂湘粤桂琼渝川贵云藏陕甘青宁新');, W& h# X7 @/ A! F( \6 N/ O1 G
l=1;
* o8 ^# H4 f$ d3 Z1 \! g5 O  y& Xfor I=1:7; Q0 L! [& N: O. B1 R
    ii=int2str(I);
8 f. L. Y0 j9 ^+ g: E3 R: I    t=imread([ii,'.jpg']);$ v6 H8 c+ H8 L, K) i. B( E, i, m! r
    SegBw2=imresize(t,[40,20],'nearest');9 A4 f% @' J9 u! B: _0 R
    if 1==1
2 U8 p7 Y8 Q0 T1 L        kmin=37;
$ a& v& z4 D$ P. N! @: U" C        kmax=40;
, I3 M9 P% U* z: C7 q6 }2 u8 E    elseif 1>=2&&1<=3
2 E. I. _, n9 ?+ Z) ^        kmin=11;( H7 ]7 I& r' @% R2 B% g
        kmax=36;- L- S" a; N! P/ r7 g" S3 @
    elseif 1>=4&1<=7
7 P$ S9 {  A3 I# y6 E+ \( h7 M        kmin=1;
  X3 T  k9 i! q& v$ J! V        kmax=10;
4 y" j" S6 U  t8 h1 O2 e    end
* n( m. e- I; F0 H/ }    for k2=kmin:kmax
( f! c! L; F+ }  R$ ?0 X7 s( H        fname=stract('字符模板|',liccode(k2),'.jpg');1 ^4 ]0 p4 [. u1 F/ B  p1 V
        SamBw2=imread(fname);
" R9 @! `9 b; j& o3 n. L        Dm=0;
/ s" m. T' z& T7 k- L5 C        for k1=1:40- M& S* J6 q; F4 D
            for11=1:20;. s1 t) K* Y9 U- ]- n: e6 i  n
            if SegBw2(k1,11)==SamBw2(k1,11)5 z& i- g8 F% ~+ H7 {! F
                Dm=Dm+1;
: C8 W. a, k8 r% C4 L- Y            end
' L* [+ \* D& t9 d        end% a$ \$ \- o. ~. K
    end
  D' {" ?2 J9 o    Error(k2)=Dm;: _* G1 a$ g: _8 B8 g) n( h2 b1 T  d
end5 u" g5 V  i; V& q: J0 y9 _
Error1=Error(kmin:kmax);
7 L2 V! L( `# r- b5 W) z/ L+ ZMinError=max(Error1);
2 K0 K& s5 n* p# e" dfindc=find(Error1==MinError);) p5 ?! Y, g, u/ j
Resault(1*2-1)=liccode(find(1)+kmin-1);$ |* y& ]% ?! ?. r4 l& `, E
Resault(1*2)='';, F6 w0 `4 h' [& n- b
l=1+1;! f$ G" I, W# y" [: H
t=toc;/ Z* J5 S: s6 A3 B& }2 X
Resault;0 \3 t* C' q% c; u" f- d: a1 ~
mesgbox(Resault,'识别结果')% r( N3 {% J; {" J( {" t
fid=fopen('Data.xls','a+');
5 s- B; C7 T6 r' _0 |fprintf(fid,'%s|r|n',Resault,datestr(now));
: P5 M; M; ?" Sfclose(fid);. r  `9 F' {1 c' i
索引超出矩阵维度。
! w1 T7 e2 v: ]/ A; g8 e  w9 g7 t/ E3 N& H  W4 w
出错 main (line 152)
. k+ L, R. f/ l3 z6 V& Z. T    while sum(d( :,wide+1))~=0
: b9 _6 }: k- E0 F5 c# H+ g6 ?9 U

该用户从未签到

2#
发表于 2020-7-16 13:23 | 只看该作者
帮你顶一下

该用户从未签到

3#
发表于 2020-7-16 16:28 | 只看该作者
根据错误提示:+ j$ K) L( z9 M. |
出错 main (line 152)
! u7 I! C  K$ h    while sum(d(:,wide+1))~=05 x# e3 Q# A' B! l2 Y

* o& Q+ C" J7 i+ \0 j* k. W% d1 `
猜测原因是wide+1在某次循环中大于矩阵d的列数;: Y7 A4 L! G3 y, l" N- ?
建议在这一行设置断点,然后步进程序,查看wide变量的变化规律以找到超出矩阵维度的原因。

点评

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

该用户从未签到

4#
 楼主| 发表于 2020-7-16 16:45 | 只看该作者
haidaowang 发表于 2020-7-16 16:28  q. |/ o4 [, D
根据错误提示:. I* X+ B) m$ k. h1 Q( W9 n) X1 V
出错 main (line 152)5 y8 M. t+ }; [8 R/ h% t
    while sum(d(:,wide+1))~=0
, U: u: N, I  m) g& j* s9 ?
谢谢啦,我检查一下
' m/ w, t: j( q' ~, X  ^2 ?6 A9 r' p
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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