可以将多源数据用于影像分类当中,这就是专家知识的决策树分类器,本专题以ENVI中Decision Tree为例来叙述这一分类器。
本专题包括以下内容:
基于知识的决策树分类是基于遥感影像数据及其他空间数据,通过专家经验总结、简单的数学统计和归纳方法等,获得分类规则并进行遥感分类。分类规则易于理解,分类过程也符合人的认知过程,最大的特点是利用的多源数据。
如图1所示,影像+DEM就能区分缓坡和陡坡的植被信息,如果添加其他数据,如区域图、道路图土地利用图等,就能进一步划分出那些是自然生长的植被,那些是公园植被。
专家知识决策树分类的步骤大体上可分为四步:知识(规则)定义、规则输入、决策树运行和分类后处理。
(1) 知识(规则)定义
规则的定义是讲知识用数学语言表达的过程,可以通过一些算法获取,也可以通过经验总结获得。
(2) 规则输入
将分类规则录入分类器中,不同的平台有着不同规则录入界面。
(3) 决策树运行
运行分类器或者是算法程序。
(4) 分类后处理
这步骤与监督/非监督分类的分类后处理类似。
分类规则获取的途径比较灵活,如从经验中获得,坡度小于20度,就认为是缓坡,等等。也可以从样本中利用算法来获取,这里要讲述的就是C4.5算法。
利用C4.5算法获取规则可分为以下几个步骤:
(1)多元文件的的构建:遥感数据经过几何校正、辐射校正处理后,进行波段运算,得到一些植被指数,连同影像一起输入空间数据库;其他空间数据经过矢量化、格式转换、地理配准,组成一个或多个多波段文件。
(2)提取样本,构建样本库:在遥感图像处理软件或者GIS软件支持下,选取合适的图层,采用计算机自动选点、人工解译影像选点等方法采集样本。
(3)分类规则挖掘与评价:在样本库的基础上采用适当的数据挖掘方法挖掘分类规则,后基于评价样本集对分类规则进行评价,并对分类规则做出适当的调整和筛选。这里就是C4.5算法。
4.5算法的基本思路基于信息熵来“修枝剪叶”,基本思路如下:
从树的根节点处的所有训练样本D0开始,离散化连续条件属性。计算增益比率,取GainRatio(C0)的最大值作为划分点V0,将样本分为两个部分D11和D12。对属性C0的每一个值产生一个分支,分支属性值的相应样本子集被移到新生成的子节点上,如果得到的样本都属于同一个类,那么直接得到叶子结点。相应地将此方法应用于每个子节点上,直到节点的所有样本都分区到某个类中。到达决策树的叶节点的每条路径表示一条分类规则,利用叶列表及指向父结点的指针就可以生成规则表。
图2规则挖掘基本思路
算法描述如下:
算法:从空间数据集(多波段文件)中挖掘分类规则
输入:训练样本
输出:分类规则表
方法:
一、读取数据集名字
二、读取所有的训练样本
A、读取属性信息C、原始类E、样本值A,并将样本划分为训练样本(2/3)和评价样本(1/3)。
B、属性信息C可以是连续(DISCRETE)或离散(CONTINUOUS)的,分别将属性注上这两种标记;若属性是DISCERTE,读取其可能取得值,并都存储在一个列表中;每一个属性都有一个标记,一个给定的属性编号及初始化的取值列表均存储于一个属性的数据结构中,并将数据结构存储在一个哈希表中。
C、原始类E当作一个附加属性信息储存在属性列表中。
D、以增量方式读取每一个样本A,将所有的样本储存在一个表中,每一行代表一个样本。
三、利用数据集构建树
A、离散化连续条件属性C DISCRETE,获得的分割点集T(t1,t2……)作为条件属性C的新的取值。
B、分别计算所有条件属性的增益比率GainRatio(C),取增益比率值最大的条件属性作为树的划分节点,其值或范围作为划分值V(v1,v2……)来生成树的分枝。
C、判断该层与每一个等价子集的原始类类别是否一致。若一致,生成叶子结点。否则,继续计算增益比率GainRatio(C)和选择条件属性C,得到树的节点和划分值V,直至所有的样本已分类完毕。
四、测试生成树
将测试样本C′带入树中,当某一测试样本的分类预测错误时,记录分类错误的计数,并将测试样本添加到训练样本中,转向步骤三,重新构建树。否则,输出分类树
五、抽取分类规则
到达树的叶节点的每条路径表示一条分类规则从树中抽取分类规则,打印规则和分类的详细信息
C4.5网上有源代码下载,vc和c++版本都能获得。
以ENVI5.0为操作平台,ENVI classic、ENVI4.8及以下版本类似。
选取Landsat TM5影像和这个地区对应的DEM数据,影像和DEM经过了精确配准。
规则如下描述:
Class1(朝北缓坡植被):NDVI>0.3, slope<20, aspect<90 and aspect>270
Class2(非朝北缓坡植被):NDVI>0.3, slope<20, 90<=aspect<=270
Class3(陡坡植被):NDVI>0.3, slope>=20,
Class4(水体):NDVI<=0.3, 0
Class5(裸地):NDVI<=0.3, b4>=20
Class6(无数据区,背景): NDVI<=0.3, b4=0
也可以按照二叉树描述方式:第一层,将影像分为两类,NDVI大于0.3,NDVI小于或等于0.3;第二层,NDVI高的,分为坡度大于或等于20度和坡度小于20度。以此往下划分。
启动Toolbox/Classification/Decision Tree/New Decision Tree打开决策树分类工具,如图3所示,默认显示了一个节点。
图3 Decision Tree界面
首先我们按照NDVI的大小划分第一个节点,单击Node1,跳出图4对话框,Name为NDVI>0.3,在Expression中填写:{ndvi} gt 0.3。
点击OK后,会提示你给{ndvi}指定一个数据源,如图5所示,点击第一列中的变量,在对话框中选择相应的数据源,这样就完成第一层节点规则输入。
图5指定数据源
Expression中的表达式是有变量和运算符(包括数学函数)组成,支持的运算符如表1所示
表达式 |
部分可用函数 |
基本运算符 |
+、-、*、/ |
三角函数 |
正弦Sin(x)、余弦cos(x)、正切tan(x) 反正弦Asin(x)、反余弦acos(x)、反正切atan(x) 双曲线正弦Sinh(x)、双曲线余弦cosh(x)、双曲线正切tanh(x) |
关系/逻辑 |
小于LT、小于等于LE、等于EQ、不等于NE、大于等于GE、大于GT and、or、not、XOR 最大值(>)、最小值(<) |
其他符号 |
指数(^)、自然指数exp 自然对数对数alog(x) 以10为底的对数alog10(x) 整形取整——round(x)、ceil(x) 平方根(sqrt)、绝对值(adb) |
表1运算符
ENVI决策树分类器中的变量是指一个波段的数据或作用于数据的一个特定函数。变量名必须包含在大括号中,即{变量名};或者命名为bx,x代表数据,比如哪一个波段。如果变量被赋值为多波段文件,变量名必须包含一个写在方括号中的下标,表示波段数,比如{pc[2]}表示主成分分析的第一主成分。支持特定变量名如表2,也可以通过IDL自行编写函数。
变量 |
作用 |
slope |
计算坡度 |
aspect |
计算坡向 |
ndvi |
计算归一化植被指数 |
Tascap [n] |
穗帽变换,n表示获取的是哪一分量。 |
pc [n] |
主成分分析,n表示获取的是哪一分量。 |
lpc [n] |
局部主成分分析,n表示获取的是哪一分量。 |
mnf [n] |
最小噪声变换,n表示获取的是哪一分量。 |
Lmnf[n] |
局部最小噪声变换,n表示获取的是哪一分量。 |
Stdev [n] |
波段n的标准差 |
lStdev [n] |
波段n的局部标准差 |
Mean [n] |
波段n的平均值 |
lMean [n] |
波段n的局部平均值 |
Min [n]、max [n] |
波段n的最大、最小值 |
lMin [n]、lmax [n] |
波段n的局部最大、最小值 |
表2变量表达式
第一层节点根据NDVI的值划分为植被和非植被,如果不需要进一步分类的话,这个影像就会被分成两类:class0和class1。
对NDVI大于0.3,也就是class1,根据坡度划分成缓坡植被和陡坡植被。在class1图标上右键,选择Add Children。单击节点标识符,打开节点属性窗口,Name为Slope<20,在Expression中填写:{Slope} lt 20。
同样的方法,将所有规则输入,末节点图标右键Edit Properties,可以设置分类结果的名称和颜色,最后结果如图6所示。
图6规则输入结果图
选择Options->Execute,执行决策树,跳出图7所示对话框,选择输出结果的投影参数、重采样方法、空间裁剪范围(如需要)、输出路径,点击OK之后,得到如图8所示结果。在决策树运行过程中,会以不同颜色标示运行的过程。
图7输出结果
图8决策树运行结果
回到决策树窗口,在工作空白处点击右键,选择Zoom In,可以看到每一个节点或者类别有相应的统计结果(以像素和百分比表示)。如果修改了某一节点或者类别的属性,可以左键单击节点或者末端类别图标,选择Execute,重新运行你修改部分的决策树。
图9运行决策树后的效果
分类后处理和其他计算机分类类似的过程。
决策树分类主要的工作是获取规则,下面介绍使用CART算法获取规则,下图是总体流程。
在获取规则过程中,由于计算量较大,我们推荐裁剪一部分较典型区域作为实验区获取规则,之后将这个规则应用于整个图像区域。
将数据进行预处理工作,如几何校正、多源数据的配准、工程区裁剪等,之后构建多元数据集。如这里的数据集由蓝、绿、红、近红外四个波段、NDVI、ISODATA非监督分类结果、DEM组成。通过Layerstacking工具将7个波段组合成一个多波段文件,并裁剪一部分典型区域。
这里使用CART算法获取规则,首先安装ENVI下的CART扩展工具,下载地址:http://vdisk.weibo.com/s/lO3a2,将解压后的文件拷贝到ENVI安装目录下的Save_Add文件夹内,重新启动ENVI。
注:为了方便选择ROI样本,这里在ENVI classic下操作。
在实验区影像中选择一定数量的训练样本,利用训练样本获取专家知识规则。
(1) 在Display中显示裁剪的实验区影像,在Image视窗中单击Overlay->Region of Interest。在ROI Tool面板中,分别选择5个类型的训练样本(如下图),训练样本的可分离度在1.8以上。
图11训练样本
(2) 选择ENVI主菜单->Classification->Decision Tree->RuleGen ->Classifier,选择实验区影像。
(3) 选择决策树输出路径及文件名,单击OK执行。
注:由于此工具包基于4.4版本开发,在之后版本上运行完得到决策树文件之后会自动退出ENVI,不影响决策树规则文件的使用。
图12运行CART工具
(4) 选择ENVI主菜单->Classification->Decision Tree->Edit Existing Decision Tree,打开从实验区获取的决策树规则,如下图13。
(5) 在ENVI Decision Tree面板中,选择Options->Execute,执行决策树。
(6) 对分类结果进行验证,类似选择训练样本,选择一部分ROI作为验证样本。选择主菜单->Classification->Post Classification->Confusion Matrix,计算精度验证混淆矩阵。
精度达到要求,规则的获取工作就完成了。
这一步是将获取的规则应用于整个图像。
(1) 选择ENVI主菜单->Classification->Decision Tree->Edit Existing Decision Tree,打开从实验区获取的决策树规则。
(2) 选择Options->Show Variable/File Pairings,单击第一列中的变量,全部替换为整个影像中对应的波段。
(3) 选择Options->Execute,执行决策树,得到最终的土地覆盖结果。
图14修改变量
图15分类结果
分类后处理根据需求选择,包括更改类别颜色、分类统计分析、小斑点处理(类后处理)、栅矢转换、精度验证等操作。这里不一一叙述了。