天天看点

简述isodata算法的原理_ISODATA算法的实现与分析

摘要:ISODATA算法是目前应用比较广泛的,通过引入参数而进行人机交互不断进行分裂与合并的非监督分类算法。本文介绍了ISODATA基本原理与具体实现的过程,并用对参数设定的影响进行了试验和分析。

关键词:ISODATA 非监督分类 算法 模式识别

一、原理介绍

Isodata,迭代自组织分析,通过设定初始参数而引入人机对话环节,并使用归并与分裂的机制,当某两类聚类中心距离小于某一阈值时,将它们合并为一类,当某类标准差大于某一阈值或其样本数目超过某一阈值时,将其分为两类。在某类样本数目少于某阈值时,需将其取消。如此,根据初始聚类中心和设定的类别数目等参数迭代,最终得到一个比较理想的分类结果。

二、算法设计

第一步:将 个模式样本{ ,i=1,2,3,…,

}读入,确定C个初始聚类中心和6个初始参数(K,θN,θc,θs,L,I)。

第二步:将N个模式样本分给最近的聚类,假如Dj=min(‖x-zj‖,i=1,2,…,), 即‖x-zj‖的距离最小,则x∈Sj。

第三步:如果Sj中的样本数Nj

第四步:修正聚类中心值

j=1,2,…,

第五步:计算各聚类域Sj中诸聚类中心间的平均距离:

第六步:计算全部模式样本对其相应聚类中心的总平均距离:

第七步:判别分裂、合并及迭代运算等步骤:

①如迭代运算次数已达I次,即最后一次迭代,置θc = 0,跳到第十一步,运算结束。

②如≤K/2,即聚类中心的数目等于或不到规定值的一半,则进入第八步,将已有的聚类分裂。

③如迭代运算的次数是偶次,或≥2K,不进行分裂处理,跳到第十一步;如不符合以上两个条件(即既

不是偶次迭代,也不是≥2K),则进入第八步,进行分裂处理。

分裂处理:

第八步:计算聚类样本距离的标准差向量:

第九步:求每一标准差向量{,σj=1,2, …,}中的最大分量,以{σj=1,2, …,}代表。

第十步:在任一最大分量集{σj=1,2,

…,}中,如有>θS(该值给定),同时又满足以下二条件中之一:

(a) ,即Sj中样本总数超过规定值一倍以上,

(b)Nc≤K/2,

则将Zj分裂为两个新的聚类中心 ,且类别数加1。 中相当于 的分量,可加上k* σjmax,其中k=0.5; 中相当于

的分量,可减去k*σjmax。如果本步完成了分裂运算,则跳回第二步;否则,继续。

第十一步:计算全部聚类中心的距离:

,i=1,2, …, -1

j=i+1, …,

第十二步:比较 与θc值,将

{ , , …, }

式中, < < …< 。

第十三步:如将距离为Di1j1的两个聚类中心zi1和zj1合并,得新中心为

l=1,2,…,L

式中,被合并的两个聚类中心向量,分别以其聚类域内的样本数加权,使 为真正的平均向量。

第十四步:如果是最后一次迭代运算(即第I次),算法结束。否则GOTO第一步——如果需由操作者改变输入参数;或GOTO第二步——如果输入参数不变。

三、实现方法与过程

1.过程:

(1)该算法需要设置的六个参数为:

K:所想要分成的类别数

θN:一个类别至少应该具有的类别数

θc:聚类中心之间距离的最小值

θs:一个类别中样本标准差最大值

L:每次迭代最多可归并对数

I:最大迭代次数

六个参数默认值为ENVI软件上默认值(K为5,θN为1,θs为0.01,θc为5,I为7,L为1),另设对话框可改变参数。

(2)读入三个波段的bmp影像,其中每个像素即为一个样本,每个波段灰度即为一个特征值。样本数为影像的高度乘以宽度。采用链表记录聚类中心,初始聚类中心设为一类,取第一个像素。

(3)动态申请内存保存对应标号像素当前属于的类别号和每类中样本数,标准差向量,距离等。迭代次数加一。

(4)根据马氏距离按最小距离准则,将像素划分到距其聚类中心最近的一类,将其类别号存入对应数组中。

(5)循环检查每个类别中样本数目是否少于θs,如果是,则将此聚类中心删除,并重新做一次分类;否则继续往下进行。

(6)统计每一类中像素灰度的平均值,作为修正后的聚类中心存入链表。

(7)计算每类中样本到聚类中心距离的平均值和所有样本到相应聚类中心距离的平均值,存入数组。

(8)判断:如果当前迭代次数已到达I次,置θc为0,转入合并,结束。

否则如果当前类别数大于等于2*K或当前迭代次数为偶数,进入合并,否则进入分裂步骤。

(9)按照算法进行判断,如果合符条件,则进行分裂,并跳入第三步,否则往下进行。

(10)计算每两类聚类中心间距离,并记录下其类别编号,然后对聚类中心进行排序(此过程中记录编号的数组也要跟着一起变动)。记录其小于θc对数nL,如nL大于L,则置nL等于L,然后从数组中取nL对类进行合并。

(11)如果是最后一次迭代,结束,按照类别等级赋予不同灰度写成bmp文件;否则,跳至第三步。

2.流程图

输入参数

按最小距离分类

修正聚类中心,计算距离

最后一次

偶数次迭代

分裂运算

合并运算

最后一次

Θc=0

完成

不完成

完成

四、实验与分析

按照初始参数得到三个波段分类影像:

实验1一个波段分类影像:

分析:一个波段特征太少,只能勉强将长江分出来,其他的地方效果都不明显。

实验2(改变迭代次数):

迭代8次影像:

迭代9次:

迭代10次:

分析:从图中可以看出,随着迭代次数的增加,图中地物分得越来越细,直到第10次迭代水库才与居民区分开。但是迭代次数增加的影响,应该是跟我设置的其他参数相关的,因为此次设置的θs比较小(0.01),所以随着迭代次数增加分裂不断进行。迭代次数太小往往没有将分类进行完全,但设置太多又浪费资源和时间。

实验3(修改K):

分类7类影像:

分为8类影像:

分为9类影像:

分析:从图中可以看出,长江与水库,居民区被合并了,K的修改最大的影响应该在第7步判断分裂合并的时候,K增大应该会促使分裂的进行。但是图上的结果,只有长江上游有颗粒出现,由此可见,盲目地增加类别数并不会增强分类效果。

实验4(修改θs):

Θs=0.009:

Θs=0.1

Θs=0.7:

Θs=0.9:

Θs=1:

改变θc为4(初始值为5):

分析:θs的增大,应该会减少分裂的趋势(从θs为0.009到0.01),但是当θs从0.01往后加,却并没有对分类结果产生影响,而且将θc改为4和6时也没有多大变化,因此,这些参数的改变产生的作用,往往不是由这一个参数而决定,而取决于跟其他参数作为一个整体产生的效果。

五、结束语

遥感分类,虽然出现了很多算法,但是从Isodata的算法看起来效果仍然不尽如人意,即使用很多国际上的知名软件,也未必取得一个很满意的效果,原因是影响分类效果的因素太复杂了,而且分类只能以图像所获得的灰度为依据,这个灰度是否准确,以及是否可以考虑像素之间的关系,或者从另一个角度来解译图像(比如频域),都是可以考虑的问题。

参考文献

【1】 曾江源 《ISODATA算法的原理与实现》

【2】 杨晓明 罗云 《ISODATA算法的实现与分析》

【3】 万建 王建成 《基于ISODATA的彩色图像分割》