【图像分割】基于K-means算法实现遥感图像分类附Matlab代码
一 实验目的:利用matlab软件,通过K-means算法的方法处理给定的7幅遥感图像,将其分成水域、居民区和其他三类区域。二 实验方法:1 遥感图像的分类[1]遥感图像是通过反映地物光谱信息的像元亮度值及反映地物空间信息的像元空间变化来表征不同地物的。对遥感图像中各类地物的光谱信息和空间信息进行分析,选择特征(能够反映地物光谱信息和空间信息并可用于遥感图像分类处理的变量),并用一定的方式将特征空
✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知,完整Matlab代码及仿真咨询内容私信。
🌿 往期回顾可以关注主页,点击搜索
⛄ 内容介绍
一 实验目的:
利用matlab软件,通过K-means算法的方法处理给定的7幅遥感图像,将其分成水域、居民区和其他三类区域。
二 实验方法:
1 遥感图像的分类[1]
遥感图像是通过反映地物光谱信息的像元亮度值及反映地物空间信息的像元空间变化来表征不同地物的。对遥感图像中各类地物的光谱信息和空间信息进行分析,选择特征(能够反映地物光谱信息和空间信息并可用于遥感图像分类处理的变量),并用一定的方式将特征空间划分为互不重叠的子空间,然后将图像中各个像元划归到各个子空间去。这就是图像分类。其理论依据是:遥感图像中的同类地物在相同的条件下,应具有相同或相似的光谱和空间信息特征,从而表现出同类地物的某种内在的相似性,将集群在同一特征空间区域;而不同类的地物其光谱和空间信息特征不同,将集群在不同的特征空间区域。
在遥感图像的分类中,按照是否有已知训练样本的分类数据,分类方法可分为:监督和非监督两大类。我们所进行的卫星核查方面的研究,缺少一定的训练样本,所以一般只能采用非监督分类的方法。非监督分类方法快速简单具有一定的精度,可作为监督分类的重要补充手段。常用的处理方法有:平行六面体分类、简单均方差阈值分类、动态聚类分类,每种分类方法各有优缺点。对于遥感图像使用动态聚类方法比较理想。
2 动态聚类
动态聚类分析可通过分析像元的类似度(距离)一次完成像元的归并分类,也可以多次完成。我们的作法是先按某些原则选择一些代表点作为聚类的核心,然后把其余的待分点按某种方法(判据准则)分到各类中去,完成初始分类。初始分类完成以后,重新计算各聚类中心,把各点按初始判据重新分到各类,完成了第一次迭代。然后再修改聚类中心,再进行下一次迭代,用来对上次分类结果进行修改。如此反复进行,直到最后满意为止。动态聚类算法是一种普遍采用的方法,具有以下三个要点:
(1) 选定某种距离度量作为样本间的相似性度量。
(2) 确定某个评价聚类结果质量的准则函数。
(3) 给定某个初始分类,然后用迭代算法找出使准则函数取极值的最好聚类结果。
动态聚类方法有很多,并且还在不断地发展,各种分类方法各有优缺点,其中K-means和ISO-DATA算法是目前较为成熟的两种动态聚类方法。通过从模型上进行的分析比较发现:K-means及ISODATA算法的优点在于把分析判别的统计聚类算法和简单多光谱分类融合在一起,使聚类更准确、客观。
3 K-means算法(本实验所用的方法)
K-means算法是一种较典型的逐点修改迭代的动态聚类算法,也是一种普遍采用的方法,其要点是以误差平方和为准则函数。一般的作法是先按某些原则选择一些代表点作为聚类的核心,然后把其余的待分点按某种方法(判据准则)分到各类中去,完成初始分类。初始分类完成以后,重新计算各聚类中心,完成了第一次迭代。然后修改聚类中心,以便进行下一次迭代。这种修改有两种方案,即逐点修改和逐批修改。逐点修改类中心就是一个像元样本按某一原则归属于某一组类后,就要重新计算这个组类的均值,并且以新的均值作为凝聚中心点进行下一次像元聚类。逐批修改类中心就是在全部像元样本按某一组的类中心分类之后,再计算修改各类的均值,作为下一次分类的凝聚中心点。采用了以下K-means算法:
⛄ 部分代码
clear all;
s=imread('L1.bmp');
s=double(s);
X1=20;
X2=45;
X3=90;
num1=0;
num2=0;
num3=0;
[M,N]=size(s);
R=zeros(M,N);
a=10;
b=20;
counter=0;
format long;
while(abs(b-a)>0.001)
counter=counter+1
a
b=a;
a=0;
for i=1:M
for j=1:N
%-------------------------------------------------------
p1=(s(i,j)-X1).^2;
p2=(s(i,j)-X2).^2;
p3=(s(i,j)-X3).^2;
min_p=min([p1,p2,p3]);
if (p1==min_p)
R(i,j)=1;
num1=num1+1;
elseif (p2==min_p)
R(i,j)=2;
num2=num2+1;
elseif (p3==min_p)
R(i,j)=3;
num3=num3+1;
end
a=a+sqrt(min_p);
end
end
X1=X1*0;
X2=X2*0;
X3=X3*0;
a=a/M/N;
%---------------------------------------------------
for i=1:M
for j=1:N
if (R(i,j)==1) X1=X1+s(i,j);
elseif (R(i,j)==2) X2=X2+s(i,j);
elseif (R(i,j)==3) X3=X3+s(i,j);
end
end
end
X1=X1/num1; num1=0;
X2=X2/num2; num2=0;
X3=X3/num3; num3=0;
end
r=zeros(M,N);
for i=1:M
for j=1:N
if (R(i,j)==1) r(i,j)=30;
elseif(R(i,j)==2) r(i,j)=100;
elseif(R(i,j)==3) r(i,j)=200;
end
end
end
r=uint8(r);
figure;
imshow(r);
imwrite(r,'r1.bmp');
⛄ 运行结果
通过K-means算法,并用matlab程序来实现,将给定了7幅遥感图像通过处理,分成水域、居民区和其他三类区域。并用RGB彩色进行标记划分,这样看起来更易识别。
上述的K-means算法是在类别数k给定的情况下进行的。当类别数未知的情况下,在使用k-均值算法时,可以假设类别数是逐步增加的。例如,对k=1,k=2,k=3,… ,分别使用该算法。显然,准则函数是随k的增加而单调地减少的。当数据集表现为k′个很集中的聚类时, 随着从一个聚类增加到k′个聚类而迅速减少。当k再增加时,相当于将本来是较密集的类再行分开。因此Je虽有所减少,但减少的速度比较缓慢,直到k=N时, 等于0。如果作一条~k的曲线,其拐点对应的就是最优的聚类数。
K-means分类方法简便易行,实践表明该方法对卫星数据分类处理效果很好,在地球物理和地质探查分析中获得了成功应用。
⛄ 参考文献
[1] 陈华,陈书海,张平,严卫东. K-means算法在遥感分类中的应用. [J].红外与激光工程,2000,29.
⛳️ 代码获取关注我
❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料
🍅 仿真咨询
1.卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断
2.图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知
3.旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划
4.无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配
5.传感器部署优化、通信协议优化、路由优化、目标定位
6.信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号
7.生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化
8.微电网优化、无功优化、配电网重构、储能配置
9.元胞自动机交通流 人群疏散 病毒扩散 晶体生长
更多推荐
所有评论(0)