神经网络图像分类代码

神经网络图像分类基本步骤
第一步:找到需要分类的图像,如下方的10.jpg
第二步:找到样本数据,分类是需要有样本数据的,数据集中已经给出
第三步:替换掉下方的代码数据即可

代码

clear all;
%读入样本10,即遥感图像的背景
I=imread('10.jpg');
%将样本图像降维处理
R=I(:,:,1);
G=I(:,:,2);
B=I(:,:,3);
%灰度值归一化
R=im2double(R);
G=im2double(G);
B=im2double(B);
[M N]=size(R);
R=reshape(R',[1 M*N]);
G=reshape(G',[1 M*N]);
B=reshape(B',[1 M*N]);
%初始化输入矢量P和输出矢量T
P=[];
T=[];
P=[R;G;B];
T=[0;0;0];
[m n]=size(P);
T=concur(T,n);

%读入样本图像0
I=imread('0.jpg');
%将样本图像降维处理
R=I(:,:,1);
G=I(:,:,2);
B=I(:,:,3);
%灰度值归一化
R=im2double(R);
G=im2double(G);
B=im2double(B);
[M N]=size(R);
R=reshape(R',[1 M*N]);
G=reshape(G',[1 M*N]);
B=reshape(B',[1 M*N]);
P1=[R;G;B];
T1=[0.1;0.3;0.5];
P=[P,P1];
[m n]=size(P1);
T1=concur(T1,n);
T=[T,T1];

%读入样本图像1
I=imread('1.jpg');
%将样本图像降维处理
R=I(:,:,1);
G=I(:,:,2);
B=I(:,:,3);
%灰度值归一化
R=im2double(R);
G=im2double(G);
B=im2double(B);
[M N]=size(R);
R=reshape(R',[1 M*N]);
G=reshape(G',[1 M*N]);
B=reshape(B',[1 M*N]);
P1=[R;G;B];
T1=[0.2;0.4;0.6];
P=[P,P1];
[m n]=size(P1);
T1=concur(T1,n);
T=[T,T1];

%读入样本图像2
I=imread('2.jpg');
%将样本图像降维处理
R=I(:,:,1);
G=I(:,:,2);
B=I(:,:,3);
%灰度值归一化
R=im2double(R);
G=im2double(G);
B=im2double(B);
[M N]=size(R);
R=reshape(R',[1 M*N]);
G=reshape(G',[1 M*N]);
B=reshape(B',[1 M*N]);
P1=[R;G;B];
T1=[0.3;0.2;0.7];
P=[P,P1];
[m n]=size(P1);
T1=concur(T1,n);
T=[T,T1];

%读入样本图像3
I=imread('3.jpg');
%将样本图像降维处理
R=I(:,:,1);
G=I(:,:,2);
B=I(:,:,3);
%灰度值归一化
R=im2double(R);
G=im2double(G);
B=im2double(B);
[M N]=size(R);
R=reshape(R',[1 M*N]);
G=reshape(G',[1 M*N]);
B=reshape(B',[1 M*N]);
P1=[R;G;B];
T1=[0.4;0.4;0.7];
P=[P,P1];
[m n]=size(P1);
T1=concur(T1,n);
T=[T,T1];

%读入样本图像4
I=imread('4.jpg');
%将样本图像降维处理
R=I(:,:,1);
G=I(:,:,2);
B=I(:,:,3);
%灰度值归一化
R=im2double(R);
G=im2double(G);
B=im2double(B);
[M N]=size(R);
R=reshape(R',[1 M*N]);
G=reshape(G',[1 M*N]);
B=reshape(B',[1 M*N]);
P1=[R;G;B];
T1=[0.5;0.5;0.4];
P=[P,P1];
[m n]=size(P1);
T1=concur(T1,n);
T=[T,T1];

%读入样本图像5
I=imread('5.jpg');
%将样本图像降维处理
R=I(:,:,1);
G=I(:,:,2);
B=I(:,:,3);
%灰度值归一化
R=im2double(R);
G=im2double(G);
B=im2double(B);
[M N]=size(R);
R=reshape(R',[1 M*N]);
G=reshape(G',[1 M*N]);
B=reshape(B',[1 M*N]);
P1=[R;G;B];
T1=[0.6;0.9;0.2];
P=[P,P1];
[m n]=size(P1);
T1=concur(T1,n);
T=[T,T1];

%读入样本图像6
I=imread('6.jpg');
%将样本图像降维处理
R=I(:,:,1);
G=I(:,:,2);
B=I(:,:,3);
%灰度值归一化
R=im2double(R);
G=im2double(G);
B=im2double(B);
[M N]=size(R);
R=reshape(R',[1 M*N]);
G=reshape(G',[1 M*N]);
B=reshape(B',[1 M*N]);
P1=[R;G;B];
T1=[0.7;0.2;0.8];
P=[P,P1];
[m n]=size(P1);
T1=concur(T1,n);
T=[T,T1];

%读入样本图像7
I=imread('7.jpg');
%将样本图像降维处理
R=I(:,:,1);
G=I(:,:,2);
B=I(:,:,3);
%灰度值归一化
R=im2double(R);
G=im2double(G);
B=im2double(B);
[M N]=size(R);
R=reshape(R',[1 M*N]);
G=reshape(G',[1 M*N]);
B=reshape(B',[1 M*N]);
P1=[R;G;B];
T1=[0.8;0.3;0.5];
P=[P,P1];
[m n]=size(P1);
T1=concur(T1,n);
T=[T,T1];

%读入样本图像8
I=imread('8.jpg');
%将样本图像降维处理
R=I(:,:,1);
G=I(:,:,2);
B=I(:,:,3);
%灰度值归一化
R=im2double(R);
G=im2double(G);
B=im2double(B);
[M N]=size(R);
R=reshape(R',[1 M*N]);
G=reshape(G',[1 M*N]);
B=reshape(B',[1 M*N]);
P1=[R;G;B];
T1=[0.9;0.2;0.1];
P=[P,P1];
[m n]=size(P1);
T1=concur(T1,n);
T=[T,T1];

%读入样本图像9
I=imread('9.jpg');
%将样本图像降维处理
R=I(:,:,1);
G=I(:,:,2);
B=I(:,:,3);
%灰度值归一化
R=im2double(R);
G=im2double(G);
B=im2double(B);
[M N]=size(R);
R=reshape(R',[1 M*N]);
G=reshape(G',[1 M*N]);
B=reshape(B',[1 M*N]);
P1=[R;G;B];
T1=[1;0.5;0.6];
P=[P,P1];
[m n]=size(P1);
T1=concur(T1,n);
T=[T,T1];

%创建一个前向神经网络
net=newff(minmax(P),[5,3],{'logsig','purelin'},'traingdx');
%设置训练参数
net.trainParam.show=50;
net.trainParam.epochs=1000;   %最大训练步数为1000
net.trainParam.goal=0.001;
net=init(net);
%对BP网络进行训练
net=train(net,P,T);

for j=1:2
    if j==1
        var=input('是否对2000年崇明东滩遥感影像进行分类(是:输入1 ,否:输入2)');
    elseif j==2
        var=input('是否对2003年崇明东滩遥感影像进行分类(是:输入1 ,否:输入2)');
    end

%读入待分类遥感图像
if var==1
    if j==1 
    I=imread('tm2000mask.jpg');
    elseif j==2
    I=imread('tm2003mask.jpg');
    end
  %将彩色图像降维
  R=I(:,:,1);
  G=I(:,:,2);
  B=I(:,:,3);
  %将灰度值归一化处理
  R=im2double(R);
  G=im2double(G);
  B=im2double(B);
  [M,N]=size(R);
  R=reshape(R',[1 M*N]);
  G=reshape(G',[1 M*N]);
  B=reshape(B',[1 M*N]);
  p=[R;G;B];
  %对BP网络进行仿真
  Y=sim(net,p);
  R=Y(1,:);
  X=R;              
  classR=[];    
  for i=0:(M-1)
      classR=[classR;R((i*N+1):(i*N+N))];
  end
  G=Y(2,:);
  classG=[];
  for i=0:(M-1)
      classG=[classG;G((i*N+1):(i*N+N))];
  end
  B=Y(3,:);
  classB=[];
  for i=0:(M-1)
      classB=[classB;B((i*N+1):(i*N+N))];
  end

  R=abs(classR)*255;
  R=uint8(R);
  G=abs(classG)*255;
  G=uint8(G);
  B=abs(classB)*255;
  B=uint8(B);
  classify=cat(3,R,G,B);
  figure,imshow(classify);
  if j==1
      title('2000年崇明东滩遥感图像分类图');
  elseif j==2
      title('2003年崇明东滩遥感图像分类图');
  end

  %计算各类地物面积
  X=abs(X)*255;
  [M,N]=size(X);
  t10=0;t0=0;t1=0;t2=0;t3=0;t4=0;t5=0;t6=0;t7=0;t8=0;t9=0;

  for i=1:N
      if X(1,i)==0
          t10=t10+1;
      elseif X(1,i)<26
          t0=t0+1;
      elseif X(1,i)<52
          t1=t1+1;
      elseif X(1,i)<=76
          t2=t2+1;
      elseif X(1,i)<=102
          t3=t3+1;
      elseif X(1,i)<=127
          t4=t4+1;
      elseif X(1,i)<=153
          t5=t5+1;
      elseif X(1,i)<=178
          t6=t6+1;
      elseif X(1,i)<204
          t7=t7+1;
      elseif X(1,i)<=229
          t8=t8+1;
      else t9=t9+1;
      end
  end
  
  var=input('是否以饼状图显示地物比例(是:输入1 ,否:输入2)');
  if var==1
  %绘制地物面积饼状图
  t=[t0,t1,t2,t3,t4,t5,t6,t7,t8,t9];
  figure;
  pie(t);
  legend('海水','农地','绿林地','房屋','养殖场','芦苇','互花米草','海三棱藨草','光滩','未利用地',-1);            %标注图例
  end
  
  var=input('是否以直方图显示地物比例(是:输入1 ,否:输入2 )');
  if var==1
  %绘制地物面积柱状图
  y=[t0,t1,t2,t3,t4,t5,t6,t7,t8,t9];  
  x=1:10;
  figure;
  bar(x,y);colormap summer;         %绘制柱状图且返回图形句柄
  end
end
end

var=input('是否对2005年遥感图像进行预测(是:输入1 否:输入2)');
if var==1
%<----------------------------!运用2000年和2003年图像预测2005年图像------------------>
%读入2000年遥感数据
I=imread('tm2000mask.jpg');
%将图像数据降维
R=I(:,:,1);
G=I(:,:,2);
B=I(:,:,3);
%灰度值归一化
R=im2double(R);
G=im2double(G);
B=im2double(B);
[M N]=size(R);
R=reshape(R',[1 M*N]);
G=reshape(G',[1 M*N]);
B=reshape(B',[1 M*N]);
%初始化输入向量
P=[];
P=[R;G;B];

%初始化输出向量
%读入2003年遥感数据
I=imread('tm2003mask.jpg');
%将图像数据降维
R=I(:,:,1);
G=I(:,:,2);
B=I(:,:,3);
%灰度值归一化
R=im2double(R);
G=im2double(G);
B=im2double(B);
[M N]=size(R);
R=reshape(R',[1 M*N]);
G=reshape(G',[1 M*N]);
B=reshape(B',[1 M*N]);
T=[];
T=[R;G;B];

%创建一个前向神经网络
net=newff(minmax(P),[5 3],{'logsig','purelin'},'traingdx');
%设置训练参数
net.trainParam.show=50;
net.trainParam.epochs=1000;
net.trainParam.goal=0.001;
%对BP网络进行训练
net=train(net,P,T);

%预测2005年遥感图像
%对BP网络进行仿真
Y=sim(net,T);
  R=Y(1,:);              
  R2005=[];    
  for i=0:(M-1)
      R2005=[R2005;R((i*N+1):(i*N+N))];
  end
  G=Y(2,:);
  G2005=[];
  for i=0:(M-1)
      G2005=[G2005;G((i*N+1):(i*N+N))];
  end
  B=Y(3,:);
  B2005=[];
  for i=0:(M-1)
      B2005=[B2005;B((i*N+1):(i*N+N))];
  end
  
  R=abs(R2005)*255;
  R=uint8(R);
  G=abs(G2005)*255;
  G=uint8(G);
  B=abs(B2005)*255;
  B=uint8(B);
  T2005=cat(3,R,G,B);
  figure;imshow(T2005);
end

你可能感兴趣的:(matlab)