mytest.m
上传用户:qjgdzl
上传日期:2022-08-10
资源大小:3663k
文件大小:3k
源码类别:

matlab例程

开发平台:

Matlab

  1. function mytest()
  2. clc;
  3. images=[ ];  
  4. M_train=3;%表示人脸
  5. N_train=5;%表示方向 
  6. sample=[];  
  7. pixel_value=[];
  8. sample_number=0;
  9.   for j=1:N_train
  10.       for i=1:M_train
  11.     str=strcat('Images',num2str(i),'_',num2str(j),'.bmp'); %读取图像,连接字符串形成图像的文件名。
  12.     img= imread(str);  
  13.     [rows cols]= size(img);%获得图像的行和列值。
  14.      img_edge=edge(img,'Sobel');
  15.     
  16.      %由于在分割图片中我们可以看到这个人脸的眼睛部分也就是位于分割后的第二行中,位置变化比较大,而且眼睛边缘检测效果很好
  17.      
  18.      sub_rows=floor(rows/6);%最接近的最小整数,分成6行
  19.      sub_cols=floor(cols/8);%最接近的最小整数,分成8列
  20.      sample_num=M_train*N_train;%前5个是第一幅人脸的5个角度
  21.     
  22.      sample_number=sample_number+1;
  23.      for subblock_i=1:8 %因为这还在i,j的循环中,所以不可以用i 
  24.            block_num=subblock_i;
  25.            pixel_value(sample_number,block_num)=0;  
  26.             for ii=sub_rows:(2*sub_rows)
  27.              for jj=(subblock_i-1)*sub_cols+1:subblock_i*sub_cols
  28.                  pixel_value(sample_number,block_num)=pixel_value(sample_number,block_num)+img_edge(ii,jj);          
  29.              end
  30.             end     
  31.      end  
  32.   end
  33.   end
  34.   %将特征值转换为小于1的值
  35.  max_pixel_value=max(pixel_value);
  36.   max_pixel_value_1=max(max_pixel_value); 
  37.   for i=1:3
  38.       mid_value=10^i;
  39.       if(((max_pixel_value_1/mid_value)>1)&&((max_pixel_value_1/mid_value)<10))
  40.          multiple_num=1/mid_value; 
  41.          pixel_value=pixel_value*multiple_num; 
  42.          break;
  43.       end
  44.   end     
  45.   
  46. % T 为目标矢量 
  47.     t=zeros(3,sample_number);
  48.     %因为有五类,所以至少用3个数表示,5介于2的2次方和2的3次方之间
  49.     for i=1:sample_number
  50.         % if((mod(i,5)==1)||(mod(i,5)==4)||(mod(i,5)==0))
  51.         if(i<=3)||((i>9)&&(i<=12))||((i>12)&&(i<=15))
  52.             t(1,i)=1;
  53.         end    
  54.         %if((mod(i,5)==2)||(mod(i,5)==4)) 
  55.         if((i>3)&&(i<=6))||((i>9)&&(i<=12))
  56.             t(2,i)=1;
  57.         end        
  58.         %if((mod(i,5)==3)||(mod(i,5)==0)) 
  59.         if((i>6)&&(i<=9))||((i>12)&&(i<=15))
  60.             t(3,i)=1;
  61.         end           
  62.     end  
  63.     
  64.     
  65.    
  66. % NEWFF——生成一个新的前向神经网络 
  67. % TRAIN——对 BP 神经网络进行训练 
  68. % SIM——对 BP 神经网络进行仿真 
  69. %  定义训练样本 
  70. % P 为输入矢量 
  71. P=pixel_value'
  72. % T 为目标矢量 
  73. T=t
  74. size(P)
  75. size(T)
  76. % size(P)
  77. % size(T)
  78. %  创建一个新的前向神经网络  
  79. net_1=newff(minmax(P),[10,3],{'tansig','purelin'},'traingdm')
  80. %  当前输入层权值和阈值 
  81. inputWeights=net_1.IW{1,1} 
  82. inputbias=net_1.b{1} 
  83. %  当前网络层权值和阈值 
  84. layerWeights=net_1.LW{2,1} 
  85. layerbias=net_1.b{2} 
  86. %  设置训练参数
  87. net_1.trainParam.show = 50; 
  88. net_1.trainParam.lr = 0.05; 
  89. net_1.trainParam.mc = 0.9; 
  90. net_1.trainParam.epochs = 10000; 
  91. net_1.trainParam.goal = 1e-3; 
  92. %  调用 TRAINGDM 算法训练 BP 网络
  93. [net_1,tr]=train(net_1,P,T); 
  94. %  对 BP 网络进行仿真
  95. A = sim(net_1,P); 
  96. %  计算仿真误差  
  97. E = T - A; 
  98. MSE=mse(E) 
  99. x=[0.14 0 1 1 0 1 1 1.2]';
  100. sim(net_1,x)
  101. web -browser http://www.ilovematlab.cn/thread-18635-1-1.html