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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 qpggup 于 2020-7-16 13:23 编辑
, q% p) O# y% d& {) ^7 H7 J) n" Q. Q' F% N  N- X4 q8 k7 j2 m
做一个基于MATLAB的车牌识别系统,出现索引超出矩阵维度的错误。主函数和自定义函数都写出来了(书上找的),希望大神帮助% y9 h# S4 K6 V& f% q, o
[fn,pn,fi]=uigetfile('AD.jpg','选择图片');
: R8 V3 W8 n& g5 y+ P0 FI=imread([pn fn]);
9 l/ N! O$ Y+ |% S9 Wfigure,
+ g2 X8 j& n0 T% m/ Limshow(I);
, R0 f) U& }; z0 p/ ntitle('原始图像');
) p8 q& Q/ E4 ]6 B+ H8 n4 s$ z# T# HIm1=rgb2gray(I);
. X5 z  l5 P. H0 J5 c- v2 S! ^' ~figure(2),
% I4 e$ c& Q3 F) [" O  |subplot(1,2,1),- I' D4 ]! z& E2 T
imshow(Im1);
: t( H9 V& X* s9 z5 etitle('灰度图');2 \' z2 f& d* `% S% j) c
figure(2),9 |" Y3 y9 y5 Q! E4 {, O1 L2 T
subplot(1,2,2),
: F8 b  t+ b3 Qimhist(Im1);
! C6 O" K5 G& S% X" Ytitle('灰度图的直方图');4 `* v" O' Y: c' P
Tiao=imadjust(Im1,[0.19,0.78],[0,1]);
4 y; j/ h8 g0 X  A& @# R; Mfigure(3),+ b+ d4 C1 m1 s
subplot(1,2,1),
2 \2 j. c- E3 Aimshow(Tiao);" E# p' o  g( Q2 A3 U; h
title('增强灰度图');6 g0 k/ e: Q# s  o
figure(3),! l- O& Y% p) C4 C! y
subplot(1,2,2),( i7 c7 |) R4 F+ A; a
imhist(Tiao);/ a- N3 A# n% `% l5 w* v3 V
title('增强灰度图的直方图');
7 x5 [% C$ K3 l1 o! ~* qIm2=edge(Im1,'sobel',0.15,'both');9 p: a3 L; \% v* h
figure(4),
8 U& ?1 v9 N5 \# l( P: i9 G4 Y6 n) gimshow(Im2);
2 l. W8 G; _. ~# Ititle('sobel算子实现边缘检测')
& B. _& [# ?: f1 use=[1;1;1;];
" B& E% l! P4 c' KIm3=imerode(Im2,se);
1 ^* T4 i! J0 E4 Cfigure(5),3 [3 b0 U8 O4 h& O* {
imshow(Im3);8 g1 k: U1 o8 _
title('腐蚀效果图');
. r4 Q+ ~8 V- G% k2 D( nse=strel('rectangle',[25,25]);
# P9 I" o- q$ P9 E7 @& f% NIm4=imclose(Im3,se);: z5 Z& G8 t+ {  x3 y. ?1 \
figure(6),$ z; j6 P# j0 x) f1 @
imshow(Im4);
3 ~( v  S" @( ]0 w" \/ Y% Wtitle('平滑图像的轮廓');! f7 ]2 K: D5 Q
Im5=bwareaopen(Im4,2000);
6 i# E0 I. |9 R6 J6 nfigure(7),
: M3 Q0 T4 \1 u9 K% X% eimshow(Im5);2 o# w/ n  E- m. H+ A! O8 F6 _
title('移除小对象');& r( @* s% x- a8 D: m- o4 z
[y,x,z]=size(Im5);
/ F/ I" j- J: GIm6=double(Im5);
4 P! n1 T* ~2 V* O' J& C4 z" NBlue_y=zeros(y,1);
2 \2 T* X. C5 ^( B1 C6 dfor i=1:y
/ t/ ~6 n( g4 E6 b    for j=1:x
* h7 k  Z$ U2 L4 @; v. i( X/ s        if(Im6(i,j,1)==1)
1 ~+ s  H7 @9 |  b. J  ]            Blue_y(i,1)=Blue_y(i,1)+1;$ r- g) V8 p: W. u- w" Q+ L
        end, ^% y; H; d( C  A& Q: [' G. m; g6 z
    end' }% Y9 \7 o: T1 c
end! ?( P& Z" G/ N0 S
[temp MaxY]=max(Blue_y);: S" I$ P2 r0 B# _- i
PY1=MaxY;
# _0 P. H6 x; l) ^  ?while((Blue_y( PY1,1)>=5)&&( PY1>1))
# r3 ]5 Q. W! X2 V* d5 [+ K2 W    PY1=PY1-1;+ a# z' u! G0 z: `, A  q
end5 [8 b. R+ n% v
PY2=MaxY;7 u# a. x8 ?) p; c7 w6 i4 f
while((Blue_y( PY2,1)>=5)&&( PY2<y))
. o( k" C6 Z& @9 E- A( i    PY2=PY2+1;* l8 \- U4 x  l" ~4 n3 D
end
( p- V/ c0 _2 B- U* W8 _% LIY=I( PY1: PY2,:,: );
7 H9 a4 z+ ]  S$ Q: cBlue_x=zeros(1,x);
  s* L9 p  |: Z3 ]for j=1:x8 t4 J- V1 O- J3 V9 M
    for i=PY1: PY29 i7 m$ s  _, S0 R) K% L0 ^
        if(Im6(i,j,1)==1)
, C6 [' l; _( \1 j% H            Blue_x(1,j)=Blue_x(1,j)+1;9 ~$ k1 x2 w; E$ u& K
        end
3 w$ Q- \3 t) I' M6 H+ D    end
* I  f$ r! y% g+ [& B; ?! l* Iend7 o6 ]; v0 u9 F3 ?- e
PX1=1;( z( {) Q( Y  j' p; W: i$ `
while((Blue_x(1,PX1)<3)&&( PX1<x))
" _+ ^, B2 c2 B/ T$ d4 ^    PX1=PX1+1;$ i$ _0 b& `- a+ [
end
' ?' s- M4 F4 ^4 aPX2=x;
+ G- }# W" j7 j$ z- ywhile((Blue_x(1,PX2)<3)&&( PX2> PX1))
, J  C) b1 l7 _# s$ G3 ~    PX2=PX2-1;
/ W9 H+ m/ O6 mend  g7 C# I" h7 _( u
PX1=PX1-1;
8 g3 ^6 |- r2 @1 \PX2=PX2+1;& S8 a: ?1 i1 S3 r: m  n( c
dw=I(PY1: PY2-6,PX1 : PX2,: );
) `$ |0 L7 O% s- N3 U. t1 ~9 q: ?figure(8),
0 ?; G. M7 N, J9 [! F6 `2 Esubplot(1,2,1),* ^  U+ b# X9 S/ y5 l
imshow(IY),
, J, w% V( r0 q; Ctitle('垂直方向合理区域');
+ e$ c- c' t9 A9 \, nfigure(8),
- p: p) U( ~; \0 V  Nsubplot(1,2,2),6 N/ }3 n% P3 ~8 t
imshow(dw),# k5 A1 r) Y8 f; R+ H7 p% b
title('定位剪切后的彩色车牌图像')
& C$ I# G9 D) Yimwrite(dw,'dw.jpg');6 w2 [% S& \, J
a=imread('dw.jpg');0 A/ G8 s- b* M& Z, Z
b=rgb2gray(a);
) v5 M2 P3 ?1 U0 w1 Qimwrite(b,'车牌灰度图像.jpg');/ T2 g% p( N7 M0 C8 b( M
figure(9);
- l$ a# K4 P  t# \! H1 w0 rsubplot(3,2,1),
3 r5 @" {/ ?! O5 T& cimshow(b),$ d5 u/ n) E; |; z
title('1.车牌灰度图像')
5 a2 ^# U8 W" A9 ^6 K# `  r& fg_max=double(max(max(b)));
" l  t7 t9 Y6 Bg_min=double(min(min(b)));
5 L% I7 {) j, C$ GT=round(g_max-(g_max-g_min)/3);0 L& @8 _" J0 u8 T! m; d7 E8 k2 G
[m,n]=size(b);* H  \6 [# ?* Z, p! N
d=(double(b)>=T);
% H# b  s( Y. a6 H6 Dimwrite(d,'车牌二值图像.jpg');
# {: W% B! H4 R4 h0 Ffigure(9)1 k# T+ m2 p$ s1 L! C3 L# o4 c+ b
subplot(3,2,2)," o* t2 {4 J, G( S. G! B
imshow(d),
( X2 B, J3 n7 @4 qtitle('2.车牌二值图像')) h% a7 P4 Y* W, ~$ F+ ^
figure(9)
# z# G) z# s1 q, k, t; w5 `subplot(3,2,3),
' l2 L/ D5 ^9 d/ r, eimshow(d),
  e1 j/ D, p3 u- M- G5 d" Dtitle('3.均值滤波前')
- R" D; H" ^& }h=fspecial('average',3);
5 H4 r8 C. t; j2 d. nd=im2bw(round(filter2(h,d)));, \5 D" f& v; X2 G  Q
imwrite(d,'均值滤波后.jpg');' J$ H3 `7 x$ O# z1 N
figure(9)
) j2 m3 g4 p) H' K; rsubplot(3,2,4),, p" e) r8 ]: `: {/ ?; d- n( |
imshow(d),
1 z/ K8 U$ g! O2 G2 _$ ztitle('4.均值滤波后')/ Y1 W" A1 u9 r$ T
se=eye(2);% i3 p  _! d: G! H+ ?
[m,n]=size(d);! K2 B3 g& }* g6 g/ `. r
if bwarea(d)/m/n>=0.365% H3 G, V$ V- O3 a8 q# c  t
    d=imerode(d,se);
8 b* D6 Y  d. t4 {- t5 e, T# ]elseif bwarea(d)/m/n<=0.2355 A  J. {- h" b. z
    d=imdilate(d,se);
* ^' ?. U) G% x) ^8 _! k. Bend; N  Q+ H! p+ D* o* M2 {
imwrite(d,'膨胀或腐蚀后处理后.jpg');. o, L) U* v3 Z  M9 N
figure(9)
" k* l5 D! A6 v/ l- o1 x2 A  ]6 Rsubplot(3,2,5),0 ~: `& V3 c/ l/ P! O
imshow(d),
$ w, \: X* B1 _7 [title('5.膨胀或腐蚀后处理后')1 S" A5 W* M% n/ _& q7 P
d=QieGe(d);- A2 m( H! H6 T* Q5 y
[m,n]=size(d);
& n5 x" a( Y) e( y  Yk1=1;k2=1;s=sum(d);j=1;6 e% `  _. B/ a1 O: y
while j~=n
% p9 L$ d6 t+ H: n8 H' R& t3 t   while s(j)==0;) b& x- @* ^" L8 t: H3 S: W
        j=j+1;
/ _- H& ?3 S8 ^8 F; @: I/ H    end' y2 L* k) x+ k0 b" b# P
        k1=j;
2 p1 R, n2 o: X5 W1 e/ V        while s(j)~=0&&j<=n-1
" F& g) p3 u8 Y$ C$ N0 m5 z            j=j+1;2 _6 {* Y' S, c. k
        end* [' C+ c5 t9 Y6 q; q7 I1 J
        k2=j-1;
* e1 r: o& R# V8 b        if k2-k1>=round(n/6.5)
' n0 n) q( z* e8 r            [val,num]=min(sum(d( :,[k1+5:k2-5])));
8 [" ^6 ^6 W' {            d( :,k1+num+5)=0;- H! q' L2 y; g0 `7 y4 ~3 L5 p
        end% ]' `* M- r% _. s% U0 U
end* o2 U- v' A& f* @
d=QieGe(d);
4 H; z4 h" a; q& h5 ~2 E& sy1=10;y2=0.25;flag=0;word1=[];" h8 [; H( {) n8 U
while flag==0: o2 F1 I1 J# X8 g
    [m,n]=size(d);
! \7 T5 o$ l  K3 C- @- f: f- k    left=1;wide=0;' i" X0 Z& z- `! L: _( h$ j
    while sum(d( :,wide+1))~=0
- i8 g) c$ z" h+ M8 w+ A7 Q        wide=wide+1;6 @$ m' O( B% {' W: t* u
    end; I# O1 }7 G) H) l+ x; a, c
    if wide<y1;5 O: R  S$ ~4 s; h( o
        d( :,[1:wide])=0;5 L! W  ^: N$ z- r" V
        d=QieGe(d);& X% d* C, j; o# z0 D
    else$ _+ C, X0 K. x- P7 l
        temp=QieGe(imcrop(d,[1 1 wide m]));. C& s, V* b+ c6 d
        [m,n]=size(temp);" B6 A) C& K! C% n9 k  W' c
        all=sum(sum(temp));8 _3 T9 W) J+ u9 [7 ~9 a: r( `
        two_thirds=sum(sum(temp(round(m/3):2*round(m/3),: )));. t4 U% U! l9 {: f* U# ^
        if two_thirds/all>2. W, V& a& T% C3 s3 y
            flag=1;word1=temp;
+ W: s7 ^8 y) p5 N4 Y        end
! A' I: m% p/ ]; B        d( :,1:wide)=0;d=QieGe(d);
# |( F$ B8 y7 C4 K; N8 m    end0 f! Y3 N% P. f: ]* t3 A% l
end. ]( k& s0 O# R  F
[word2,d]=FenGe(d);: Z& a9 W: W+ T: g) A. W  s, _
[word3,d]=FenGe(d);, ?# ~$ D) `! x
[word4,d]=FenGe(d);
3 }& X+ G  u+ _6 G9 t[word5,d]=FenGe(d);+ w  M6 N, }- o: X) T0 a4 h
[word6,d]=FenGe(d);
. G' D; q, I/ \2 f; T- a[word7,d]=FenGe(d);
/ Q: z5 X' L- \$ Y1 `0 l9 Cword1=imresize(word1,[40 20]);
* E% m: Q2 |& X% s; m2 U9 Z, W0 \/ Cword2=imresize(word2,[40 20]);; A1 E- p1 M5 P8 y! E& Z5 z. q& r
word3=imresize(word3,[40 20]);
  j* d3 A- n6 i6 z0 kword4=imresize(word4,[40 20]);7 S3 u4 O& E5 Y
word5=imresize(word5,[40 20]);
! U; _/ I  b/ `" s& F: p' F& {word6=imresize(word6,[40 20]);1 F9 ]4 \) I! k7 S
word7=imresize(word7,[40 20]);
1 t/ G( o/ ]- ]* z/ v* G; afigure1 E) }% h/ {$ h5 x# p- V/ d9 ]
subplot(2,7,1),, b& Z9 _& f) \. B
imshow(word1),; X3 a' [# u9 H
title('1');
7 ^- l# i( u% m4 T1 G0 b9 Esubplot(2,7,2),
# q( ?: X1 F6 O! F9 g% d- gimshow(word2),
: p# y/ P0 {6 v+ ntitle('2');- n8 z! `2 t, {& p4 Z
subplot(2,7,3),
: d0 @" U8 m+ s7 |) u7 n% `/ Simshow(word3),
/ G# K% c  C. U5 y+ Q/ c2 ]title('3');5 z5 h0 y5 X; D( A; c- M
subplot(2,7,4),- Z9 i8 z4 i1 B
imshow(word4),9 p* m# q  B4 ?3 d% @! E1 _
title('4');
  G* m9 o3 p0 f7 t3 u9 Q6 Csubplot(2,7,5),; I6 X, l0 N' Q
imshow(word5),
( X, ?  |% S7 h2 mtitle('5');- W3 X; ]' O" w' w$ c% f: B5 o4 E
subplot(2,7,6),8 H& Y2 ?/ A0 q
imshow(word6),
) s9 n( @% {4 r% ~title('6');
& y/ f& m2 W3 T0 Usubplot(2,7,7),% k4 D, @1 t2 d" l
imshow(word7),) g* Z# L5 X4 c: a  c0 h
title('7');
: _3 I7 Z6 m; X0 I  ]imwrite(word,'1.jpg');3 p% }! f% T( [7 m7 M$ S- W, \
imwrite(word,'2.jpg');5 V# W6 H4 o- S2 |. V. |& P
imwrite(word,'3.jpg');
$ E7 |  S  M( zimwrite(word,'4.jpg');+ o# B! v  b# G, k: j1 f6 X
imwrite(word,'5.jpg');- O1 p! ]5 P9 |$ G# b9 }( {
imwrite(word,'6.jpg');
' K2 g! e, q3 L1 m& pimwrite(word,'7.jpg');
# a1 h1 o6 e% G
7 R& Y4 S( O0 M! o* ~/ w' g+ e9 Qliccode=char('0':'9''A':'Z''京津冀晋蒙辽吉黑沪苏浙皖闽赣鲁豫鄂湘粤桂琼渝川贵云藏陕甘青宁新');+ K4 y) G1 b! Q. w* A/ p$ h' G
l=1;
0 P: `! Z  P" v" s0 `$ j; O! T& sfor I=1:7
8 m3 k6 [5 P1 Z# z    ii=int2str(I);: f9 _6 ~' H+ P- ?5 u4 P7 J1 a
    t=imread([ii,'.jpg']);* J) I  u4 l8 c5 ?" |$ v2 M$ N
    SegBw2=imresize(t,[40,20],'nearest');+ h( m4 `6 B% ?' C" m
    if 1==1/ {: c) H5 k2 d$ T. l
        kmin=37;
8 Q# @! R, F: V7 ?- a        kmax=40;
8 S, q* x7 q2 u    elseif 1>=2&&1<=3
! z* {! U7 a0 L& ~  ^1 d        kmin=11;* z% Y4 l; L" _3 S& S
        kmax=36;
8 [" |2 z. ^2 E' R1 p! ?    elseif 1>=4&1<=7
/ [) O' T& b+ N8 J0 v9 T        kmin=1;# m' K- N( Q; g2 n5 Y
        kmax=10;
- @/ q) G' V! c( H5 R    end
' u* O( m3 Q0 S7 g. `    for k2=kmin:kmax
. ]6 Z) N% B5 \7 H. y8 B! p% t        fname=stract('字符模板|',liccode(k2),'.jpg');! H# U  E6 }* X" I0 t' h! @: b
        SamBw2=imread(fname);
0 r. j% d2 ?+ S# @9 y        Dm=0;
* i% e- M9 Q+ T1 D: o0 D6 Q5 W        for k1=1:405 m: P& z  ]& `1 J; `
            for11=1:20;
9 H+ Q- I* R6 i4 y5 L- P* L            if SegBw2(k1,11)==SamBw2(k1,11)
5 A9 `+ t8 ]; j) h! ]0 I2 r. Q                Dm=Dm+1;
9 O" R9 {3 ^1 u! v4 |7 ~            end
+ X/ g* M4 k# O5 Z* ~% D        end) E7 J. k' n) d% a+ J( ~' o" q+ H# n
    end; A' ~- U& ~$ ^0 B5 b
    Error(k2)=Dm;
& n) n  h/ s% j% i8 G, p3 Pend. z; r& I4 ~0 }! u9 h* A8 j* y
Error1=Error(kmin:kmax);/ X% m0 b# H- ^
MinError=max(Error1);8 O! `& W% }3 c, H) }% ?2 E
findc=find(Error1==MinError);, N. `/ e- W6 a- @2 W) ]
Resault(1*2-1)=liccode(find(1)+kmin-1);  r7 l2 l, Y. Q$ M3 @5 v5 W' P0 a
Resault(1*2)='';" h9 }3 N$ ~9 C; H$ Y
l=1+1;+ f- G7 M$ i* F$ R7 E
t=toc;# }* J! w- J# j$ U( ?' y5 H4 L+ W
Resault;
0 o- X5 F$ p# p1 u% fmesgbox(Resault,'识别结果')& }9 G9 x# I$ H
fid=fopen('Data.xls','a+');
. Y( X. M' ~+ d: M6 {7 @3 r# H7 \2 yfprintf(fid,'%s|r|n',Resault,datestr(now));$ \/ W3 ~8 p" V3 t1 \
fclose(fid);
1 [" L8 f1 H4 V! @9 S8 ~索引超出矩阵维度。' Q; c- n9 ~# @# N( e* R. j" Z' b

7 m3 i* |- G9 D! L3 K: T出错 main (line 152)
* `8 v* p9 Y6 Z5 G( s    while sum(d( :,wide+1))~=0; j$ G0 D6 I/ v) ^3 w9 a) G3 G. [

该用户从未签到

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

该用户从未签到

3#
发表于 2020-7-16 16:28 | 只看该作者
根据错误提示:( \1 N, L6 v; I/ w1 A2 |
出错 main (line 152)
5 j6 N& D4 G. i8 x    while sum(d(:,wide+1))~=0( d4 T* ~2 u* y7 ]7 A6 c: c

; b6 |% F3 `- P9 Z+ R4 _& c9 X- P& J) o4 t3 h$ z/ ]
猜测原因是wide+1在某次循环中大于矩阵d的列数;; [/ A8 ~. B! D. G; X
建议在这一行设置断点,然后步进程序,查看wide变量的变化规律以找到超出矩阵维度的原因。

点评

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

该用户从未签到

4#
 楼主| 发表于 2020-7-16 16:45 | 只看该作者
haidaowang 发表于 2020-7-16 16:28
/ H3 K+ z6 m4 |! _& y3 n: n+ o' z4 I根据错误提示:% o. L& Z4 [6 ^: E9 \4 R
出错 main (line 152)
" M' L4 p- v. I0 u- R2 J    while sum(d(:,wide+1))~=0
, O- Z3 f0 y& G4 F# s1 w
谢谢啦,我检查一下
. S. N+ l. |5 g! X
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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