車輛牌照字元識別 matlab

2021-07-16 18:45:41 字數 4443 閱讀 9504

車輛牌照字元識別方法:採用人工神經網路法

i0=pretreatment(imread('0.bmp')); 

i1=pretreatment(imread('1.bmp'));

i2=pretreatment(imread('2.bmp'));

i3=pretreatment(imread('3.bmp'));

i4=pretreatment(imread('4.bmp'));

i5=pretreatment(imread('5.bmp'));

i6=pretreatment(imread('6.bmp'));

i7=pretreatment(imread('7.bmp'));

i8=pretreatment(imread('8.bmp'));

i9=pretreatment(imread('9.bmp'));

i10=pretreatment(imread('a.bmp'));

i11=pretreatment(imread('b.bmp'));

i12=pretreatment(imread('c.bmp'));

i13=pretreatment(imread('d.bmp'));

i14=pretreatment(imread('e.bmp'));

i15=pretreatment(imread('f.bmp'));

i16=pretreatment(imread('g.bmp'));

i17=pretreatment(imread('h.bmp'));

i18=pretreatment(imread('j.bmp'));

i19=pretreatment(imread('k.bmp'));

i20=pretreatment(imread('l.bmp'));

i21=pretreatment(imread('m.bmp'));

i22=pretreatment(imread('n.bmp'));

i23=pretreatment(imread('p.bmp'));

i24=pretreatment(imread('q.bmp'));

i25=pretreatment(imread('r.bmp'));

i26=pretreatment(imread('s.bmp'));

i27=pretreatment(imread('t.bmp'));

i28=pretreatment(imread('u.bmp'));

i29=pretreatment(imread('v.bmp'));

i30=pretreatment(imread('w.bmp'));

i31=pretreatment(imread('x.bmp'));

i32=pretreatment(imread('y.bmp'));

i33=pretreatment(imread('z.bmp'));

p=[i0',i1',i2',i3',i4',i5',i6',i7',i8',i9',i10',i11',i12',i13',i14',i15',i16',i17',i18',i19',i20',i21',i22',i23',i24',i25',i26',i27',i28',i29',i30',i31',i32',i33'];

t=eye(34,34);

net=newff(minmax(p),[2000,300,34],,'trainrp');%minmax()求矩陣每一行向量的最大值和最小值

%函式newff建立乙個可訓練的前饋網路。這需要4個輸入引數。

%第乙個引數是乙個rx2的矩陣以定義r個輸入向量的最小值和最大值;

%第二個引數是乙個設定每層神經元個數的陣列;

%第三個引數是包含每層用到的傳遞函式名稱的細胞陣列;

%最後乙個引數是用到的訓練函式的名稱。

net.inputweights.initfcn='randnr';

net.inputweights.initfcn='randnr';

net.

trainparam.epochs=8000;

net.

trainparam.show=50;

net.

trainparam.goal=0.0000000001;

net=init(net);%初始化權重和偏置的工作用命令init來實現。這個函式接收網路物件並初始化權重和偏置後返回網路物件。

dw=location(i);%車牌定位,見上上篇文章

[pin0,pin1,pin2,pin3,pin4,pin5,pin6]=stringsplit(dw);%字元分割,見上篇文章

pin0=pretreatment(pin0);

pin1=pretreatment(pin1);

pin2=pretreatment(pin2);

pin3=pretreatment(pin3);

pin4=pretreatment(pin4);

pin5=pretreatment(pin5);

pin6=pretreatment(pin6);

p0=[pin0',pin1',pin2',pin3',pin4',pin5',pin6'];

for i=2:7

t0=sim(net,p0(:,i));%t0為p0(:,i)輸入神經網路得到的輸出,t0為34x1的列向量

t1=compet(t0);% compet是神經網路的競爭傳遞函式,用於指出矩陣中每列的最大值。對應最大值的行的值為1,其他行的值都為0

d=find(t1==1)-1;

if(d==10)

str='a';

elseif(d==11)

str='b';

elseif(d==12)

str='c';

elseif(d==13)

str='d';

elseif(d==14)

str='e';

elseif(d==15)

str='f';

elseif(d==16)

str='g';

elseif(d==17)

str='h';

elseif(d==18)

str='j';

elseif(d==19)

str='k';

elseif(d==20)

str='l';

elseif(d==21)

str='m';

elseif(d==22)

str='n';

elseif(d==23)

str='p';

elseif(d==24)

str='q';

elseif(d==25)

str='r';

elseif(d==26)

str='s';

elseif(d==27)

str='t';

elseif(d==28)

str='u';

elseif(d==29)

str='v';

elseif(d==30)

str='w';

elseif(d==31)

str='x';

elseif(d==32)

str='y';

elseif(d==33)

str='z';

else

str=num2str(d);

endswitch i

case 2

str1=str;

case 3

str2=str;

case 4

str3=str;

case 5

str4=str;

case 6

str5=str;

otherwise

str6=str;

endends=strcat('滬',str1,str2,str3,str4,str5,str6);

figure();

imshow(dw),title(s);

function

inp=pretreatment

(i)%此函式是將字元均轉換成一維向量

if isrgb(i)

i1=rgb2gray(i);

else

i1=i;

endi1=imresize(i1,[20,10]);%歸一化

i1=im2bw(i1,0.9);

[m,n]=size(i1);

inp=zeros(1,m*n);

forj=1:n

fori=1:m

inp(1,m*(j-1)+i)=i1(i,j);

endend

Shape Context字元識別

關於shape context的文章,網上已經很多了。在這裡實現一下shape context描述子的視覺化。include hogimage.h using namespace std using namespace hog hogimage oimg struct color color col...

OCR字元識別

ocr optical character recognition 全稱光學字元識別技術,在halcon中,ocr常被用來分割區域及讀取識別影象中的字元含義。字元識別ocr原理及應用實現 ocr指電子裝置 掃瞄器 數位相機等 檢測在紙上列印的字元,通過檢測暗亮的模式確定其形狀,然後用字元識別方法將形...

字元識別 CRNN CTC

文字檢測過程分兩步,第一步為檢測出文字所在的位置,第二步根據檢測框裡的內容進行文字識別。第一部分文字檢測,這裡介紹了sast演算法 一 背景知識 1 迴圈神經網路rnn 迴圈神經網路recurrent neural network與其他cnn網路不同之處在於rnn每一點的輸出依賴於之前的結果。rnn...