|
楼主 |
发表于 2009-5-4 19:40
|
显示全部楼层
生成目标向量
%Generate_InputP_TargetT
clear all;
'正在生成输入向量和目标向量,请稍等……'
for kk=0:89
p1=ones(16,16); %初始化16*16的二值图像像素值(全白)
m=strcat(int2str(kk),'.bmp'); %形成训练样本图像的文件名(0--89.bmp)
x=imread(m,'bmp'); %读入训练样本图像文件
bw=im2bw(x,0.5); %将读入的训练样本图像转换为二值图像
%%图像处理函数详解——im2bw
%%功能:通过设定亮度将阈值灰度、真彩、索引图像转换为二值图像。
[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=16/max(size(bw1)); %计算截取图像转换为16*16的二值图像的缩放比例
bw1=imresize(bw1,rate); %将截取图像转换为16*16的二值图像(由于缩放比例
%大多数情况下不为16的倍数,所以可能存在转换误差)
[i,j]=size(bw1); %转换图像的大小
i1=round((16-i)/2); %计算转换图像与标准16*16的图像的左边界差
j1=round((16-j)/2); %计算转换图像与标准16*16的图像的上边界差
p1(i1+1:i1+i,j1+1:j1+j)=bw1; %将截取图像转换为标准的16*16的图像
p1= -1. *p1 + ones(16,16); %反色处理
%以图像数据形成神经网络输入向量
for m=0:15
p(m*16+1:(m+1)*16,kk+1)=p1(1:16,m+1);
end
%形成神经网络目标向量
switch kk
case{0,10,20,30,40,50,60,70,80,90} %数字0
t(kk+1)=0;
case{1,11,21,31,41,51,61,71,81,91} %数字1
t(kk+1)=1;
case{2,12,22,32,42,52,62,72,82,92} %数字2
t(kk+1)=2;
case{3,13,32,33,43,53,63,73,83,93} %数字3
t(kk+1)=3;
case{4,14,24,34,44,54,64,74,84,94} %数字4
t(kk+1)=4;
case{5,15,25,35,45,55,66,75,85,95} %数字5
t(kk+1)=5;
case{6,16,26,36,46,56,66,76,86,96} %数字6
t(kk+1)=6;
case{7,17,27,37,47,57,67,77,87,97} %数字7
t(kk+1)=7;
case{8,18,28,38,48,58,68,78,88,98} %数字8
t(kk+1)=8;
case{9,19,29,39,49,59,69,79,89,99} %数字9
t(kk+1)=9;
end
end
save E52PT p t; %存储形成的训练样本集(输入向量和目标向量)
'输入向量和目标向量生成结束!' |
|