Matlab K-means聚类算法对多光谱遥感图像进行分类
作者: 白艺亭
测试了下matlab自带kmeans函数,作者编写函数,以及ENVI下的Kmeans方法,对比其效果,代码及结果图展示见下。(K均值聚类的matlab代码,对其算法进行实现。)
1. K-Means无监督聚类算法:
ENVI中,在主菜单上,选择Classification>>Unsupervised>>K-Means,在Classification Input File中选择TM影像,单击OK。打开K-means Parameters对话框中,设置以下的参数:
1)分类数量(Number of Classes):一般为最终输出分类数量的2-3倍。
2)变换阈值(Change Threshold):5。每当一类的变化像元数小于阈值时,结束迭代过程。这个值越小得到的结果越精确,运算量也越大。
3)最大迭代次数(Maximum Iterations):30(我选的).迭代次数越大,精度越高。
4)距离类别的值的最大误差(Maximum Stdev From Mean)。此数可选。
5)允许的最大距离误差:(Maximum Distance Error);可选
6)选择路径,OK执行。
以上参考东腾的博客。
2. 自编matlab函数实现
2.1被调function
function [new_class_label] = Kmeans_of_muldim(data,k,change_threshold,iteration)
% 功能:实现多光谱遥感数据非监督分类算法之K-means聚类算法
%Author: Mr. BAI
% 输入:data是s*fl*b的矩阵,s为列数(sample),fl为行数(fileline),b为波段数(band);
% k 为类别数,如果有背景值,背景值会归到某一地类中去,到时再用矢量边界图形裁剪一下即可。我考虑过将出现次数最多
% 的背景值单独划归一类,但是程序设计时不好判断,取数组中元素出现次数最多的像元为一类,有点大胆,因为无背
% 景的图像像元值也可能出现这种情况;
% change_threshold变化阈值