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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 qpggup 于 2020-7-16 13:23 编辑 + ~3 q3 o+ A' ?
: o$ [. E* I; Q* h' N( m
做一个基于MATLAB的车牌识别系统,出现索引超出矩阵维度的错误。主函数和自定义函数都写出来了(书上找的),希望大神帮助
( |7 @6 I6 M2 m7 r" u" b; B4 L  ~& r[fn,pn,fi]=uigetfile('AD.jpg','选择图片');. x/ G: K) q$ }
I=imread([pn fn]);: m1 o! x% t. C. ^3 |& N1 T2 j
figure,
; o& B4 T7 T1 @  Himshow(I);
- u: n6 {: B* @% }5 H5 Q* dtitle('原始图像');. F+ [2 x2 U  X; R$ i- K
Im1=rgb2gray(I);
( c  q$ }0 Y' M7 b  Z& z: [figure(2),# z: ~+ x$ P: T$ C
subplot(1,2,1),
0 u6 |" G, M5 O5 I+ r0 aimshow(Im1);1 @* N" U6 ?- x
title('灰度图');4 r2 X% z/ B" k/ ]( ?. U
figure(2),
" n" N. ^' X) O' W  G9 \subplot(1,2,2),# O2 q9 y6 \6 w5 P( d
imhist(Im1);3 ]  r  V; |. b0 X+ v
title('灰度图的直方图');
/ z6 W$ w, f5 h6 A( z" F& F- {  oTiao=imadjust(Im1,[0.19,0.78],[0,1]);
5 [8 N+ A+ |0 G& z! D5 n* S5 Y3 S2 Y/ Z$ Efigure(3),
8 `! ]; V- h: G( _8 g6 @9 d/ Y5 {subplot(1,2,1),4 o" p! h- y0 D% ~6 v
imshow(Tiao);; ^) P& y2 J) N0 ^2 \' k
title('增强灰度图');1 w! G; H4 c3 [1 `5 @; N
figure(3)," E% Y, D2 ]/ }
subplot(1,2,2),! X3 }# c9 H4 m4 s4 A# g9 H3 F
imhist(Tiao);3 U; K2 L9 G" _& A
title('增强灰度图的直方图');8 ~5 }+ ^( q8 T" e) f
Im2=edge(Im1,'sobel',0.15,'both');4 z9 G: w1 q; Z
figure(4),
! @1 i# H# c8 F( M% fimshow(Im2);
# n/ \& O5 @/ j2 f4 k- jtitle('sobel算子实现边缘检测')
  c& M5 h: x: _0 bse=[1;1;1;];) g# s' S5 v7 `; ^+ V
