⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tuixiang.m

📁 使用matlab对手写的字母进行辨识
💻 M
字号:
clear;clc;
raw = imread('sample1.jpg');
raw = im2bw(raw);
raw = imcomplement(raw);    
se = strel('disk',6);   
raw = imclose(raw, se);
raw = bwlabel(raw); 
picture = regionprops(raw, 'Image');    

for i = 1:50    
    picture(i, 1).Image = imresize(picture(i, 1).Image, [30 30]);
end

  white = 1; 

xypicture = zeros(50, 60);   
for i = 1:50   
    for j = 1:30   
        for k = 1:30    
            if picture(i, 1).Image(j, k) == white
                xypicture(i,j) = xypicture(i, j) + 1;
            end
            if picture(i, 1).Image(k, j) == white
                xypicture(i,j+30) = xypicture(i, j+30) +1;  
            end
        end
    end
end

p = xypicture;
for i=1:50
  p(i,:)=(p(i,:)-min(p(i,:)))/(max(p(i,:))-min(p(i,:)));
end

P = [p(1,:);  p(2,:);  p(3,:);  p(4,:); p(5,:); p(6,:); p(7,:); p(8,:); p(9,:); p(10,:);
     p(11,:); p(12,:); p(13,:); p(14,:);p(15,:);p(16,:);p(17,:);p(18,:);p(19,:);p(20,:);
     p(21,:); p(22,:); p(23,:); p(24,:);p(25,:);p(26,:);p(27,:);p(28,:);p(29,:);p(30,:);
     p(31,:); p(32,:); p(33,:); p(34,:);p(35,:);p(36,:);p(37,:);p(38,:);p(39,:);p(40,:);
     p(41,:); p(42,:); p(43,:); p(44,:);p(45,:);p(46,:);p(47,:);p(48,:);p(49,:);p(50,:)]';

t = [1 0 0 0 0;1 0 0 0 0;1 0 0 0 0;1 0 0 0 0;1 0 0 0 0;1 0 0 0 0;1 0 0 0 0;1 0 0 0 0;1 0 0 0 0;1 0 0 0 0;
     0 1 0 0 0;0 1 0 0 0;0 1 0 0 0;0 1 0 0 0;0 1 0 0 0;0 1 0 0 0;0 1 0 0 0;0 1 0 0 0;0 1 0 0 0;0 1 0 0 0;
     0 0 1 0 0;0 0 1 0 0;0 0 1 0 0;0 0 1 0 0;0 0 1 0 0;0 0 1 0 0;0 0 1 0 0;0 0 1 0 0;0 0 1 0 0;0 0 1 0 0;
     0 0 0 1 0;0 0 0 1 0;0 0 0 1 0;0 0 0 1 0;0 0 0 1 0;0 0 0 1 0;0 0 0 1 0;0 0 0 1 0;0 0 0 1 0;0 0 0 1 0;
     0 0 0 0 1;0 0 0 0 1;0 0 0 0 1;0 0 0 0 1;0 0 0 0 1;0 0 0 0 1;0 0 0 0 1;0 0 0 0 1;0 0 0 0 1;0 0 0 0 1]';

S1 = 23; 
[R, Q] = size(P);
[S2, Q] = size(t);
[W1, B1] = rands(S1, R);
[W2, B2] = rands(S2, S1); 

ErrGoal = 0.03;     
MaxEpoch = 4000;      
lr = 0.02;           

for epoch = 1:MaxEpoch
    A1 = tansig(W1 * P, B1);
    A2 = logsig(W2 * A1, B2); 
    E = t - A2; 
    SSE = sumsqr(E);  
    if SSE < ErrGoal
        epoch = epoch - 1;
        break;
    end
    D2 = deltalog(A2, E);
    D1 = deltatan(A1, D2, W2);
    [dW1, dB1] = learnbp(P, D1, lr);
    [dW2, dB2] = learnbp(A1, D2, lr);
    W1 = W1 + dW1;
    B1 = B1 + dB1;
    W2 = W2 + dW2;
    B2 = B2 + dB2;
end

raw2 = imread('rec1.jpg');
threshold = graythresh(raw2)*255; 
raw2 = im2bw(raw2,threshold/255);
raw2 = imcomplement(raw2);    
se = strel('disk',6);   
raw2 = imclose(raw2, se);
raw2 = bwlabel(raw2); 
picture2 = regionprops(raw2, 'Image','Area');    
char = find([picture2.Area] > 10);
[x, y] = size(char);
for i = 1:y
    picturechar(i, 1).Image = picture2(char(1, i), 1).Image;
end

for i = 1:y    
    picturechar(i, 1).Image = imresize(picturechar(i, 1).Image, [30 30]);
end

x_ypicture2 = zeros(y, 60);   
for i = 1:y  
    for j = 1:30  
        for k = 1:30   
            if picturechar(i, 1).Image(j, k) == white
                x_ypicture2(i,j) = x_ypicture2(i, j) + 1; 
            end
            if picturechar(i, 1).Image(k, j) == white
                x_ypicture2(i,j+30) = x_ypicture2(i, j+30) +1;   
            end
        end
    end
end

p2 = x_ypicture2;
for i=1:17
  p2(i,:)=(p2(i,:)-min(p2(i,:)))/(max(p2(i,:))-min(p2(i,:)));
end

for i = 1:17
    k = logsig(W2 * tansig((W1 * p2(i,:)'), B1), B2);
    char(i) = find(k == max(k));   
end

disp('期望得到的char = [A B A E B D D C E C A B E E A D C]');
disp('实际得到的char为(A=1,B=2,C=3,D=4,E=5)');
char

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -