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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 qpggup 于 2020-7-16 13:23 编辑
; H6 e8 z  \8 O3 @6 g8 d$ z2 T: r$ _/ o* e% i0 Z
做一个基于MATLAB的车牌识别系统,出现索引超出矩阵维度的错误。主函数和自定义函数都写出来了(书上找的),希望大神帮助4 y  o2 Q2 G. _! h, `3 v
[fn,pn,fi]=uigetfile('AD.jpg','选择图片');
. T0 r4 d! D+ M; F, Y& n8 \+ mI=imread([pn fn]);
' c+ q# `6 @( \* ^, O* G* b" a: [figure,1 `8 _& `$ U8 O) O3 z8 V) z
imshow(I);
9 C: q1 f' U! Q& Ttitle('原始图像');
3 O) D2 {) v3 BIm1=rgb2gray(I);
  q2 g7 i, z# j2 o' Hfigure(2),
* m( N% K" K. [4 A9 ~subplot(1,2,1),. M; i+ a. Q2 D3 Y1 `# r& D
imshow(Im1);4 `% L9 c* _3 L+ n
title('灰度图');) Q; t& X8 ~+ v1 F- z5 H* O6 }: r
figure(2),# ^, P- J" O- I6 a% c9 \7 C5 }
subplot(1,2,2),
1 g  M( B* Z) Q: S: d$ M+ u  ?imhist(Im1);( ^6 }1 K) M! k! g/ k  b1 s) F
title('灰度图的直方图');
  p4 X1 ~" j# k- pTiao=imadjust(Im1,[0.19,0.78],[0,1]);
2 o9 L. p/ ~& B3 u  T+ Hfigure(3),
0 {5 b- R1 `; X1 @subplot(1,2,1),
8 g+ L+ k: Z, h. v! J6 g8 b1 Jimshow(Tiao);
. F4 d- l& ]+ Atitle('增强灰度图');
- \/ A0 l- [0 R  c( Y1 F5 Bfigure(3),! {7 V) X4 u. H# A% _5 e
subplot(1,2,2),* N; o. m5 @2 R! W; h7 Q
imhist(Tiao);
2 J9 @. L  e. v/ ytitle('增强灰度图的直方图');
; k# V" }, d  Z& Y6 Z  i. oIm2=edge(Im1,'sobel',0.15,'both');
* R: V: S: Z- ]/ m! afigure(4),6 F; O0 F. m, V
imshow(Im2);
4 Y0 `" [  P: ^( M/ [title('sobel算子实现边缘检测')& s/ K! i7 O, u0 X6 {5 \9 T+ i
se=[1;1;1;];
0 I1 u  p0 ], `. G8 s3 |Im3=imerode(Im2,se);- e6 G+ B- O0 l* a) K5 P: l% t8 @
figure(5),! g+ t1 K( s5 R' D- Z1 X, V* |, s
imshow(Im3);
  |! [& H2 P8 Z. V7 g8 Htitle('腐蚀效果图');
  {' X5 Q% J& v& \se=strel('rectangle',[25,25]);
! H$ R- _* \1 h! QIm4=imclose(Im3,se);* A+ Z7 r9 U6 ~1 A8 |) e6 z
figure(6),6 l( ~# y1 l8 J/ Z
imshow(Im4);
& l2 z6 F1 f# a# Ctitle('平滑图像的轮廓');5 X+ @: T/ s+ t& J: G, e3 x& U
Im5=bwareaopen(Im4,2000);
" f8 W0 W8 t, M4 Kfigure(7),5 l: Q1 n3 p/ T9 d: R  y
imshow(Im5);
8 t7 M; k6 }2 ?. J3 P3 q) Utitle('移除小对象');
6 G; s2 u2 S3 U$ I6 q[y,x,z]=size(Im5);
& x* a( O6 [9 CIm6=double(Im5);5 w: b4 z" G/ y
Blue_y=zeros(y,1);
& u, I2 L2 E; E+ V4 V' ~for i=1:y9 d7 c) x$ L: |: N& p2 e
    for j=1:x5 V+ M; f$ {# l$ g! u
        if(Im6(i,j,1)==1)
$ G7 J( V7 [1 c            Blue_y(i,1)=Blue_y(i,1)+1;) `' T  c( y* b6 Y  u, t
        end; D/ {/ n7 q/ X2 B, }# y/ L
    end! }, k" f9 A) `
end  ~7 I" U1 D- f% m# ~
[temp MaxY]=max(Blue_y);; K9 q/ t8 r5 z+ s7 X  M- C! c/ l; P
PY1=MaxY;
; U4 n* t# {6 g6 w3 uwhile((Blue_y( PY1,1)>=5)&&( PY1>1))! H1 J6 L' E* E, Z
    PY1=PY1-1;
' ?9 W" v! s; r2 |: s& Fend
1 M- X: d! U9 i* zPY2=MaxY;3 n3 }8 w9 t  @: _3 N) q6 G
while((Blue_y( PY2,1)>=5)&&( PY2<y)); \0 u3 d# J1 e0 }2 n. e
    PY2=PY2+1;
, v1 Y9 _+ q* L1 s7 }; ^4 U0 M+ wend2 s/ _! s. z, K- o& N
IY=I( PY1: PY2,:,: );: ?( n9 v3 u6 D: ~, t
Blue_x=zeros(1,x);
" n3 }6 p% H6 X7 vfor j=1:x9 a* r( D4 J. ~( `7 z. d+ T
    for i=PY1: PY2- G. [! y& w" l2 M, \
        if(Im6(i,j,1)==1)
3 b8 n% N: R4 k5 c            Blue_x(1,j)=Blue_x(1,j)+1;
/ u0 v( B; b! r" c: ^        end. s7 e+ |! `6 A4 E; B9 c0 T" L6 M
    end: S7 s' h& S$ a3 C
end
% n7 A# `9 h" F( u4 M; K3 w- p! yPX1=1;
, G0 n9 V- Z6 k/ B& t  i& swhile((Blue_x(1,PX1)<3)&&( PX1<x))
+ _( n) O6 f1 w; F3 X    PX1=PX1+1;9 T: r$ e' \" @% a4 W; Y3 x
end
, T7 D! ?- X3 ?+ T. M0 bPX2=x;
/ y2 ?5 r; Q+ B1 e* i1 Ewhile((Blue_x(1,PX2)<3)&&( PX2> PX1))
* ?$ B! n, A1 o4 s    PX2=PX2-1;
: ^6 ]( h" N! }0 z/ G" uend1 F  ?# g( }' w6 z5 {# \
PX1=PX1-1;
' R. J. |2 |- ]4 ~5 xPX2=PX2+1;
" A" h+ j$ G/ zdw=I(PY1: PY2-6,PX1 : PX2,: );/ H2 G7 j1 f1 r# }6 ]
figure(8),- ~; ]; ]9 q8 Z
subplot(1,2,1),/ H/ t  D; e- h# I& J) p, @
imshow(IY),# o0 J  q0 o. z7 V
title('垂直方向合理区域');
8 |% z: Z9 l7 A+ |* B: Sfigure(8),
, L$ R2 ]; e  f9 Wsubplot(1,2,2),3 p7 \. v- k6 @( t/ ^2 E
imshow(dw),
$ D! d  {1 i; Z" Stitle('定位剪切后的彩色车牌图像')
5 `+ ~, }- V9 t/ r8 j* fimwrite(dw,'dw.jpg');3 l: c$ r# `) ~
a=imread('dw.jpg');8 M: x, T, W. v5 O7 y- \
b=rgb2gray(a);
! ]# ^6 q5 ?1 @+ m7 I5 Z2 p, gimwrite(b,'车牌灰度图像.jpg');5 E5 ^% r- |2 x: p) T2 E
figure(9);( t7 }, z) b) B8 ~: M2 A3 O
subplot(3,2,1),: Y' [4 G7 n. r
imshow(b),
5 `2 L5 U5 ]! I- o$ R2 i1 ^title('1.车牌灰度图像')- }2 ?/ q6 y  F4 A9 Q
g_max=double(max(max(b)));
2 K, ^1 s6 {$ C3 e) i& r* Ig_min=double(min(min(b)));# H9 q  I3 c- Q' H0 F9 h9 b* Y
T=round(g_max-(g_max-g_min)/3);( I! H! z+ ]. W/ u4 n7 H: s
[m,n]=size(b);
. C: n2 z5 a5 ~0 n% U+ Td=(double(b)>=T);
; P# E, z/ M$ @; m; I& Mimwrite(d,'车牌二值图像.jpg');7 w( `- m, j! P; C! @
figure(9)
2 d: e, Q, L# asubplot(3,2,2),+ Q- r, O* Y  M8 T/ C# S( Y2 h9 C2 t+ c
imshow(d),9 w& L1 v: @1 `  J
title('2.车牌二值图像')" c$ S( ]& ~! q( @# s/ s
figure(9)
3 B& O+ q3 S; osubplot(3,2,3),
$ t4 K9 a4 y) e, ^9 z4 ximshow(d),
1 b/ i* m8 z3 y5 x* _& Z9 }) Ctitle('3.均值滤波前')$ |- z, C5 y5 c2 B: D) U
h=fspecial('average',3);
3 N% I- u) j' A1 Dd=im2bw(round(filter2(h,d)));/ n& J; K1 Q% e
imwrite(d,'均值滤波后.jpg');
7 H; W; n+ q5 C! Q; d7 b; B7 ifigure(9)" g4 J, \& X! h% o) r8 ^/ m
subplot(3,2,4),
2 ~" g  I' u4 ]( ~. o( [imshow(d),3 L+ q+ r% n! ?* Y, m2 h2 o7 z( ~
title('4.均值滤波后')
* R( d7 _  F$ Dse=eye(2);
1 T1 C! f% o8 U- _. c6 }[m,n]=size(d);
% k5 p$ G# r# }. ]2 ?if bwarea(d)/m/n>=0.365
6 Z. m" |5 U6 {% }* f% y; I    d=imerode(d,se);
* l1 ~1 Q' T% w+ m& i/ f* welseif bwarea(d)/m/n<=0.235/ b3 k8 k% L. O. b/ ^
    d=imdilate(d,se);9 |% L+ a8 P% l! e$ \. Y3 J1 x+ ^$ O
end# G8 g( L9 s1 f. H# t5 Y" r
imwrite(d,'膨胀或腐蚀后处理后.jpg');
, {* [5 @4 z( ?% d! j% t, a1 nfigure(9)$ }0 }; d! m2 }! q; R0 o
subplot(3,2,5),
+ N; U( Q9 B8 B& z; I/ P+ n  A0 [imshow(d),8 J8 c* N. N! e" q$ }5 Y3 H4 @6 b  X# M
title('5.膨胀或腐蚀后处理后')9 n: l7 g9 o9 p8 T; S
d=QieGe(d);
! N/ \- ~0 Z# B: s& v- v1 }[m,n]=size(d);
$ |3 M' i  T# d% s0 Pk1=1;k2=1;s=sum(d);j=1;
9 a$ i( c7 \3 G8 O3 Lwhile j~=n/ z0 X- N9 G' ]; S& O1 s8 U/ L. Y
   while s(j)==0;
, O; `+ o" H# p; t% V/ B2 F; b        j=j+1;
+ q/ ?& a$ l& F& o0 h/ l9 S4 s    end
% j6 I& C5 W8 ]: @5 b0 Y  v        k1=j;5 D; K1 A8 e! y" p
        while s(j)~=0&&j<=n-1
