車輛牌照字元識別方法:採用人工神經網路法
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...