前言

这些代码均是使用最基础的方法,通过一步一步迭代过程来理解算法的原理及实现过程,并不采用于实用工程,读者以此作为学习参考即可。

监督分类

监督分类的概念:首先使用训练样本学习一个分类器,再对测试样本进行分类。
图像分类的两个步骤:特征提取与分类算法。
特征提取:颜色特征向量。
分类 训练过程:使用训练样本学习分类器。
测试过程:使用学习好的分类器对测试样本分类。
分类算法:感知器算法。

线性判别函数



那么,如何得到线性判别函数?
如何得到线性判别函数里面的权向量参数?

感知器算法


分类结果

选择训练样本


由于采用rgb分量作为特征向量,分为三类,所以颜色接近的像素便分为一类,所以选择三种颜色比较明显的部分作为训练样本,以保证训练样本线性可分或接近线性可分。

用训练出的三个方程对图像进行分类,其中蓝色为第一类,红色为第二类,绿色为第三类,黑色为不可分点。


迭代中W的初值和常数c均会影响方程的建立及图像的分类。 并且感知器算法有限的迭代里一定会找到一个超平面,可以把数据正确分类,但是这个分离超平面不是唯一的,所以不同的参数会导致不同的分类结果。

绘制散点图及分类界面


这几张图可以明显看出各分类界面与其分类结果的关联。结合以前模式识别的知识,发现拒绝点也恰好在分界面划分的其余区域和界面处。分类结果不是非常完美,有待优化。

源代码

