%训练样本集26个英文字母(输入向量和目标向量)
clc;
clear all;
t=zeros(30,5);
for kk=0:29
%p1=ones(28,28);% 初始化28×28的二值图像像素值(全白)
m =strcat('ORL人脸库\train\',int2str(kk),'.bmp');% 形成训练样本图像的文件名(0~259.bmp)
x=imread(m,'bmp');% 读入训练样本图像文件
bw=im2bw(x,0.5);% 将读入的训练样本图像转换为二值图像
bw=im2uint8(bw);
% [i,j]= find(bw==0);% 寻找二值图像中像素值为0(黑)的行号和列号
% imin=min(i);% 寻找二值图像中像素值为0(黑)的最小行号
% imax=max(i);% 寻找二值图像中像素值为0(黑)的最大行号
% jmin=min(j);% 寻找二值图像中像素值为0(黑)的最小列号
% jmax=max(j);% 寻找二值图像中像素值为0(黑)的最大列号
% bw1=bw(imin:imax,jmin:jmax);% 截取图像像素值为0(黑)的最大矩形区域
% % rate=28/max(size(bw1));% 计算截取图像转换为28×28的二值图像的缩放比例(由于缩放比例
% % 大多数情况下不为28的倍数,所以可能存在转换误差)
% bw1=imresize(bw1,[28,28]);% 将截取图像转换为28×28的二值图像
% % [i,j]=size(bw1);% 转换图像的大小
% % i1=round((28-i)/2);% 计算转换图像与标准28×28的图像的左边界差
% % j1=round((28-j)/2);% 计算转换图像与标准28×28的图像的上边界差
% % p1(i1+1:i1+i,j1+1:j1+j)=bw1;% 将截取图像转换为标准的28×28的图像
% p1=bw1;
% p1= -1.*p1+ones(28,28);% 反色处理 % 以图像数据形成神经网络输入向量
for m=0:91
p(m*112+1:(m +1)*112,kk+1)=bw(1:112,m+1);
end % 形成神经网络目标向量
switch kk
case{0,5,10,15,20,25,30,35} % 第一个人
t(kk+1,1)=1;
case{1,6,11,16,21,26,31,36} % 第二个人
t(kk+1,2)=1;
case{2,7,12,17,22,27,32,37} % 字母C
t(kk+1,3)=1;
case{3,8,13,18,23,28,33,38} % 字母D
t(kk+1,4)=1;
case{4,9,14,19,24,29,34,39} %字母E
t(kk+1,5)=1;
% case{5,32,57,83,109,135,161,187,213,239} %字母F
% t(kk+1,6)=1;
% case{6,33,58,84,110,136,162,188,214,240} % 字母G
% t(kk+1,7)=1;
% case{7,34,59,85,111,137,163,189,215,241} % 字母H
% t(kk+1,8)=1;
% case{8,35,60,86,112,138,164,190,216,242} % 字母I
% t(kk+1,9)=1;
% case{9,36,61,87,113,139,165,191,217,243} % 字母J
% t(kk+1,10)=1;
% case{10,37,62,88,114,140,166,192,218,244} % 字母K
% t(kk+1,11)=1;
% case{11,38,63,89,115,141,167,193,219,245} % 字母L
% t(kk+1,12)=1;
% case{12,39,64,90,114,142,168,194,220,246} % 字母M
% t(kk+1,13)=1;
% case{13,40,65,91,115,143,169,195,221,247} % 字母N
% t(kk+1,14)=1;
% case{14,41,66,92,116,144,170,196,222,248} % 字母O
% t(kk+1,15)=1;
% case{15,42,67,93,117,145,171,197,223,249} % 字母P
% t(kk+1,16)=1;
% case{16,43,68,94,118,146,172,198,224,250} % 字母Q
% t(kk+1,17)=1;
% case{17,44,69,95,119,147,173,199,225,251} % 字母R
% t(kk+1,18)=1;
% case{18,45,70,96,120,148,174,200,226,252} % 字母S
% t(kk+1,19)=1;
% case{19,46,71,97,121,149,175,201,227,253} %字母T
% t(kk+1,20)=1;
% case{20,47,72,98,122,150,176,202,228,254} % 字母U
% t(kk+1,21)=1;
% case{21,48,73,99,123,151,177,203,229,255} % 字母V
% t(kk+1,22)=1;
% case{22,49,74,100,124,152,178,204,230,256} % 字母W
% t(kk+1,23)=1;
% case{23,50,75,101,125,153,179,205,231,257} % 字母X
% t(kk+1,24)=1;
% case{24,51,76,102,126,154,180,206,232,258} % 字母Y
% t(kk+1,25)=1;
% case{25,52,77,103,127,155,181,207,233,259} % 字母Z
% t(kk+1,26)=1;
end
end
test_y=zeros(10,5);
for k=0:9
%p2=ones(28,28);% 初始化28×28的二值图像像素值(全白)
m2 =strcat('ORL人脸库\test\',int2str(k),'.bmp');% 形成训练样本图像的文件名(0~89.bmp)
x=imread(m2,'bmp');% 读入训练样本图像文件
bw=im2bw(x,0.5);% 将读入的训练样本图像转换为二值图像
bw=im2uint8(bw);
% [i,j]= find(bw==0);% 寻找二值图像中像素值为0(黑)的行号和列号
% imin=min(i);% 寻找二值图像中像素值为0(黑)的最小行号
% imax=max(i);% 寻找二值图像中像素值为0(黑)的最大行号
% jmin=min(j);% 寻找二值图像中像素值为0(黑)的最小列号
% jmax=max(j);% 寻找二值图像中像素值为0(黑)的最大列号
% bw2=bw(imin:imax,jmin:jmax);% 截取图像像素值为0(黑)的最大矩形区域
% % rate=28/max(size(bw1));% 计算截取图像转换为28×28的二值图像的缩放比例(由于缩放比例
% % 大多数情况下不为28的倍数,所以可能存在转换误差)
% bw2=imresize(bw2,[28,28]);% 将截取图像转换为28×28的二值图像
% % [i,j]=size(bw1);% 转换图像的大小
% % i1=round((28-i)/2);% 计算转换图像与标准28×28的图像的左边界差
% % j1=round((28-j)/2);% 计算转换图像与标准28×28的图像的上边界差
% % p1(i1+1:i1+i,j1+1:j1+j)=bw1;% 将截取图像转换为标准的28×28的图像
% p2=bw2;
% p2= -1.*p2+ones(28,28);% 反色处理 % 以图像数据形成神经网络输入向量
for m=0:91
test_x(m*112+1:(m +1)*112,k+1)=bw(1:112,m+1);
end % 形成神经网络目标向量
switch k
case{0,5} % 第一个人
test_y(k+1,1)=1;
case{1,6} % 第二个人
test_y(k+1,2)=1;
case{2,7} % 第三个人
test_y(k+1,3)=1;
case{3,8} % 第四个人
test_y(k+1,4)=1;
case{4,9} %第四个人
test_y(k+1,5)=1;
% case{5,31} %字母F
% test_y(k+1,6)=1;
% case{6,32} % 字母G
% test_y(k+1,7)=1;
% case{7,33} % 字母H
% test_y(k+1,8)=1;
% case{8,34} % 字母I
% test_y(k+1,9)=1;
% case{9,35} % 字母J
% test_y(k+1,10)=1;
% case{10,36} % 字母K
% test_y(k+1,11)=1;
% case{11,37} % 字母L
% test_y(k+1,12)=1;
% case{12,38} % 字母M
% test_y(k+1,13)=1;
% case{13,39} % 字母N
% test_y(k+1,14)=1;
% case{14,40} % 字母O
% test_y(k+1,15)=1;
% case{15,41} % 字母P
% test_y(k+1,16)=1;
% case{16,42} % 字母Q
% test_y(k+1,17)=1;
% case{17,43} % 字母R
% test_y(k+1,18)=1;
% case{18,44} % 字母S
% test_y(k+1,19)=1;
% case{19,45} %字母T
% test_y(k+1,20)=1;
% case{20,46} % 字母U
% test_y(k+1,21)=1;
% case{21,47} % 字母V
% test_y(k+1,22)=1;
% case{22,48} % 字母W
% test_y(k+1,23)=1;
% case{23,49} % 字母X
% test_y(k+1,24)=1;
% case{24,50} % 字母Y
% test_y(k+1,25)=1;
% case{25,51} % 字母Z
% test_y(k+1,26)=1;
end
end
%save LT test_x test_y;
save LETTERS p t test_x test_y; % 存储形成的训练样本集(输入向量和目标向量)
disp('输入向量和目标向量生成结束!')