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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 qpggup 于 2020-7-16 13:23 编辑 " R8 W& r5 ^( ^  H. Z
- h- @& B( q$ X" @: p
做一个基于MATLAB的车牌识别系统,出现索引超出矩阵维度的错误。主函数和自定义函数都写出来了(书上找的),希望大神帮助/ F3 d/ A6 U/ ]% |
[fn,pn,fi]=uigetfile('AD.jpg','选择图片');
9 `, Z: P* B5 pI=imread([pn fn]);
. O" `0 v5 v( f$ x+ y/ l* A' Qfigure,
% b6 v* n* w( |8 \# Cimshow(I);
) b6 ~+ I6 a& t# M! g2 \0 G8 gtitle('原始图像');
" K0 ?1 J2 n: Z$ ?, xIm1=rgb2gray(I);
, ?' d7 I1 M& q9 y3 ufigure(2),: Z2 c0 R- w# F$ \
subplot(1,2,1),( D2 o6 Y& A% m0 A+ I
imshow(Im1);: E3 k- ^  ?- B4 x4 Z# v. M
title('灰度图');1 v, s9 [# R+ U3 |: B$ P
figure(2),
4 }0 N, A3 j& ]6 q5 z7 N4 psubplot(1,2,2),+ v* Z5 V! F# y
imhist(Im1);3 V$ k: X4 D9 U) e% A
title('灰度图的直方图');
! {4 N# m* m# q: P" A: I* f! W$ _Tiao=imadjust(Im1,[0.19,0.78],[0,1]);
0 w8 x% x/ R6 [" Y7 Cfigure(3),/ k$ y7 K! g9 Y
subplot(1,2,1),& Q" n$ R7 Z% i+ H5 z
imshow(Tiao);
( c5 ]- w  D: ptitle('增强灰度图');
2 N' P' v6 X4 \8 D  Qfigure(3),3 ?* Z5 o" F- ~$ K0 a+ c/ h
subplot(1,2,2),
. d, ^, z7 D- ^/ y0 v; bimhist(Tiao);
" g& J, z. i+ q" rtitle('增强灰度图的直方图');; r1 c* Y7 \2 v! I1 N1 A
Im2=edge(Im1,'sobel',0.15,'both');
5 X9 n8 {* L  vfigure(4),! F+ D: w1 i" S9 {, {
imshow(Im2);
0 F+ Y! b. e6 q; D% |title('sobel算子实现边缘检测')% a+ N/ r6 I; d0 z0 I
se=[1;1;1;];
! Y9 W* B. U! W8 b  ?7 Y# OIm3=imerode(Im2,se);2 U, H& J, c8 Y4 ^( L2 z( @: h9 W
figure(5),5 j/ h, M% U, O/ \' A
imshow(Im3);- o$ q  x; N; X4 n$ r
title('腐蚀效果图');6 e4 _: j+ b7 `3 {, N
se=strel('rectangle',[25,25]);
: e! t: |3 {% U/ A* h+ lIm4=imclose(Im3,se);% T8 w! B. v8 x
figure(6),
! G, {8 y. {/ I# Z. Simshow(Im4);  w/ l* c! i, T0 O
title('平滑图像的轮廓');$ o- P6 I- b/ i8 _9 e3 f
Im5=bwareaopen(Im4,2000);: `" Y# r+ W* |( ]
figure(7)," Z1 t: _; `! N
imshow(Im5);/ m1 W9 r5 U' ~
title('移除小对象');
4 }7 ?. k( P9 `; ?[y,x,z]=size(Im5);- G$ g) H6 U& J' s- |" B6 A
Im6=double(Im5);& }* \: g, I1 |) O+ G8 P& A, e
Blue_y=zeros(y,1);& Z5 r6 j" j/ [% P% b# U) J: Z) |
for i=1:y
2 I2 v! b7 [4 p: i7 t* l- N    for j=1:x2 h0 d# M6 z, J( u9 [' @0 S* b7 \4 N
        if(Im6(i,j,1)==1)
0 U# `3 k" D9 [& R  N, U. r            Blue_y(i,1)=Blue_y(i,1)+1;
  d$ L3 _* a4 U- I, H- D        end: y  x' W+ B% H  P
    end. @9 u: x: z; q3 n+ J
end9 L0 e2 ?8 ?6 c; M9 ]% `& I
[temp MaxY]=max(Blue_y);0 I: z/ j" b6 O- ~% c# O+ z* k0 g! S
PY1=MaxY;
" U/ C" T8 U/ q! X) Nwhile((Blue_y( PY1,1)>=5)&&( PY1>1)), u7 X3 `3 r- I
    PY1=PY1-1;
, z, s2 G1 A; b9 }$ B1 [' p! r/ hend
( X( a0 C0 q& l2 b$ Q0 g2 f9 TPY2=MaxY;
0 q1 [0 j2 G. D0 A& k8 ywhile((Blue_y( PY2,1)>=5)&&( PY2<y))
# G. s/ M- Y* s5 ^    PY2=PY2+1;
7 z' l, ~* V: cend7 R) G2 a5 z- G6 m8 n
IY=I( PY1: PY2,:,: );
0 k; R! w7 O, I" c! K/ G" y5 wBlue_x=zeros(1,x);# Q9 U6 U2 h( l- ]6 W# `( i
for j=1:x
8 V; f' S, O9 K1 k: A3 o    for i=PY1: PY2
4 \8 O0 t& A" g% ^% y* Q9 W        if(Im6(i,j,1)==1)! O, h- K& U5 Q: M
            Blue_x(1,j)=Blue_x(1,j)+1;
& C1 V# }0 a( c5 @5 ^. z9 [* G        end
  O  i" d9 x1 D8 n. C) ]4 J    end( a+ q$ j- Z/ i# F5 q
end) g! [4 I. s8 I" x& W! v" C' F% z
PX1=1;4 e$ E& [2 ~* o4 r
while((Blue_x(1,PX1)<3)&&( PX1<x))! e! [" h+ [. ~$ c$ K" C5 K
    PX1=PX1+1;
1 C* Y% J9 C7 f1 w$ G" H- Q: w0 Dend
; [2 q# L( F, I0 s' B# vPX2=x;
2 `. L& Z( E) g3 w9 dwhile((Blue_x(1,PX2)<3)&&( PX2> PX1))
) A5 ^$ X- \. o' J- m    PX2=PX2-1;
# b! E( O' i5 b# v6 d- ?. q1 wend
, V7 ^4 s# l* o9 jPX1=PX1-1;3 r" Q" j6 m& A; k  A& `9 H) G
PX2=PX2+1;6 ^- C3 c& w, `. i" j
dw=I(PY1: PY2-6,PX1 : PX2,: );- l6 m* _% f9 s* B* o
figure(8),
8 T. [, s# l! J/ n, w6 o- Lsubplot(1,2,1),* y! p) @4 d5 }% o( q/ J
imshow(IY),  d5 u  c- C0 q' c: {( U. \
title('垂直方向合理区域');: R4 A5 H0 @1 v% y) ?
figure(8),
4 z3 t9 Q% b; z/ v3 T, `subplot(1,2,2),$ j& K% l  G. ]
imshow(dw),
& o- z) K- K; Gtitle('定位剪切后的彩色车牌图像')0 z; s6 X, n6 d* Q- B
imwrite(dw,'dw.jpg');
, e# e( K2 d' c! Sa=imread('dw.jpg');& W1 ]5 T/ R5 X. P
b=rgb2gray(a);: j0 v7 p5 ]& O2 f
imwrite(b,'车牌灰度图像.jpg');
( Z5 [9 S. K, B4 Pfigure(9);  u: a3 A/ d; w: }4 A% U* D) u
subplot(3,2,1),
$ H! R1 z; B; Z% wimshow(b),* H( y3 c- L  V2 C' k
title('1.车牌灰度图像')
  _& M6 A" w& e1 P1 vg_max=double(max(max(b)));, b3 _4 s% N) L. Y
g_min=double(min(min(b)));2 Y$ i, G# r5 G; [
T=round(g_max-(g_max-g_min)/3);; A( k: D$ b/ N3 b  N; s0 B4 p, T
[m,n]=size(b);
. ^7 ]2 Q4 J+ e2 U* V) |d=(double(b)>=T);
8 V8 |! \& O' X6 ^/ `. `0 h2 w1 C. dimwrite(d,'车牌二值图像.jpg');
. w& p& r. S, A, ]# C/ \: bfigure(9)
, O/ L/ v# Q8 ?subplot(3,2,2),8 P( i' u! q( D! [- @
imshow(d),5 G. [: u* d9 M
title('2.车牌二值图像')% k3 v/ g9 m5 l- P$ [0 e2 _
figure(9)
- h! m; ^& C& g# W2 {9 Zsubplot(3,2,3),  d. S5 r* |  D
imshow(d),5 G9 b4 `& U6 h' \
title('3.均值滤波前')
  {. R6 c: r% |5 s5 Nh=fspecial('average',3);
& {4 t7 }0 l( t* M6 N: Sd=im2bw(round(filter2(h,d)));
% I, N7 J" g9 c- t; C; Jimwrite(d,'均值滤波后.jpg');
+ z+ k) b6 H! u+ o* Q) A0 W( a  ]figure(9)
' n8 ~; ^. j, M! H/ ysubplot(3,2,4),' u5 w. `& \% P+ I% j7 O+ ~6 s
imshow(d),& a3 R; X; a) {" \
title('4.均值滤波后')
( E# R+ }" L" rse=eye(2);" p( |3 U) O4 s; M
[m,n]=size(d);* B& o+ G$ e7 c( p- c
if bwarea(d)/m/n>=0.365
8 g4 D- n$ Q8 E    d=imerode(d,se);
  {: T1 t, s5 a. a, [elseif bwarea(d)/m/n<=0.235
( C4 N  l; l  H6 g    d=imdilate(d,se);
/ W# u: [& v' a! bend
, x0 w- O: o, g0 g! F- ^; h" Eimwrite(d,'膨胀或腐蚀后处理后.jpg');
9 H3 R' [' D/ o1 n# z. Sfigure(9)
' Z1 H9 H$ V1 \' G$ x7 I% _subplot(3,2,5),
2 K* D" m8 w$ n1 N2 ?imshow(d),
9 q4 ?0 v5 o; P: ]% Ztitle('5.膨胀或腐蚀后处理后')
2 u, x( s) s' u; `d=QieGe(d);
  A6 i; W. ~6 f# _$ C[m,n]=size(d);! s5 n' h2 ]% _1 q: B0 r* i6 ~
k1=1;k2=1;s=sum(d);j=1;
5 f/ @: c+ I: h: f5 M" Uwhile j~=n. s( b9 c6 Q( F  U6 s* J
   while s(j)==0;- b3 e2 _# F) `6 _) p
        j=j+1;( }' A6 I2 g" ^! r
    end. S2 S$ x0 f& b1 i* ]+ s* d$ F. Y
        k1=j;
1 T1 T' O( J2 o        while s(j)~=0&&j<=n-1
7 Y2 P  A/ G) E            j=j+1;" @' ]( r1 ?. {6 e1 k! J) e. V
        end
" g9 H4 Y% J& U$ S        k2=j-1;! {$ u& b7 f+ g( t0 l' O0 g$ T7 W
        if k2-k1>=round(n/6.5)' }0 K1 p! [: u  u+ k2 H0 ?
            [val,num]=min(sum(d( :,[k1+5:k2-5])));
1 J( p% U8 ?+ q+ {            d( :,k1+num+5)=0;
7 R! n  x) ]# \7 G& l9 Q4 q, s        end
( p" s* V: a' Z& e5 e9 X, l# _end
  _/ W1 {( p1 ud=QieGe(d);
7 |7 S6 m' X. m. n. m* Py1=10;y2=0.25;flag=0;word1=[];/ @; E% L# C( K, F- F5 b
while flag==0: I6 g* d. G3 W. v
    [m,n]=size(d);
# q5 F' i3 _7 N% s    left=1;wide=0;
5 D  i' v) `5 L8 g+ ^$ R) S) i    while sum(d( :,wide+1))~=0
& v1 U  X: }) N5 C. Q        wide=wide+1;
6 T8 _/ [  Z% m+ N* m2 _* e; X    end; R+ j% M' k0 W
    if wide<y1;, j# m- N5 e& N1 A8 b. C
        d( :,[1:wide])=0;
% M: ?4 E2 `: j- z        d=QieGe(d);
6 |+ J/ ]& g9 Q! u    else
* ^; \0 `! p9 b        temp=QieGe(imcrop(d,[1 1 wide m]));" J* u  ~- z* z4 u$ ~: {' t
        [m,n]=size(temp);
* g1 ?+ P& W4 [* ]9 `        all=sum(sum(temp));
% S6 ]5 h, k: H0 `! H( @: z        two_thirds=sum(sum(temp(round(m/3):2*round(m/3),: )));) ^) C6 B# i  r
        if two_thirds/all>2
7 z9 x! K: _- D6 R% i; z6 p            flag=1;word1=temp;
: r, f) z( @! }" p# c$ s5 P6 m4 C        end$ q) Y3 Y. J/ \6 `7 Y3 Q
        d( :,1:wide)=0;d=QieGe(d);- Z+ Y7 V* N9 @6 g
    end! K3 F! [4 h% ~+ x, }5 Z
end
" J6 p8 k3 k2 l; i[word2,d]=FenGe(d);
# R4 r8 b3 P4 q  A[word3,d]=FenGe(d);
7 J1 ]3 r% I! {' B3 N[word4,d]=FenGe(d);4 k5 I" s- k, q" I- S& y$ x
[word5,d]=FenGe(d);
: {0 p# }2 C5 [4 n) Q# L" `[word6,d]=FenGe(d);. o7 i+ h. c$ e/ [
[word7,d]=FenGe(d);+ R8 {& k( C- c+ P$ j* D' A3 r
word1=imresize(word1,[40 20]);' K; A. D/ [- a3 w
word2=imresize(word2,[40 20]);0 U) w! y7 T+ `- f6 c' }6 ?
word3=imresize(word3,[40 20]);
1 g! d* G# x5 _. _% X  C; k- iword4=imresize(word4,[40 20]);
, T7 X) U* \7 b0 sword5=imresize(word5,[40 20]);
8 g# S* a  o1 D' u8 }word6=imresize(word6,[40 20]);+ D) |2 J3 A. w- L) C4 l
word7=imresize(word7,[40 20]);
' W( y2 V; O! I; Q5 nfigure8 a/ J2 u) W9 K/ F) ~) k
subplot(2,7,1),
* g5 C$ y) b; ]6 E, W8 Kimshow(word1),: @- P4 S2 j: ]1 O' e7 e( W8 C3 t% e
title('1');
! W2 ]. Y9 h5 X7 i4 n* g  Asubplot(2,7,2),! O, c! H9 N% J) c0 W
imshow(word2),0 I8 `7 [  z/ ~0 Q( V; R
title('2');" T3 F( I# ]& R9 e* z
subplot(2,7,3),
1 R8 v/ X8 j! G2 G, iimshow(word3),
; t% U3 w' T$ m# c: x9 A/ ctitle('3');
) \# |4 o' Q. c9 Gsubplot(2,7,4),! g, g4 m1 Z: l
imshow(word4),7 x( ~4 |+ Q' ]& A& J7 N
title('4');
7 o% Z+ g- Y! n- `0 Bsubplot(2,7,5),
1 \* o/ p( R- K: o% u/ O1 [imshow(word5),0 S3 h) {& {, F: h
title('5');' o8 P8 y, O% |* D2 t
subplot(2,7,6),
4 r" d! ~/ b+ V% F( T2 Iimshow(word6),( i1 t( K' b6 Z) s7 A  U
title('6');* o4 J/ {& F* N  P/ ~- K6 M
subplot(2,7,7),
* n; p5 C. q# P1 V+ P! U5 Eimshow(word7)," |; |9 G! @1 b
title('7');
8 Z# j9 b7 D( d& B: a% }" A  x5 pimwrite(word,'1.jpg');
5 }5 @+ w- x+ m- p; s  s. }( vimwrite(word,'2.jpg');$ ?  G4 g; ~5 p; _, d
imwrite(word,'3.jpg');0 }$ O- y' Q9 K9 Y
imwrite(word,'4.jpg');
$ _' `1 f* O1 z8 D+ dimwrite(word,'5.jpg');
, L9 ?! F: X1 Q# O! F' r' ~imwrite(word,'6.jpg');$ V1 j; h& h6 m* B
imwrite(word,'7.jpg');
1 n; {) w! [7 a- Z! d- M! y/ K3 ]8 y7 a% I& ~" @5 f+ ~5 r0 V
liccode=char('0':'9''A':'Z''京津冀晋蒙辽吉黑沪苏浙皖闽赣鲁豫鄂湘粤桂琼渝川贵云藏陕甘青宁新');5 G+ z0 v7 ~5 d" I  y
l=1;
+ |2 F9 e8 \+ C2 Vfor I=1:7
- O. ~1 u0 j7 {" D9 P    ii=int2str(I);( y8 O' ~7 f) x
    t=imread([ii,'.jpg']);
8 X* C9 E; @$ w: ?! `    SegBw2=imresize(t,[40,20],'nearest');
& R* [7 W8 ~! R9 t9 {& U    if 1==1
  G# V1 F" H- Y+ H0 H5 u        kmin=37;
* p7 W; u, b- w% q. s  M        kmax=40;
9 R2 l. O% r) T- j7 P    elseif 1>=2&&1<=3* C' c" C/ u6 a& {9 ^$ W4 M
        kmin=11;) s. C4 R0 u# G% f! t
        kmax=36;
6 `5 ~8 H* p: N  a" J    elseif 1>=4&1<=7+ s) X! }7 t0 ^8 R+ [
        kmin=1;
: w$ L, b# F* I; i/ w/ `        kmax=10;7 _0 [3 h9 M3 L, f3 F
    end; w/ j: [3 x; ?
    for k2=kmin:kmax
8 ~( P- [) a( S  `! G8 {        fname=stract('字符模板|',liccode(k2),'.jpg');3 a' L4 o) ?2 ~' F7 a
        SamBw2=imread(fname);
9 K  Z) Q( [# E6 u+ f; q( m' X: A        Dm=0;! _( _1 Y) x/ S0 M
        for k1=1:40. p1 |# J& u2 {6 j$ Q" z) p
            for11=1:20;6 H, }* w* p2 H/ d; L% A  F* D3 w6 r
            if SegBw2(k1,11)==SamBw2(k1,11)4 x3 H) a, l! d5 N) g3 Z# W
                Dm=Dm+1;; A) M* z* J( H$ |6 `' b! H" R
            end
* Q( N0 C' l1 Q; O# v$ {0 I' l( Y        end  V# q% N0 v1 h  E0 G0 N
    end
6 @4 p! E3 N/ O, [* x; r    Error(k2)=Dm;& r. S$ v' h5 w0 S% `4 `7 L+ Z
end' D1 a; F* h. Z: x  w$ }. U+ I
Error1=Error(kmin:kmax);
5 B* e7 E/ @- Y- u- q( [8 T" JMinError=max(Error1);
( A0 D  d# B. |4 M/ O0 ufindc=find(Error1==MinError);
3 Z$ y' p1 U. @. C2 V/ ^) qResault(1*2-1)=liccode(find(1)+kmin-1);
, f" J7 H3 o% }* Y4 ?Resault(1*2)='';' N4 m+ f  M% B6 l
l=1+1;
$ |' n& ~' Y, S4 N5 @( B& t5 `7 zt=toc;
4 p- L7 k; r7 Y/ A! e- ^' oResault;
: l& }0 t) Y+ P) u. f$ j3 D( ^7 h/ V- ]mesgbox(Resault,'识别结果')2 J. F4 x3 z. [
fid=fopen('Data.xls','a+');
) Y) g: @: Q. x! L1 n3 W0 t! `! ofprintf(fid,'%s|r|n',Resault,datestr(now));
- y0 b9 \# |; \) j) G* H: qfclose(fid);/ E4 ^% L2 a8 O; N0 m* t# G  R
索引超出矩阵维度。
4 ]1 W* {- c, f; f9 q" a# w% a0 d: Z+ y( P2 q# s, }) N7 H1 O* h
出错 main (line 152)
3 Y- L0 D) [3 X! P- x9 y$ `    while sum(d( :,wide+1))~=0
; D+ t+ M( t7 g( c% ~

该用户从未签到

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

该用户从未签到

3#
发表于 2020-7-16 16:28 | 只看该作者
根据错误提示:3 A% H, D8 J/ W) z! C* ?. f
出错 main (line 152)3 W9 D: s6 V& {% o% y& J2 ~
    while sum(d(:,wide+1))~=00 u* D% `4 i( |
/ P( d3 L3 F6 K: A3 z
' N8 p( _1 ?* i% o
猜测原因是wide+1在某次循环中大于矩阵d的列数;2 O+ J) P1 m6 c. [! j9 s4 E
建议在这一行设置断点,然后步进程序,查看wide变量的变化规律以找到超出矩阵维度的原因。

点评

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

该用户从未签到

4#
 楼主| 发表于 2020-7-16 16:45 | 只看该作者
haidaowang 发表于 2020-7-16 16:289 v! _/ W8 G& c4 I+ f6 C/ Z' g
根据错误提示:9 w) G* |* @: |1 D
出错 main (line 152)
+ X/ q# h( N0 G    while sum(d(:,wide+1))~=0
7 A3 q: g2 E9 \$ Z
谢谢啦,我检查一下  z; Q  V1 H" {! B. {( T
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 17:26 , Processed in 0.203125 second(s), 28 queries , Gzip On.

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

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

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