clc;
clearvars
close all;Im = imread('industrial_12.jpg');%读取图像
[m,n]=size(Im(:,:,1));
yb1=Im(501:530,101:180,:);%创建样本
yb2=Im(301:330,211:290,:);
yb3=Im(301:330,311:390,:);
figure(1)
subplot(2,2,1);imshow(Im);title('原图像');
subplot(2,2,2);imshow(yb1);title('类别1部分');
subplot(2,2,3);imshow(yb2);title('类别2部分');
subplot(2,2,4);imshow(yb3);title('类别3部分');
yb1(:,:,4)=1;yb2(:,:,4)=1;yb3(:,:,4)=1;
%训练第一个方程----------------------------------------------
yb11=[double(yb1) -double(yb2) -double(yb3)];%拼合样本集
[M1,N1]=size(yb11(:,:,1));
h1=1;tez1=zeros(M1*N1,4);%组成特征向量表
for i=1:M1for j=1:N1tez1(h1,1)=yb11(i,j,1);tez1(h1,2)=yb11(i,j,2);tez1(h1,3)=yb11(i,j,3);tez1(h1,4)=yb11(i,j,4);h1=h1+1;end
end
W1(1,:)=[1,1,1,1];k1=1;count1=0;%训练样本
while(count1~=M1*N1)for i=1:M1*N1x1=[tez1(i,1),tez1(i,2),tez1(i,3),tez1(i,4)];if W1(k1,:)*x1'<=0W1(k1+1,:)=W1(k1,:)+1.2*x1;break;elsecount1=i;endendk1=k1+1;
end
%系数矩阵最终结果为 w1(k1-1,:)
%训练第二个方程----------------------------------------------
yb12=[-double(yb1) double(yb2) -double(yb3)];%拼合样本集
[M2,N2]=size(yb12(:,:,1));
h2=1;tez2=zeros(M2*N2,4);%组成特征向量表
for i=1:M2for j=1:N2tez2(h2,1)=yb12(i,j,1);tez2(h2,2)=yb12(i,j,2);tez2(h2,3)=yb12(i,j,3);tez2(h2,4)=yb12(i,j,4);h2=h2+1;end
end
W2(1,:)=[1,1,1,1];k2=1;count2=0;%训练样本
while(count2~=M2*N2)for i=1:M2*N2x2=[tez2(i,1),tez2(i,2),tez2(i,3),tez2(i,4)];if W2(k2,:)*x2'<=0W2(k2+1,:)=W2(k2,:)+1.2*x2;break;elsecount2=i;endendk2=k2+1;
end
%系数矩阵最终结果为 w2(k2-1,:)
%训练第三个方程----------------------------------------------
yb13=[-double(yb1) -double(yb2) double(yb3)];%拼合样本集
[M3,N3]=size(yb13(:,:,1));
h3=1;tez3=zeros(M3*N3,4);%组成特征向量表
for i=1:M3for j=1:N3tez3(h3,1)=yb13(i,j,1);tez3(h3,2)=yb13(i,j,2);tez3(h3,3)=yb13(i,j,3);tez3(h3,4)=yb13(i,j,4);h3=h3+1;end
end
W3(1,:)=[1,1,1,1];k3=1;count3=0;%训练样本
while(count3~=M3*N3)for i=1:M3*N3x3=[tez3(i,1),tez3(i,2),tez3(i,3),tez3(i,4)];if W3(k3,:)*x3'<=0W3(k3+1,:)=W3(k3,:)+1.2*x3;break;elsecount3=i;endendk3=k3+1;
end
%系数矩阵最终结果为 w3(k3-1,:)
%尝试对图像进行分类
T=zeros(m,n);T2=zeros(m,n,3); %类别标记表
count11=0;count22=0;count33=0;count00=0;
for i=1:mfor j=1:nxx=double([Im(i,j,1),Im(i,j,2),Im(i,j,3),1]);if W1(k1-1,:)*xx'>0 & W2(k2-1,:)*xx'<0 & W3(k3-1,:)*xx'<0T(i,j)=1;count11=count11+1;T2(i,j,1)=0;T2(i,j,2)=0;T2(i,j,3)=255;elseif W2(k2-1,:)*xx'>0 & W1(k1-1,:)*xx'<0 & W3(k3-1,:)*xx'<0T(i,j)=2;count22=count22+1;T2(i,j,1)=255;T2(i,j,2)=0;T2(i,j,3)=0;elseif W3(k3-1,:)*xx'>0 & W2(k2-1,:)*xx'<0 & W1(k1-1,:)*xx'<0T(i,j)=3;count33=count33+1;T2(i,j,1)=0;T2(i,j,2)=255;T2(i,j,3)=0;elseT(i,j)=0;count00=count00+1;T2(i,j,1)=0;T2(i,j,2)=0;T2(i,j,3)=0;endend
end
figure(2)
subplot(2,2,1);imshow(Im);title('原图像');
subplot(2,2,2);imshow(T,[]);title('分类图像');
subplot(2,2,3);imshow(uint8(T2));title('彩色处理分类图像');
%生成散点图
h0=1;Ir0=zeros(count00,1);Ig0=zeros(count00,1);Ib0=zeros(count00,1);
h1=1;Ir1=zeros(count11,1);Ig1=zeros(count11,1);Ib1=zeros(count11,1);
h2=1;Ir2=zeros(count22,1);Ig2=zeros(count22,1);Ib2=zeros(count22,1);
h3=1;Ir3=zeros(count33,1);Ig3=zeros(count33,1);Ib3=zeros(count33,1);
for i=1:mfor j=1:nif T(i,j)==1Ir1(h1)=Im(i,j,1);Ig1(h1)=Im(i,j,2);Ib1(h1)=Im(i,j,3);h1=h1+1;elseif T(i,j)==2Ir2(h2)=Im(i,j,1);Ig2(h2)=Im(i,j,2);Ib2(h2)=Im(i,j,3);h2=h2+1;elseif T(i,j)==3Ir3(h3)=Im(i,j,1);Ig3(h3)=Im(i,j,2);Ib3(h3)=Im(i,j,3);h3=h3+1;elseIr0(h0)=Im(i,j,1);Ig0(h0)=Im(i,j,2);Ib0(h0)=Im(i,j,3);h0=h0+1;endend
end
figure(3)
scatter3(Ir1,Ig1,Ib1,'.','b');hold on;
scatter3(Ir2,Ig2,Ib2,'.','r');hold on;
scatter3(Ir3,Ig3,Ib3,'.','g');hold on;
scatter3(Ir0,Ig0,Ib0,'.','k');hold on;%生成散点图
xlabel('R');ylabel('G');zlabel('B');
a1=-(W1(k1-1,1)/W1(k1-1,3));
b1=-(W1(k1-1,2)/W1(k1-1,3));
c1=-(W1(k1-1,4)/W1(k1-1,3));
x1=0:0.1:255;
y1=0:0.1:255;
[x1 y1]=meshgrid(x1,y1);
z1=a1*x1+b1*y1+c1;
mesh(x1,y1,z1);hold on;
a2=-(W2(k2-1,1)/W2(k2-1,3));
b2=-(W2(k2-1,2)/W2(k2-1,3));
c2=-(W2(k2-1,4)/W2(k2-1,3));
x2=0:0.1:255;
y2=0:0.1:255;
[x2 y2]=meshgrid(x2,y2);
z2=a2*x2+b2*y2+c2;
mesh(x2,y2,z2);hold on;
a3=-(W3(k3-1,1)/W3(k3-1,3));
b3=-(W3(k3-1,2)/W3(k3-1,3));
c3=-(W3(k3-1,4)/W3(k3-1,3));
x3=0:0.1:255;
y3=0:0.1:255;
[x3 y3]=meshgrid(x3,y3);
z3=a3*x3+b3*y3+c3;
mesh(x3,y3,z3);

MATLAB实现遥感图像分类——感知器算法相关推荐

  1. 感知器算法及其Matlab实现

    感知器算法 感知器算法适用于线性可分情况,其数学表达式为:G(X)=WTXG(X)=W^TXG(X)=WTX 其中W是权向量,X是样本集合.感知器算法的问题在于如何求解权向量,我们可以通过已预分类的训 ...

  2. 模式识别+Matlab 感知器算法/LMSE算法

    更新时间:2020/5/20 一.分类器 1.基于赏-罚概念的感知器算法 算法原理简介: MATLAB代码实现: clc; clear all; %%初始化 %w1=[1 0 1;0 1

  3. 利用MATLAB实现感知器算法

    利用MATLAB实现感知器算法 % 感知器算法 clc;clear;close all; [Number,X11,X12,X21,X22]=textread('data2.txt','%f%f%f%f ...

  4. 模式识别感知器算法matlab,模式识别第三章-感知器算法.doc

    模式识别第三章-感知器算法 模式识别第三章 感知器算法 一.用感知器算法求下列模式分类的解向量w: 将属于的训练样本乘以(-1),并写成增广向量的形式: ,,, ,,, 第一轮迭代:取, 因不大于0, ...

  5. 感知器算法(Perceptron)

    目录 引言 感知器 Matlab代码 效果展示 Python代码 效果展示 C++代码 效果展示 引言 本专栏第二个机器学习算法:感知器算法,全部代码通过Github下载,使用Matlab,Pytho ...

  6. 人工神经网络—感知器算法

    感知器算法 1. 回顾 2. 感知器算法 2.1 感知器算法的实现步骤 2.2 算法能停得下来吗? 2.3 基于增广向量的感知器算法 2.4 感知器算法收敛定理 3. 感知器算法收敛的MATLAB程序 ...

  7. 神经网络感知器算法调整原理是什么

    算法调整原理 如果点分类正确,则什么也不做. 如果点分类为正,但是标签为负,则分别减去 αp,αq, 和 α 至 w_1, w_2,w1​,w2​, 和 bb 如果点分类为负,但是标签为正,则分别将α ...

  8. Perceptron Algorithm 感知器算法及其实现

    Rosenblatt于1958年发布的感知器算法,算是机器学习鼻祖级别的算法.其算法着眼于最简单的情况,即使用单个神经元.单层网络进行监督学习(目标结果已知),并且输入数据线性可分.我们可以用该算法来 ...

  9. 局部加权回归、逻辑斯蒂回归、感知器算法—斯坦福ML公开课笔记3

    转载请注明:http://blog.csdn.net/xinzhangyanxiang/article/details/9113681 最近在看Ng的机器学习公开课,Ng的讲法循循善诱,感觉提高了不少 ...

最新文章

  1. Android自动填充短信验证码
  2. vue截取一个字符串_vue如何截取字符串
  3. CSS Sprite “精灵图“
  4. 【转】DB2学习路线
  5. Hyperloop,让发布简洁高效
  6. 联合概率分布的学习笔记
  7. 树莓派与 Python —— GPIO
  8. 重新组织和重新生成索引sp_RefreshIndex
  9. Docker 镜像地址修改
  10. Highlight Plus - Unity3D物体高亮插件使用教学
  11. 【三维目标检测可视化】三维点云目标检测与图像融合可视化
  12. linux系统进入图文界面,Linux启动界面切换:图形界面-字符界面
  13. GoDaddy域名转出教程 - 解锁、获取转移码、快速确认转出
  14. 模块1--BH1750的应用(IIC)
  15. java优先队列 PriorityQueue详解(附图)
  16. 用Qt写一个简单的音乐播放器(三):增加界面(播放跳转与音量控制)
  17. 学习就是这样一条时而郁郁寡欢,时而开怀大笑的路
  18. SQL CHECK 约束
  19. 计算机考研408专业课 思维导图
  20. select * from dual (转)

热门文章

  1. while循环以及方法
  2. 文档服务器minio 可通过文件路径进行访问
  3. matlab 四元数叉乘,四轴飞行玩具的姿态解算的原理3. 点乘与叉乘;四元数
  4. 萧秋雨----四方友金
  5. 设计模式---中介者模式
  6. CTE 2.0 已发布
  7. 中兴新支点Linux桌面操作系统,中兴新支点Linux桌面操作系统,小白也能轻松上手...
  8. linux刻录win10u盘_如何用ultraiso制作一个系统U盘?WIN10系统U盘制作图文教程
  9. 数据结构 浙江大学 2019春期中考试
  10. ADAU1860调试心得(2)硬件和软件的详细说明