遥感图像分类--实验六:集成学习与分类性能评价

主程序:

​
%% 读入数据
photo=imread("airplane.tif");
figure(1);
subplot(2,3,1),imshow(photo);
%%  产生初始训练集
ob1=photo(10:17,210:217,:);
ob2=photo(20:27,50:57,:);
ob3=photo(129:136,120:127,:);
subplot(2,3,2),imshow(ob1),title("样本集1");subplot(2,3,3),imshow(ob2),title("样本集2");subplot(2,3,4),imshow(ob3),title("样本集3");
ob=[ob1 ob2 ob3];subplot(2,3,5),imshow(ob,[]);
obb=reshape(ob,1,192,3);subplot(2,3,6),imshow(obb,[]),title("重组成一行的样本集");
%% 产生训练子集
oo=1:1:192;
bb1=oo(randperm(numel(oo),150));
bb2=oo(randperm(numel(oo),150));
bb3=oo(randperm(numel(oo),150));
bb4=oo(randperm(numel(oo),150));
bb11=sample(bb1);
bb22=sample(bb2);
bb33=sample(bb3);
bb44=sample(bb4);
[fir1,fir2,fir3]=sample2(bb11,obb);
[sec1,sec2,sec3]=sample2(bb22,obb);
[thi1,thi2,thi3]=sample2(bb11,obb);
[fou1,fou2,fou3]=sample2(bb11,obb);
%% 训练线性函数
[fc1,fc2,fc3]=training(fir1,fir2,fir3);
[sc1,sc2,sc3]=training(sec1,sec2,sec3);
[tc1,tc2,tc3]=training(thi1,thi2,thi3);
[oc1,oc2,oc3]=training(fou1,fou2,fou3);
%% 分类图像
rr1=prove(photo,fc1,fc2,fc3);
rr2=prove(photo,sc1,sc2,sc3);
rr3=prove(photo,tc1,tc2,tc3);
rr4=prove(photo,oc1,oc2,oc3);
figure(4);
subplot(2,3,1),imshow(rr1,[]),title("分类器1结果");
subplot(2,3,2),imshow(rr2,[]),title("分类器2结果");
subplot(2,3,3),imshow(rr3,[]),title("分类器3结果");
subplot(2,3,4),imshow(rr4,[]),title("分类器4结果");
%% 最终分类结果
rrend=zeros(256,256);
for ri=1:256
    for rj=1:256
    rrend(ri,rj)=mode([rr1(ri,rj),rr2(ri,rj),rr3(ri,rj),rr4(ri,rj)]);
    end
end
subplot(2,3,5),imshow(rrend,[]),title("最终结果");

​

程序中用到的函数--1

function [out] = sample(bb1)
green=[];
brown=[];
white=[];
for mm=1:150
    if bb1(mm)<65
       green=[green,bb1(mm)];
    end
    if bb1(mm)<129&&bb1(mm)>64
       brown=[brown,bb1(mm)];
    end
    if bb1(mm)>128
       white=[white,bb1(mm)];
    end
end
out=[green,brown,white];

end

程序中用到的函数---2

function [out1,out2,out3] = sample2(x,y)
out1=[];
out2=[];
out3=[];
for i=1:150
    if x(i)<65
       out1=[out1,y(1,x(i),:)];
    end
    if x(i)<129&&x(i)>64
       out2=[out2,y(1,x(i),:)];
    end
    if x(i)>128
       out3=[out3,y(1,x(i),:)];
    end
end
end

程序中用到的函数--3

function [data] = reshap4(photo)
[m,n,p]=size(photo);
x=m*n
rp=photo(:,:,1);
gp=photo(:,:,2);
bp=photo(:,:,3);
dp=photo(:,:,4);
datar=reshape(rp,x,1);
datag=reshape(gp,x,1);
datab=reshape(bp,x,1);
datad=reshape(bp,x,1);
data=[datar,datag,datab,datad];
data=double(data);
end

程序中用到的函数--4

function [w1,w2,w3] = training(yb1,yb2,yb3)
yb1(:,:,4)=1;yb2(:,:,4)=1;yb3(:,:,4)=1;
%% 训练第一个方程
w1=[1,1,1,1];%%参数向量
yybb1=[double(yb1),-double(yb2),-double(yb3),];
yybbr1=reshap4(yybb1)';
[d1,n1]=size(yybbr1);
for x1=1:100000
   p1=0%计数器,小于等于0加一,一轮结束后若仍然为零可认为训练完成
   for i1=1:n1
       if(w1*yybbr1(:,i1))<=0
           w1=w1+1.2*yybbr1(:,i1)';
           p1=p1+1
       else
           w1=w1;
       end
   end
   if p1==0
       break;
   end
end
%% 第二个
w2=[1,1,1,1];%%参数向量
yybb2=[-double(yb1),double(yb2),-double(yb3)];
yybbr2=reshap4(yybb2)';
[d2,n2]=size(yybbr2);
for x2=1:100000
   p2=0%计数器,小于等于0加一,一轮结束后若仍然为零可认为训练完成
   for i2=1:n2
       if(w2*yybbr2(:,i2))<=0
           w2=w2+1.2*yybbr2(:,i2)';
           p2=p2+1
       else
           w2=w2;
       end
   end
   if p2==0
       break;
   end
end
%% 第三个
w3=[1,1,1,1];%%参数向量
yybb3=[-double(yb1),-double(yb2),double(yb3)];
yybbr3=reshap4(yybb3)';
[d3,n3]=size(yybbr3);
for x3=1:100000
   p3=0%计数器,小于等于0加一,一轮结束后若仍然为零可认为训练完成
   for i3=1:n3
       if(w3*yybbr3(:,i3))<=0
           w3=w3+1.2*yybbr3(:,i3)';
           p3=p3+1
       else
           w3=w3;
       end
   end
   if p3==0
       break;
   end
end
end

程序中用到的函数--5

function [photo3] = prove(photo,w1,w2,w3)

photo(:,:,4)=1;
photo2=double(reshap4(photo));
result=zeros(65536,1);
for i=1:65536
    dd1=w1*photo2(i,:)';
    dd2=w2*photo2(i,:)';
    dd3=w3*photo2(i,:)';
    result(i,1)=4;
    if dd1>0&dd2<0&dd3<0
        result(i,1)=1;
    end
    if dd1<0&dd2>0&dd3<0
        result(i,1)=2;
    end
    if dd1<0&dd2<0&dd3>0
        result(i,1)=3;
    end
end
photo3=reshape(result,256,256);

end

最终结果:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值