面向对象影像分类

  • 格式:doc
  • 大小:2.77 MB
  • 文档页数:13

面向对象影像分类
面向对象的影像分类是在面向对象特征提取的基础上进行的。在分类之前,必须根据
需要提取的地物类别,选择合适的尺度和合适的特征,然后根据地物类别的性质,设计好分
类策略和步骤。对于给出的实验数据,我们的要求是分成草地、道路、房屋和湖泊四个类,
根据面向对象特征提取中的经验可以发现,在Object Features -> Layer Values -> Mean ->
Layer 3上可以很好地将草地/湖泊和道路/房屋分开,然后根据Object Features -> Geometry ->
Extent -> Length/Width提取道路,因此分类策略是:先将草地/湖泊和道路/房屋分开,然后
再分别针对草地/湖泊和道路/房屋的特征,将草地和湖泊、道路和房屋分开。
具体分类步骤如下:
1、多尺度分割:按照面向对象特征提取中的步骤,设置三个尺度100、70和50,并进
行分割,分别得到L1、L2和L3层尺度影像,在尺度层网络中,L1尺度最大,在最上面,
往下分别是L2和L3。最后的分类结果需要集中显示在一个层,因此还需要再加一个尺度层,
只不过这个尺度层不纳入上面的尺度层网络中。在Process Tree中点右键,选择Append New,
算法选择Segmentation -> multiresolution segmentation,Image Object Domain设为pixel level,
尺度设为40,新层的名称为L4,同时运行该分割,得到L4层的分割结果。
2、在Class Hierarchy中添加4个类,右键点击空白处,选择Insert Class,在弹出的对
话框中分别命名为level1、level2、level3和level4,颜色都选择为灰白色:
3、给三个类层次添加level属性:双击level1类,双击Contained -> add(min),弹出Insert
Expression对话框,依次选择Object features -> Hierarchy -> level,双击level,打开Membership

function,单击按钮,在处输入3和5,表
示该函数的值为4,点击OK按钮,即完成给level1类添加level属性的操作。
这里level1类的level属性值为4,是因为整个分类过程要分成四个层次,如下图所示:

在level1层,将人工目标(道路、房屋)与非人工目标(草地、湖泊)区分开;在level2
层设置非人工1,该类完全继承了level1中的非人工,在非人工1上再将草地1和湖泊1区
分开;在level3层设置人工1,该类完全继承了level1中的人工,在人工1上再将道路1和
房屋1区分开;在level4层为最终的分类层,其中草地和湖泊完全继承了level2中的草地1
和湖泊1,道路和房屋完全继承了level3中的道路1和房屋1。因此在这个层次结构中,level1
处于最上层,所以level属性值为4,区间为3到5,依次类推,level2的level属性值为3,
level3的level属性值为2,level4的level属性值为1。按照这个属性值分别设置完level1至
level4的所有level属性。需要注意的是,Class Hierarchy视图有Group和Inheritance两个标
签,这两个标签类的这种层次结构应该是一致的,否则会出错。在编辑每个类的属性时,都
可以通过双击这两个标签中类的名称,但是在一个标签中改变类的层次结构,在另一个标签
中却不会出现相应的改变,因此需要手动改变。
4、添加level1类的规则:双击“人工”,在弹出的对话框中依次双击add(min),Threshold,
Object Features -> Layer Values -> mean,如下图:

双击Layer 3,在弹出的对话框中设置如下,点击OK。
双击“非人工”,在弹出的对话框中依次双击add(min),Similarity to classes -> 人工,
如下图:
此时即设置“非人工”与“人工”具有相同的性质,而实际上它们应该具备相反的性
质,因此需要设置“非人工”为“人工”的反义。在add(min) -> 人工 上右键,选择Invert
Expression,此时变成了“not 人工”,即完成取反。
5、对level1层次进行分类:在Process Tree中右键选择Append New,弹出的对话框中
Algorithm选择Basic Classification -> Classification,Algorithm Parameters中的Active Classes
选择“人工”与“非人工”,点击OK。
在Process Tree的新增加的一条记录上点右键,选择
Execute,得到level1层的分类结果,如下图,可以看出,道路和房屋等人工目标以红色显
示,非人工目标为灰白色。

6、level2层次分类:将设置为L2层。首先将“非人工1”完全继
承level1中的“非人工”。双击“非人工1”,双击add(min),双击threshold,选择class-related
features -> relations to super objects,双击Create new “Existence of”,在Class中选择“非人
工1”,Distance设置为1,点击OK,如下图:
弹出如下的对话框:
这里设置为“=1”,表示完全将“非人工1”类继承下来。
设置“湖泊1”的规则:双击Feature View视图中的Object Features -> Layer Values -> mean
-> layer 1,可以发现湖泊在该特征上的值非常低,均低于36,而草地的值高于36,因此用
该特征可以将草地与湖泊分开。双击“湖泊1”,依次双击add(min) -> Threshold -> Object
features -> Layer Values -> Mean -> Layer 1:
在弹出的对话框中设置为“<36”,如下图,点击OK。
然后将“草地1”设置为“湖泊1”的反义,具体设置参照步骤4,设置好的规则结果
如下图:
应用level2的分类:在Process Tree中右键选择“Append New”,Algorithm中选择Basic
Classification -> classification,Algorithm Parameters中的Active Classes中选择“草地1,湖
泊1”,如下图:
此时Process Tree中多了一条记录,,右键选择Execute,查
看level2层的分类结果,如下图:

7、level3的分类:将设置为L3,按照步骤6,将“人工1”完全
继承level1中的“人工”,有一点不同的是,在下面的对话框中,Distance应该设置为2,因
为level3和level1的层间距离为2,其余的设置是一样的:

设置“道路1”的规则:由于道路对象具有长条的形状,因此可以使用Object features ->
Geometry -> Extent -> Length/Width特征,大于6可以认为是道路,否则可以认为是房屋,
设置好的规则如下:
设置“房屋1”为“道路1”的反义,具体操作参见步骤4
使用规则进行分类:在Process Tree中右键选择Append New,Algorithm中选择Basic
Classification -> classification,Algorithm Parameters中的Active Classes中选择“道路1,房
屋1”,如下图:
此时Process Tree中多了一条记录,,右键选择Execute,查看
level3层的分类结果,如下图:

到此需要分类的地物都已经在不同的尺度层上区分出来,最后一步就是在level4层上将
上述处理的结果进行继承,得到最终的分类图。

8、level4分类:将设置为L4。双击“草地”,依次双击add(min) ->
Threshold -> class-related features -> relations to super objects,双击Create new “Existence of”,
在Class中选择“草地1”,设置Distance为2。其他地物的继承方式同“草地”,不同的是
Distance,草地和湖泊的Distance为2,道路和房屋的Distance为1。
按规则分类:在Process Tree中右键选择Append New,Algorithm中选择Basic
Classification -> classification,Algorithm Parameters中的Active Classes中选择“道路,房屋,
草地,湖泊”,如下图:
此时Process Tree中多了一条记录,,右键选择
Execute,查看level4层的分类结果,即为最终的分类结果。如下图: