查看原文
其他

ENVI/IDL笔记(7)基于IDL的非监督分类(K-mean法)

小煤球云丹 测绘地信 2019-06-30

在生活中我们会经常遇到分类的问题,把某些具有相似属性的物体归到一类,便于处理。在遥感影像处理中,我们同样会面临分类的问题,根据有无先验类别(训练场地)来分为监督分类和非监督分类。对于海量的、没有先验类别作为样本的条件下,即事先不知道类别特征,主要根据像元间相似度的大小进行合并(相似度大的归为一类)的方法叫做非监督分类。本文以K-means为例进行说明。

 
K-means

1


基本原理

K-Means算法是以距离作为相似度的评价指标,用样本点到类别中心的误差平方和作为聚类好坏的评价指标,通过迭代的方法使总体分类的误差平方和函数达到最小的聚类方法。

其算法步骤如下:

❶从集合(x1, x2, …, xn)中随机取k个元素,作为k个类别的各自的中心。

❷聚类。分别计算集合中每一个元素到k个类别中心的距离,将这些元素分别划归到距离最小的那一个类别中去,这个过程其实是一个重新聚类的过程。

❸更新类别中心。根据前面聚类的结果,重新计算每一个类别的中心,计算方法是取当前类别中所有元素,然后计算这些元素在每一个维度的平均值。每一个类别中心都重新计算一遍后,就得到了一个新的类别中心组 。

❹重复第2,3步,直到聚类结果不再发生变化,这样得到的类别中心,基本上就是我们最后想要找的类别中心。

2

envi_doit

例程envi_doit用于对ENVI文件进行监督分类或非监督分类

语法:

envi_doit,'class_doit',fid=file fid,dims=array,pos=array,r_fid=variable,out_name=string,/in_memory,method={0|1|2|3|4|5|6|7|8},m_fid=file id,m_pos=value,class_names=string array,lookup=array,out_bname=string
关键字lookup用于设置各个类别颜色值,method设置分类方法(见下表)。

3

K-means关键字

num_classes=integet,iterations=integer,change_thresh=floating point{0.0to 1.0},thresh=value,std_mult=floating point
关键字num_classes设置分类数目,关键字iterations设置迭代最大次数,关键字change_thresh设置阈值(0~100%)。

4

method

分类方法

0平行六面体法
1最小距离法
2最大似然法
3波谱角分类法
4ISODATA法
5马氏距离法
6二值编码法
7K-mean法
8光谱信息散度法

本文中TM数据为例,进行演示。

参考代码



                   ▲非监督分类拉伸前                                              ▲非监督分类拉伸后

K-mean法优缺点

1

优点

♂无需对分类区有较多的了解,仅需一定的知识来解释分类出现的集群组;

♂人为误差减少,需输入的初始参数较少;

♂可形成范围很小但有独特光谱特征的集群,所分的类别比监督分类的类别更均质;

♂独特的覆盖量小的类别均能够被识别

1

缺点

♀ 对其结果需进行大量分析及后处理,才能得到可靠分类结果;

♀存在同物异谱及异物同谱现象,使集群组与类别的匹配难度大;

♀ 不同图像间的光谱集群组无法保持其连续性,难以对比。



    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存