7 u- n" l4 r1 {3 G0 O& _            j=j+1;
8 X" K+ I: _* E. D5 F& }        end
' ^/ S- b5 P+ M) d        k2=j-1;& [8 j* u/ x: ^, Z' T! f
        if k2-k1>=round(n/6.5)
5 W4 G+ P" }2 }# v, L/ Z2 S            [val,num]=min(sum(d( :,[k1+5:k2-5])));
/ s+ H: Y8 O  O" g6 W2 c            d( :,k1+num+5)=0;/ h/ a6 \( l; j$ }& D
        end/ }! o6 n9 c7 u5 ^- F( Z; R8 S+ C
end% L( Z+ S4 l2 u& q$ x( d
d=QieGe(d);; Y6 g/ Z2 g6 G8 o8 l' a
y1=10;y2=0.25;flag=0;word1=[];8 w  H! N$ t1 X% O" i  f+ j% r$ I+ [
while flag==0
& {) w( B( F6 \6 `1 g& N    [m,n]=size(d);0 f; K2 D0 z& ?: Z* @+ s
    left=1;wide=0;/ q% ?5 C/ o2 f/ I
    while sum(d( :,wide+1))~=0
4 L9 W- T1 X1 A$ r; A        wide=wide+1;6 }2 O1 \, e# ~& j2 |
    end
* C$ Z  O8 k/ J, c3 g7 ?! z) i    if wide<y1;% f5 S$ a9 \1 I. n% G4 a- q* }4 |
        d( :,[1:wide])=0;
% H" L5 H0 q* Y. b1 a6 ~6 x        d=QieGe(d);
9 C5 H2 v3 r  K" ^; g; \' E9 ?    else. Z6 J7 `, o" f
        temp=QieGe(imcrop(d,[1 1 wide m]));
+ C0 e0 A7 n8 u; F. p8 h3 _* V        [m,n]=size(temp);, c7 _( K1 d% r' s* C
        all=sum(sum(temp));
; B9 B' D' Z4 W        two_thirds=sum(sum(temp(round(m/3):2*round(m/3),: )));
: h6 G& U' L& f! T2 n/ d        if two_thirds/all>2
8 K6 P' P4 T6 S, _) V            flag=1;word1=temp;
+ {  i, r& ^: H' N' B        end7 a8 j/ k2 V1 B
        d( :,1:wide)=0;d=QieGe(d);
" E6 `  F" G+ O2 Z    end8 C* u& M1 q" o) K$ L- b
end
9 `, R3 [/ u/ N  s0 f[word2,d]=FenGe(d);/ n6 }0 @  C0 v5 c% H
[word3,d]=FenGe(d);
: v( C2 y9 w! }* K8 D% D# P( w[word4,d]=FenGe(d);  q4 P' J( O5 a7 V- v
[word5,d]=FenGe(d);
+ E: b- R# W4 |, A[word6,d]=FenGe(d);4 r; U" F- O0 q# ~$ I+ q0 R! l0 o
[word7,d]=FenGe(d);0 ]" ]1 N% S9 _- X' \
word1=imresize(word1,[40 20]);
! k" T$ x0 K" A  Oword2=imresize(word2,[40 20]);$ o; a  A) F2 p' }* u' [
word3=imresize(word3,[40 20]);
5 B* p" b) L" a2 n, a. u- O1 sword4=imresize(word4,[40 20]);% R8 N$ r" s8 d1 x. b8 z. [% @
word5=imresize(word5,[40 20]);6 ^7 K2 [4 @8 I! e# l+ e
word6=imresize(word6,[40 20]);
, Q3 @/ z- V) M; j8 W3 Lword7=imresize(word7,[40 20]);
8 E  J0 ^1 q3 K4 Ifigure
3 O' u; f1 U  ^7 z  [9 [8 Lsubplot(2,7,1),! S( _& ~, l. {' q; ?+ n
imshow(word1),
" e9 b$ F7 K" ^title('1');2 r4 J7 b0 {' [
subplot(2,7,2),; h9 n! X) f  k
imshow(word2),
8 g* D1 K3 i% Etitle('2');
+ ~* c6 G/ l" e6 K" t0 esubplot(2,7,3),
, a. s' S; _$ k8 @; E, w1 M+ [imshow(word3),6 N/ B. S% P$ e
title('3');
1 l$ R0 L: F7 csubplot(2,7,4),
3 P' R7 v) U+ D9 I; f* h5 `imshow(word4),! b* I) V" c: H3 f1 j* `
title('4');, t9 s) l* @; U' K5 W3 h" C4 y
subplot(2,7,5),
, L9 k& k5 j: a- c  }imshow(word5),' ^6 }1 t7 W+ S8 T: q
title('5');
( m( E/ }6 s- @% S9 A5 `+ jsubplot(2,7,6),  |/ ~/ d& W) O( V7 B
imshow(word6),
' v/ O, A. l' j: X/ ltitle('6');- w7 a( a* x/ }% P+ L6 @
subplot(2,7,7),& Y  [. H$ W* l5 `3 w$ G
imshow(word7),
6 @9 K2 ~" v8 \3 ntitle('7');
' M3 k+ V+ F; A  d+ J/ g( x" [imwrite(word,'1.jpg');
' M6 |2 @( O: r' \) }( g  fimwrite(word,'2.jpg');
$ N& \& Y' @7 {0 ]imwrite(word,'3.jpg');
1 h: o5 V- m( Y9 J1 ?imwrite(word,'4.jpg');
6 z+ L3 [, b6 _: ]+ N- A( v2 wimwrite(word,'5.jpg');
$ B- s* z! v4 [# W6 M) @; G3 j0 P) _- fimwrite(word,'6.jpg');
  h/ y, ]% @+ u1 [+ {imwrite(word,'7.jpg');8 @( `. H9 |3 S9 W  x

' c% q! s* e1 R- pliccode=char('0':'9''A':'Z''京津冀晋蒙辽吉黑沪苏浙皖闽赣鲁豫鄂湘粤桂琼渝川贵云藏陕甘青宁新');
8 K1 W% y) X5 s  {- K! Y3 m  ml=1;6 C' n1 R% z* V: X
for I=1:7
. g0 a) p' R( ~' ~9 N, W" P    ii=int2str(I);3 p) f& Y+ \$ b6 V  L) r- x5 H+ m
    t=imread([ii,'.jpg']);- O: c1 l; e4 \" m9 F) @* s: }; k
    SegBw2=imresize(t,[40,20],'nearest');9 m" T& {/ Q  K, U% ?
    if 1==1
! {0 d! D2 P" ?% i, c2 e        kmin=37;
* a% Q6 Z% w+ o4 H! [! V        kmax=40;& j- G$ t5 N) A1 R+ N
    elseif 1>=2&&1<=37 q2 p' h8 z3 U' B. c$ I
        kmin=11;
6 Y7 K( }4 m0 X9 Z2 W. }; G3 p        kmax=36;
! |2 K, J4 n8 A0 ?8 ^% w# S& b    elseif 1>=4&1<=7
. h* A) _  n) c, _0 x' g+ V( Q        kmin=1;, ^- O' [! s5 K$ z' O* |
        kmax=10;
; k; B' f) R! g: m7 _) C  ~, k    end$ u( z' {9 O! E" R9 u3 a) o5 R8 W
    for k2=kmin:kmax7 D$ ^4 f- C8 V( @% \
        fname=stract('字符模板|',liccode(k2),'.jpg');+ e( I& l% I# c- u
        SamBw2=imread(fname);# W0 X1 P4 O5 x. [0 a7 y# n- I) c
        Dm=0;3 }, J. G2 R$ d; x+ k! b/ h
        for k1=1:40
& Y0 I2 g1 ~# `6 G            for11=1:20;
, y2 g& h5 N$ M. B7 \3 F8 B. Y" C            if SegBw2(k1,11)==SamBw2(k1,11)
* Y  V+ z' V( T: ~  {3 P! D                Dm=Dm+1;
: i5 q+ F3 C: `2 A! n  D            end" m  X  Q2 Y! r/ k
        end; W2 G( i, P1 D' K
    end
1 I) `0 v# e9 b    Error(k2)=Dm;
; H) |5 _& O8 U" nend$ u6 J: G2 B9 t& }
Error1=Error(kmin:kmax);8 e/ d6 k1 E: B. B
MinError=max(Error1);
1 O, }/ D* {3 ~: |% {findc=find(Error1==MinError);) @$ I- b' g0 |+ B1 l
Resault(1*2-1)=liccode(find(1)+kmin-1);
; U" _( b) q6 {- c3 c7 @/ ~) iResault(1*2)='';
" Q/ b8 u) K9 U* m  t9 Z( `' tl=1+1;
8 Q2 z) ~1 a+ _2 e) [7 r% et=toc;  J& y& p2 m# `. M( `
Resault;
6 H9 ^) W+ o8 ^7 umesgbox(Resault,'识别结果')3 C6 e6 v' n# x( ~- S
fid=fopen('Data.xls','a+');8 ?+ R8 U, v- ^6 E- D) u( Q/ [2 n, `
fprintf(fid,'%s|r|n',Resault,datestr(now));
: p- R" s! \+ h! z9 k6 ], P" ?( yfclose(fid);
7 [( \3 y/ e  R9 g索引超出矩阵维度。
$ ]6 j$ i! w5 D2 \% ^9 g
  D5 p- \, K! B出错 main (line 152)
/ N- _! i9 m/ c# o. f% M3 }8 {    while sum(d( :,wide+1))~=0
, I% ?( w, t$ [4 e! B

该用户从未签到

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

该用户从未签到

3#
发表于 2020-7-16 16:28 | 只看该作者
根据错误提示:; M5 q+ j% W; H6 ?- P5 m
出错 main (line 152)
. s7 R+ H5 v% G; U/ G    while sum(d(:,wide+1))~=0& f" M) ?/ N, g% T5 W+ O- ^

5 l* v  P3 h/ s1 I, ]! @, r3 w5 `7 W- K8 M3 r8 J4 C
猜测原因是wide+1在某次循环中大于矩阵d的列数;
$ |2 O# `3 K$ e: N% `# C4 d+ t建议在这一行设置断点,然后步进程序,查看wide变量的变化规律以找到超出矩阵维度的原因。

点评

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

该用户从未签到

4#
 楼主| 发表于 2020-7-16 16:45 | 只看该作者
haidaowang 发表于 2020-7-16 16:288 ?5 L# C5 Y3 B8 n# B  R' h
根据错误提示:: b) s0 s1 H, A; R( J
出错 main (line 152)5 k6 }7 _* ?; o7 ^6 x" g/ N
    while sum(d(:,wide+1))~=0

0 H! l. A. a, _, j: i' T4 O% D谢谢啦,我检查一下$ b5 j( Q% |* p3 c
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-27 06:59 , Processed in 0.125000 second(s), 27 queries , Gzip On.

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

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

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