Im3=imerode(Im2,se);
6 c3 G: O8 H$ h4 jfigure(5),. m! g9 Y3 [# Z/ p
imshow(Im3);
* [/ \$ O4 x& ]* b- ?* ztitle('腐蚀效果图');8 B& L& [! S% s, `* a9 W$ R
se=strel('rectangle',[25,25]);: y  I# p# N9 N4 r, z; F
Im4=imclose(Im3,se);6 p- ]5 n# ^! v/ e7 N! r) w
figure(6),- h/ e+ I# b: ?  S% a; G
imshow(Im4);
6 v2 }5 h2 D6 W4 K: P: dtitle('平滑图像的轮廓');( c* u3 ~2 Y- {/ R5 W
Im5=bwareaopen(Im4,2000);
+ i, B- A" u# e7 f. zfigure(7),
/ _5 L* R# ~" N3 \8 `% Aimshow(Im5);
' n$ P0 R3 r: j  ?title('移除小对象');
! A8 G$ L, C3 W* M[y,x,z]=size(Im5);
% p( r" g3 G1 }1 c8 D5 VIm6=double(Im5);& u, v! A2 }# m5 Z; M/ m+ c$ `
Blue_y=zeros(y,1);9 A/ W) X: g' \8 j+ w$ G& `! P- o, ^
for i=1:y
( O! ?/ H$ _& L7 H, S6 A    for j=1:x& M! Q" d+ z* @0 i
        if(Im6(i,j,1)==1)
7 w+ }/ D: p% t2 k) ^            Blue_y(i,1)=Blue_y(i,1)+1;2 e  C- |! P% d, R8 V  P- p3 Q
        end) W. I) N( m- D9 r' V
    end
" Y, Y0 ?9 |- ?% a0 p  ]9 B+ }end7 L+ Y5 K& ^1 {; X
[temp MaxY]=max(Blue_y);
( B7 C- q! d" w1 \* SPY1=MaxY;1 H! w& x4 s0 q. F
while((Blue_y( PY1,1)>=5)&&( PY1>1))) Z  s( h# f0 c) n& _% N% P
    PY1=PY1-1;0 X; [) y$ n# e
end9 x7 H1 M. F. ]& ^
PY2=MaxY;* C9 A& ]3 c5 n2 [/ I7 m
while((Blue_y( PY2,1)>=5)&&( PY2<y))
+ f9 e1 y6 Y( S2 V. P) R    PY2=PY2+1;, `# Q; K& t0 D" |
end* _5 B! ~# ~4 X6 n) Z. F
IY=I( PY1: PY2,:,: );
3 B5 o, L' f' {  r. l3 b- f! b& M5 }Blue_x=zeros(1,x);$ u$ Z' d$ [" T: T  ~
for j=1:x
" H, y! \  `" y    for i=PY1: PY2" P; h, O, S. [( f- G
        if(Im6(i,j,1)==1)
# s8 i' z5 C) p) l            Blue_x(1,j)=Blue_x(1,j)+1;
. q4 ]: O9 ]( l% {" \- E        end
9 u" g+ m; w5 s9 X  N/ \0 Q" ?: Q    end8 L2 P  P8 R2 n" Y* w! G- X
end
3 a7 y0 S% t0 m, JPX1=1;$ Y! ~) k3 b8 p' Q6 p: ]9 f
while((Blue_x(1,PX1)<3)&&( PX1<x)). G  I1 b- t; o5 w7 |
    PX1=PX1+1;
1 p- c4 r3 H1 a, `# Cend
- {& o! c  y4 E- n' D& I% r' K) XPX2=x;
7 K3 e1 S% M! n* Z2 ~while((Blue_x(1,PX2)<3)&&( PX2> PX1))7 T. _# x! i/ o& F" J
    PX2=PX2-1;' b" S2 B3 C2 e5 G5 o% f; T
end0 b8 S7 r- j/ ^) @* U) p* U
PX1=PX1-1;
) V4 u! M) k% @/ gPX2=PX2+1;
( C: v4 A% Q; G7 ~$ C) s9 s2 O3 Ldw=I(PY1: PY2-6,PX1 : PX2,: );. E% Z" W  O% G; [, Z: I- Q( F) ?
figure(8),
& j5 X  @7 Q/ I: u2 q: l2 \+ Z6 Gsubplot(1,2,1),5 u+ }: B' \2 i0 r7 K
imshow(IY),
2 @4 X7 r9 P& K5 x- l/ w+ {title('垂直方向合理区域');
: D! q- n) U" Gfigure(8),, ^: j; ]" s7 x" ]) ]: _
subplot(1,2,2),  j6 I+ ]% n8 W' t9 [
imshow(dw),3 y! `6 j1 G5 q% ?5 w6 Z
title('定位剪切后的彩色车牌图像')4 L7 ]2 \+ K; S
imwrite(dw,'dw.jpg');
. H  V* Y. X: F$ e0 z, ~& W- ]a=imread('dw.jpg');  ~  s' j0 {0 S: a  ?" q; A/ @
b=rgb2gray(a);
# X7 o& U; a: t8 cimwrite(b,'车牌灰度图像.jpg');/ {0 u/ }3 ?; `" I/ B" x
figure(9);
0 \8 x" e# h+ r; ~subplot(3,2,1),
- o5 G! x, @" Z+ a2 K. Qimshow(b),
& [, K" a6 o3 \. t  r. ]title('1.车牌灰度图像')1 l% m3 Z2 Q& K; g4 A
g_max=double(max(max(b)));+ m. @. r9 c3 ]
g_min=double(min(min(b)));
) j6 L% B( \2 x; H: vT=round(g_max-(g_max-g_min)/3);# N4 [, H5 v$ O) d6 J& a* ]8 G! Q6 z3 R
[m,n]=size(b);
- A! x, Y9 x( J5 q  t2 _/ C" Bd=(double(b)>=T);
+ i6 k! ?2 h1 X0 L0 j1 Himwrite(d,'车牌二值图像.jpg');5 A4 \( j+ ^" ]8 r6 Q
figure(9), g% ?9 o  @3 G6 i4 q' ?" n1 c4 D
subplot(3,2,2),+ X. Q6 r9 x  D9 m9 O) q$ v
imshow(d),
1 P2 J. ]  R& j$ ~( _/ `title('2.车牌二值图像')
: o, r3 N3 ], N+ Y* bfigure(9)
% f* z4 b" d& Z1 Y% hsubplot(3,2,3),
4 b% a, k5 f. O7 ]imshow(d),8 W1 r4 H1 \- a: C0 N
title('3.均值滤波前')
- I, ~! v/ J4 h% R4 d/ `h=fspecial('average',3);8 {2 g6 {9 Z+ M- K1 P- W0 u2 o; ]
d=im2bw(round(filter2(h,d)));
" A1 o: h- S4 J8 [imwrite(d,'均值滤波后.jpg');6 U1 p/ }4 b, A, t% L6 |( a1 |
figure(9)
( t$ z: U3 m% h7 V! d% Dsubplot(3,2,4),; n, m0 B7 V4 g2 R
imshow(d),
9 c5 Z6 k* G, r! ftitle('4.均值滤波后')" w- G$ g* N* ^+ E* g7 |6 m, C) A
se=eye(2);
2 V4 P# }3 M5 k- r[m,n]=size(d);% e5 k3 d% x) G$ R# i$ c8 C( E
if bwarea(d)/m/n>=0.365/ A- q  l# G! m9 S! W
    d=imerode(d,se);
7 T4 S4 J' w" ]; A, L  |7 A+ nelseif bwarea(d)/m/n<=0.235# y! x' N+ k# B# {' @
    d=imdilate(d,se);  N. ^7 Q% K" ?5 x
end
) r, v- q& s; V- z7 h# m* D5 b* fimwrite(d,'膨胀或腐蚀后处理后.jpg');9 U, S- u" ]* \" X" v& P
figure(9)- P2 R0 J1 b) e( F! M
subplot(3,2,5),
8 M, h4 ?4 s: t* b+ kimshow(d),
0 t. J" E. }2 X- Y( o) ^& w; @title('5.膨胀或腐蚀后处理后')
3 W- r* |- n9 e8 p7 O2 }d=QieGe(d);8 f5 ]+ {! d& d( _+ v
[m,n]=size(d);$ u) V4 U& ~$ o! ?
k1=1;k2=1;s=sum(d);j=1;
- G7 h) \% W5 g* \# N+ C* rwhile j~=n1 |% f/ }' r! D0 \. @2 p
   while s(j)==0;" E6 X6 d4 W* ?8 d6 P% K# M1 R
        j=j+1;# @+ f1 n# ~+ @' j) I
    end& L; B9 H( @/ e( z2 [; B
        k1=j;- Z& S0 @- M0 h$ a& J; M
        while s(j)~=0&&j<=n-1$ h$ b3 _! l2 [! x: @1 S
            j=j+1;
1 a; ?4 B6 D$ I+ z* V6 r2 F        end# T' x: O% ~0 V2 p8 |; b
        k2=j-1;- u$ N9 |- L, Q2 X4 _
        if k2-k1>=round(n/6.5)6 b2 Q5 P) e, c8 O
            [val,num]=min(sum(d( :,[k1+5:k2-5])));3 E- r6 l# z' m. P
            d( :,k1+num+5)=0;
  p' @0 }: L  \: a8 R        end9 w* v! g7 A3 u' {" {
end) U% x: j" e) V# O* \4 U6 Z% x! {
d=QieGe(d);
; ]! D: Y7 G1 n7 l# wy1=10;y2=0.25;flag=0;word1=[];
0 X+ V. b$ J7 Wwhile flag==0
9 t  r9 i) m! ?; |' p    [m,n]=size(d);, C; z; w, {2 P$ D
    left=1;wide=0;
/ W7 C( _( g9 ]# W; [5 h    while sum(d( :,wide+1))~=09 N1 u- Z% f9 j$ v" o
        wide=wide+1;
) _: j, ?$ `& ?    end. T6 R, J% ^( \. u$ S
    if wide<y1;( e) K  [9 M9 C. v% `
        d( :,[1:wide])=0;
, s1 D# e# ^( B5 `        d=QieGe(d);! n$ h) x- v' F2 e: Y4 P) T! u$ x
    else
' w9 p' V7 s# J' [        temp=QieGe(imcrop(d,[1 1 wide m]));
2 E$ j9 v+ {# p        [m,n]=size(temp);
& s& E) l: y+ ?3 A* j        all=sum(sum(temp));
/ p; t" I4 V0 W  H6 n8 b        two_thirds=sum(sum(temp(round(m/3):2*round(m/3),: )));
$ F) u9 l8 d/ Z4 T( O        if two_thirds/all>2
: F7 o3 S2 r* R$ ~7 Z) p            flag=1;word1=temp;
2 n- S8 ~- @0 s8 M. V" d' J        end5 }- G, x) u% A! B
        d( :,1:wide)=0;d=QieGe(d);
/ v+ }5 W0 ]5 c' e. k8 \- \9 V) a+ T1 u    end
7 W8 x: W& k" o2 U! @0 qend+ F' P5 i+ T' P1 y( X  [, I
[word2,d]=FenGe(d);
, C9 z0 a/ `6 ?+ L" m1 d- M[word3,d]=FenGe(d);, X4 q4 i! a* w6 D* E
[word4,d]=FenGe(d);2 A2 y) }4 {! t  x5 r! W- j7 v' T
[word5,d]=FenGe(d);
" }/ y  \% P9 T7 Z+ j[word6,d]=FenGe(d);' X6 `8 ]- |  h8 e( C( |  r! d$ H
[word7,d]=FenGe(d);9 v5 c9 ?- h. \' J. v, C3 g9 N/ [
word1=imresize(word1,[40 20]);4 i0 x$ t& O' m" H  o
word2=imresize(word2,[40 20]);& ?* i2 J: C$ R# m& [
word3=imresize(word3,[40 20]);
9 I8 p5 {$ W4 l9 Nword4=imresize(word4,[40 20]);
% c3 _$ ]7 I9 X$ l5 p& |word5=imresize(word5,[40 20]);+ g& @. j6 b& v+ R" c; f
word6=imresize(word6,[40 20]);" U  Z: A+ `" I  M! }/ i
word7=imresize(word7,[40 20]);
& i1 _4 p" q# L* ifigure
  ^6 w+ t2 q0 e* ]! e' Bsubplot(2,7,1),
