【 kmeans实现遥感图像分类(matlab实现)】

Author:HanDi
上海某高校遥感专业 工科男
相信积微者速成,相信分享的力量
CSDN@这可真是难为我了

数据挖掘课上一个小实验,用matlab自带的kmeans函数实现遥感图像分类,代码总体简单整洁,注释详细,可轻松修改自用,但是我觉得自己选的分类结果颜色是丑了点,大家可以通过修改colormap自定义颜色,包括colorbar。

从图中不难看出,最后效果图没有经过分类后处理,有很多细小和破碎斑块,使得分类结果的视觉效果不是那么好,大家可以想想如何改进,欢迎交流!

下节预告,理解kmeans原理的基础上,自己编写kmeans函数用于分类

初次写技术博客没有什么经验,如有不足,还请大家多多包涵,欢迎大家私信交流 ^ _ ^ !!!一起进步~
以后会分享一些地理数据处理和数据挖掘的示例

下面是完整代码,我的MATLAB版本是 2021a

这里是原始示例数据
链接:https://pan.baidu.com/s/1_c6vPYuZrQvCMsEoA2STFg?pwd=tmjs
提取码:tmjs

clc
clear
tic
[A,R] = readgeoraster('test2014.tif'); %打开tiff文件
[lines,rows,bands] = size(A); %读取遥感图像的结构
data = []; %存储数据,n*p维,n表示样本数,p表示特征,这里特征为7,每个像元都有7个波段
for i = 1:bands %循环读取每个波段
    data = [data reshape(A(:,:,i),lines*rows,1)]; %对波段降维
end
data = double(data); %转为双精度浮点,便于kmeans函数计算
band1 = A(:,:,1); %这三句只是为了读取波段,观察上述过程改变矩阵维度是否正确
band2 = A(:,:,2);
band3 = A(:,:,3);
%使用kmeans算法聚类,Idx是聚类后的结果,C为质心位置,
%sumD为该类所有点与质心的距离之和,D为该类的点与质心的距离
%采用欧氏距离作为距离评判标准,一共分为6类,迭代3次,rep = Replicates 即重复聚类次数(可以理解为重复程序多次取平均)
[Idx,C,sumD,D] = kmeans(data,6,'dist','sqEuclidean','rep',3);
%Idx为m个整数,且属于1到K之间的数;sumD为1*K的和向量,存储的是类内所有点与该类质心点距离之和;
result = reshape(Idx,lines,rows); %把样本对应的土地利用编号对应到遥感图像上
imagesc(result); %显示聚类结果
title('聚类结果');
%tabulate 是Frequency table函数,显示向量中存在的数及其占比
tabulate(Idx(:)) %显示各类别的像元总数及所占的百分比
hAxes = gca;
colormap(hAxes , [207/255 165/255 35/255; 170/255 251/255 164/255; 1 1 1;73/255 157/255 250/255; 1 0 0; 32/255 121/255 63/255] )
c = colorbar;
c.ticks = [1,2,3,4,5,6];
toc

代码运行效果

【 kmeans实现遥感图像分类(matlab实现)】

如有错误,欢迎评论,私信,会及时改正

Original: https://blog.csdn.net/weixin_42183989/article/details/122512576
Author: 这可真是难为我了
Title: 【 kmeans实现遥感图像分类(matlab实现)】

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/663026/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球