📄 tuixiang.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 + -