& x$ n8 x4 Y( _- i1 Rimshow(word1),2 V' ^$ ^. y3 c
title('1');+ Q  e+ a# w# x! y: M9 K
subplot(2,7,2),5 g, L# r! `% A7 Q: @( ?
imshow(word2),
, Z& a" n! ^+ D$ b$ {$ Ctitle('2');
7 K* k( X! r+ q- r$ G6 L# E5 G0 usubplot(2,7,3),
- g$ E. v" C: Cimshow(word3),
- o* {) i3 T0 }8 Wtitle('3');
+ d. Y2 h7 _& M7 J1 E" m3 rsubplot(2,7,4),
8 H6 P; H0 \& T$ \) H* `imshow(word4),
5 h" p& ]! ?0 o% Atitle('4');5 i2 U* o, Z9 G) U- q$ e2 I+ D
subplot(2,7,5),. L2 A+ U. f$ M4 S, _- f% Q
imshow(word5),
6 U2 `# Z; C/ }& L" t& btitle('5');
; Q3 m4 j/ P: V2 u5 f; Zsubplot(2,7,6),* m: m' G, ?0 _' k- [: R: ~3 c" j
imshow(word6),
2 q" N4 j. f4 A% L1 |8 [5 Ktitle('6');4 q8 ~8 L% A+ k4 S% S3 z- `/ \
subplot(2,7,7),3 g. g" [. Q, {* g& V1 @
imshow(word7),
: d4 ^# @. K9 g# l+ [+ R2 rtitle('7');# t4 F( n! f& f' c2 o) m2 ^
imwrite(word,'1.jpg');
! i# q* ]4 ?9 m4 i( V9 \- z5 ^% O. w# Iimwrite(word,'2.jpg');
* J; Z4 u1 N2 g4 \imwrite(word,'3.jpg');
/ {2 ^% v! Q; `! t: [imwrite(word,'4.jpg');- L7 \9 a5 L# V, o4 e# H1 U, h" T
imwrite(word,'5.jpg');' {; k% g* [; p( }3 g7 ~) o
imwrite(word,'6.jpg');3 _; X- k1 ^; \" F  P# Z
imwrite(word,'7.jpg');
, \8 c+ y) ^" V( ^( R+ B
4 E/ R# r# r: i  ?/ }liccode=char('0':'9''A':'Z''京津冀晋蒙辽吉黑沪苏浙皖闽赣鲁豫鄂湘粤桂琼渝川贵云藏陕甘青宁新');  p  w9 b9 E" Q0 a4 m9 Z$ G
l=1;# ?# v9 k7 n2 V( {. G
for I=1:7
. G4 l- ?# ?# R    ii=int2str(I);6 z' Y+ t4 b5 Q
    t=imread([ii,'.jpg']);
/ x4 |  @$ w' g9 K    SegBw2=imresize(t,[40,20],'nearest');* C% _8 E* P+ G8 D8 t
    if 1==1
1 _7 S1 s6 ^! f' p2 n9 O& k        kmin=37;
; j+ m7 w7 e. F  E. T  M        kmax=40;9 E4 z9 `8 i7 O  d! O
    elseif 1>=2&&1<=3( ?# P2 i7 l# W  t( u" G
        kmin=11;1 x) ~: X. I0 x& \9 u9 n( i# ]! n
        kmax=36;
, ?" s% B- s1 p# E: K$ t$ M3 B" S    elseif 1>=4&1<=7
& H/ n' B# R4 x3 ~% W5 B  m  T        kmin=1;
- \7 q2 `" ~, G* O% ?        kmax=10;: x2 Y9 k9 B7 B) ]
    end
3 }; q4 @6 J* w    for k2=kmin:kmax- _9 N- C  U: m4 M+ K1 t
        fname=stract('字符模板|',liccode(k2),'.jpg');8 G. E$ [& Z1 A5 L6 i4 i/ N
        SamBw2=imread(fname);
6 `9 |% d/ B  Z+ M        Dm=0;. O, j4 e3 g, m9 e  `
        for k1=1:407 q, j9 W* j+ t, ~* z
            for11=1:20;
0 A. ?; [, H2 R& a            if SegBw2(k1,11)==SamBw2(k1,11)/ h1 s, U% ~9 J* n' Y& C  T; {) |
                Dm=Dm+1;, F$ D+ E5 N* v( \5 q) S' W* L
            end. |7 @' z: O% x* d$ \* [% [. i
        end
+ |* V0 l) ?: |# \" T4 r    end
# P+ I# ^: b' ^' h6 Y* s& v    Error(k2)=Dm;0 A- K0 o% G* p6 Q" ]% n8 @
end
5 z3 ]! W2 g) V; m: PError1=Error(kmin:kmax);" M5 f  f6 n+ a2 M
MinError=max(Error1);
# I# b) `; ~8 S7 efindc=find(Error1==MinError);
5 a+ `$ d: a0 @, C, O  UResault(1*2-1)=liccode(find(1)+kmin-1);
4 v  L: E# k0 d. SResault(1*2)='';
5 W6 ^5 W/ Q0 Q& x, N) r* H+ w+ Ml=1+1;
) {, Q9 x% D$ F% et=toc;9 V) i1 d- G3 U6 m/ V9 s1 h1 T
Resault;
! R- t& s: Q6 B0 C5 D9 `- f- z$ B- X, Bmesgbox(Resault,'识别结果')# e- j6 U, A6 D7 l. w- }. B6 O
fid=fopen('Data.xls','a+');
. F6 M% r" u4 g, y8 _: X0 Cfprintf(fid,'%s|r|n',Resault,datestr(now));/ T0 X- D' D- p, X. Z
fclose(fid);
3 q) r: O6 F( {: o; z索引超出矩阵维度。* u! d+ z' x( M1 N( j

$ z: q( E  y3 V- X! ^: x  ~出错 main (line 152)1 K, E: m4 w, I
    while sum(d( :,wide+1))~=0% M" ?( |% B8 V# z+ a

该用户从未签到

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

该用户从未签到

3#
发表于 2020-7-16 16:28 | 只看该作者
根据错误提示:; Z: f6 G8 p, {+ d
出错 main (line 152)
0 ~* D; z  t$ C( a4 l% U8 U$ w" |8 B$ D    while sum(d(:,wide+1))~=0
6 J9 l6 _% G& y4 k/ \7 i1 S% W! L: P) a$ k, }

' U' v6 e4 @; l2 o0 d猜测原因是wide+1在某次循环中大于矩阵d的列数;
) |, g2 c4 P6 K  D  w% I5 C建议在这一行设置断点,然后步进程序,查看wide变量的变化规律以找到超出矩阵维度的原因。

点评

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

该用户从未签到

4#
 楼主| 发表于 2020-7-16 16:45 | 只看该作者
haidaowang 发表于 2020-7-16 16:28
; P8 V' H# G4 u& Q, @根据错误提示:1 L( P- e& a# `
出错 main (line 152)9 w: N4 @& W- I2 G5 }
    while sum(d(:,wide+1))~=0

- J% s. A7 z8 V  @6 F谢谢啦,我检查一下
' }" [. a8 k# C9 W5 R% V
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-24 20:17 , Processed in 0.140625 second(s), 27 queries , Gzip On.

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

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

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