遥感图像分类--实验五:线性判别函数与感知器算法

主程序:

%% 读入数据
photo=imread("airplane.tif");
figure(1);
subplot(2,3,1),imshow(photo);
%%  产生训练集
yb1=photo(10:17,210:217,:);
yb2=photo(20:27,50:57,:);
yb3=photo(129:136,120:127,:);
%yb4=photo(170:177,180:187,:);
subplot(2,3,2),imshow(yb1);subplot(2,3,3),imshow(yb2);subplot(2,3,4),imshow(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
%% 带入结果
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);
figure(2),imshow(photo3,[]);

调用函数:

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

结果:

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值