【软件名称及版本】:ecognition 9.02
【学习内容】:遥感影像变化检测
使用ecognition完成遥感影像的变化检测

开头提醒大家随手保存是个好习惯,我希望我浪费的时间能为您省下一刻

因为中途软件出现了恶行bug导致重做,所有有些命名有些许差异,不过诸位的慧眼一定能明确甄别

1.数据的导入

将需要对比的数据一次性导入,注意路径无中文

CCDC变化检测 python 实现 ecognition变化检测_特征值


2.编辑图层名称

数据导入之后,可以看到共有 10 个图层,为了区分时相和波段名,下面我们根据影像的命名给它们重命名

CCDC变化检测 python 实现 ecognition变化检测_特征值_02


复制地图

(1)查看原始地图

影像加载后,在默认创建的原始地图 main 中,包含了所有影像图层。为了做变化检测,我们需要把 T1 时相和 T2 时相的图层分别装在另外两个地图中,T1 时相的所有图层装在map T1 中,T2 时相的所有图层装在 map T2 中。在view的image layer mixing中可以查看已经导入的图层

CCDC变化检测 python 实现 ecognition变化检测_作用域_03


(2)创建进程目录

在Process Tree中右键,在弹出菜单中点击Append New,创建一个新进程。在Edit Process

中 Name 下一栏输入“copy image”,然后点击 OK。

CCDC变化检测 python 实现 ecognition变化检测_右键_04


(3)添加复制地图进程

在”复制地图”目录进程上右键,从菜单中点击 Insert Child,插入一个子进程。打开 EditProcess 窗口编辑进程。Algorithm 选择 copy map,Target map name 输入”map T1”,Image layers右侧空白栏中点击一下,在弹出的 Select Image Layers 对话框中勾选 B-T1,G-T1,R-T1,NIR-T1,PAN-T1,将其添加进来。

CCDC变化检测 python 实现 ecognition变化检测_特征值_05


在复制地图到 map T1 的进程上右键,从菜单中点击 Append New,同上操作,如下设置

CCDC变化检测 python 实现 ecognition变化检测_CCDC变化检测 python 实现_06


4.查看复制地图结果

执行复制地图进程之后(进程edit下excute即为运行),创建了 map T1。在 Navigate 工具栏中定位到 map T1,然后点击

CCDC变化检测 python 实现 ecognition变化检测_作用域_07

,进行波段组合,里面只有 T1 时相的 5 个图层了,这里可以设置一下波段组合顺序,使用 RGB 合成方式,然后使用 NIR-T1 和 PAN-T1 在绿通道上进行加强。

CCDC变化检测 python 实现 ecognition变化检测_右键_08


map T2也如上操作,rgb通道设置也完全一致,均为绿色加强

第三节 地图分类

1.创建目录进程

在 Process Tree 中,右键点击”copy map”,从菜单中点击 Append New,创建一个新进程。在 Edit Process 中 Name 下一栏输入“Separate classification”,然后点击 OK。

CCDC变化检测 python 实现 ecognition变化检测_作用域_09

在 Process Tree 中,右键点击”Separate classification”,从菜单中点击 Insert Child,创建一个新进程。在 Edit Process 中 Name 下一栏输入“map T1 分类”,同时在作用域限定中将 Map 设置为 mapT1(子进程中就不需要设置了,都是在 map T1 的范围内执行进程),然后点击 OK。

CCDC变化检测 python 实现 ecognition变化检测_右键_10


在 Process Tree 中,右键点击”map T1 Separate”,从菜单中点击 copy,然后再右键点击”mapT1 Separate”,从菜单中点击 Paste。双击后来复制的进程,打开 Edit Process 对话框,在 Name下的一栏中更改为“map T2 Separate”,同时在作用域限定中将 Map 设置为 map T2(子进程中就不需要设置了,都是在 map T2 的范围内执行进程),然后点击 OK。或者完全同上操作(2)map T1 地图分类

在 Process Tree 中右键点击”map T1 Separate”,从菜单中点击 Insert Child,创建一个分割进程,现将 map T1 进行多尺度分割。在 Edit Process 中,设置 Algorithm为multiresolutionsegmentation,算法作用域上不需要设置,算法参数中设置 Level Name 为 Level T1,ImageLayer weights 设置为(B-T1、G-T1、R-T1、NIR-T1 和 PAN-T1 的权重为 1,B-T2、G-T2、R-T2、NIR-T2 和 PAN-T2 时相的权重为 0),然后点击 OK。

CCDC变化检测 python 实现 ecognition变化检测_右键_11

执行完分割进程后,查看 map T1 的分割效果。我们要打开分窗效果,点击主菜单上的Window,在下拉菜单中点击 Spilit Horizontally 和 Side by Side View,然后修改工具栏设置对比一下原始影像和分割效果。

CCDC变化检测 python 实现 ecognition变化检测_作用域_12


2.map T1 创建自定义特征

我们在 map T1 中创建一个 NDVI-T1 特征,用于植被分类。在 Feature View 中双击 Createnew ‘Arithmetic Feature’,打开 Edit Customized Feature 对话框。在 Feature Name 中输入“NDVI-T1”,然后在特征列表中右键点击 Create New Mean,从菜单中点击 Create for AllImage Layers,创建所有图层的对象均值特征,最后在特征公式编辑区域输入 NDVI-T1 的

计算公式:([Mean NIR-T1]-[Mean R-T1])/([Mean NIR-T1]+[Mean R-T1])

(为防止bug,请尽量避免复制)。

编辑完成后点击确定关闭对话框。

CCDC变化检测 python 实现 ecognition变化检测_右键_13


3.map T1 查看植被特征区间

新创建的特征 NDVI-T1 在 Feature View 窗口的 Object features > Customized 目录下,查看该特征值时,可在 NDVI-T1 特征上右键,点击 Update Range,然后在窗口左下角的复选框中点击勾选,激活渲染特征值区间工具。

CCDC变化检测 python 实现 ecognition变化检测_特征值_14


效果如下,不知为何自动填充的特征值和我参考资料值不同(似乎需要自己手动筛选合适范围,这里已经筛选完成,推荐大家抄作业)

CCDC变化检测 python 实现 ecognition变化检测_右键_15


为了确定植被的 NDVI-T1 特征值区间,我们同样采用分窗的方式来查看,上窗显示原始影像,下窗显示 NDVI-T1 特征值。通过特征显示窗口观察,我们发现属于植被的对象都是用绿色来渲染的,说明植被的 NDVI-T1 值较高。于是我们在调节植被的 NDVI 特征值区间时,需要设定一个最低值,将其它类别的对象进行排除。通过调整、观察和对比,确定这个最低值为 0.32。

CCDC变化检测 python 实现 ecognition变化检测_特征值_16


4. map T1 植被分类

我们在进程目录中找到 map T1 多尺度分割进程,在该进程上右键,点击 Apend New,添加一个分类进程。Algorithm 选择 assign class,Condition 处设置 NDVI-T1≥0.32,Use class设置为植被并设置颜色。如下:

CCDC变化检测 python 实现 ecognition变化检测_CCDC变化检测 python 实现_17


执行完植被分类进程之后效果如下

CCDC变化检测 python 实现 ecognition变化检测_CCDC变化检测 python 实现_18

  1. map T1 非植被分类
    由于系统默认存在一个 unclassified 类别,因此在对未分类对象进行分类时,不需要设定阈值,只需要把 unclassified 类别指定为非植被类别。首先我们在 map T1 植被分类进程上右键,点击 Append New,新建一个进程。Algorithm 选择 assign class,Level 选择 Level T1,Class Filter 设置为 unclassified,use class 设置为非植被-T1 并设置颜色。这里我们设置为黄色

CCDC变化检测 python 实现 ecognition变化检测_特征值_19

  1. map T1 植被合并
    在 Process Tree 窗口中右键点击 map T1 非植被分类进程,点击 Append New,添加一个合并进程,将植被类别的对象进行合并。在 Edit Process 窗口中对进程进行编辑,Algorithm选择 merge region,作用域定义中将 Class Filter 设置为植被-T1,设置完成后点击 OK。
  2. CCDC变化检测 python 实现 ecognition变化检测_CCDC变化检测 python 实现_20

  3. 执行完成后,植被-T1 类别的对象就被合并了。
  4. map T1 非植被合并
    在 Process Tree 中,右键点击 map T1 植被合并的进程,从菜单中点击 copy,然后再右键点击 map T1 植被合并的进程,从菜单中点击 Paste。双击后来复制的进程,打开 Edit Process对话框。如下设置
  5. CCDC变化检测 python 实现 ecognition变化检测_右键_21

  6. 执行完成后,非植被-T1 类别的对象也被合并了。
  7. CCDC变化检测 python 实现 ecognition变化检测_右键_22

  8. 下面内容出现恶行bug先不要看了,最晚明天晚上完善,给诸位道个歉

//已完成修改,请放心食用//

3.map T2 地图分类

1 .map T2 分割

在 Process Tree 中右键点击”map T2 分类”,从菜单中点击 Insert Child,创建一个分割进程,现将 map T2 进行多尺度分割。在 Edit Process 中,设置 Algorithm 为 multiresolutionsegmentation,算法作用域上不需要设置,算法参数中设置 Level Name 为 Level T2,ImageLayer weights 设置为(B-T1、G-T1、R-T1、NIR-T1 和 PAN-T1 的权重为 0,B-T2、G-T2、R-T2、NIR-T2 和 PAN-T2 时相的权重为 1),如图设置然后点击 OK。(原谅我刚知道圈重点地方)

CCDC变化检测 python 实现 ecognition变化检测_作用域_23

执行完分割进程后,查看 map T2 的分割效果。我们要打开分窗效果,点击主菜单上的Window,在下拉菜单中点击 Spilit Horizontally 和 Side by Side View,对比一下原始影像和分割效果。

2 . map T2 创建自定义特征

我们在 map T1 中创建一个 NDVI-T2 特征,用于植被分类。在 Feature View 中双击 Createnew ‘Arithmetic Feature’,打开 Edit Customized Feature 对话框。在 Feature Name 中输入“NDVI-T2”,然后在特征公式编辑区域输入 NDVI-T2 的计算公式。编辑完成后点击确定关闭对话框。

公式=“([Mean NIR-T2]-[Mean R-T2])/([Mean NIR-T2]+[Mean R-T2])”

CCDC变化检测 python 实现 ecognition变化检测_特征值_24


3 map T2 查看植被特征区间

新创建的特征 NDVI-T2 在 Feature View 窗口的 Object features > Customized 目录下,查看该特征值时,可在 NDVI-T2 特征上右键,点击 Update Range,然后在窗口左下角的复选框中点击勾选,激活渲染特征值区间工具。和map T1中的操作相同这里不在赘述。

之后点击显示轮廓线按钮 ,显示影像的 NDVI-T2 特征,在特征值区间内的对象用蓝色或绿色进行渲染,不在特征值区间的对象用白色、黑色或灰色进行渲染。为了确定植被的 NDVI-T2 特征值区间,我们同样采用分窗的方式来查看,上窗显示原始影像,下窗显示 NDVI-T2 特征值。通过特征显示窗口观察,我们发现属于植被的对象都是用绿色来渲染的,说明植被的 NDVI-T2 值较高。于是我们在调节植被的 NDVI-T2 特征值区间时,需要设定一个最低值,将其它类别的对象进行排除。通过调整、观察和对比,确定这个最低值为 0.3。(还是心软)

效果如下

CCDC变化检测 python 实现 ecognition变化检测_CCDC变化检测 python 实现_25


4 map T2 植被分类

我们在进程目录中找到 map T2 多尺度分割进程,在该进程上右键,点击 Apend New,添加一个分类进程。Algorithm 选择 assign class,Condition 处设置 NDVI-T2≥0.3,Use class设置为植被并设置颜色。效果如下

CCDC变化检测 python 实现 ecognition变化检测_特征值_26


5 map T2 非植被分类

由于系统默认存在一个 unclassified 类别,因此在对未分类对象进行分类时,不需要设定阈值,只需要把 unclassified 类别指定为非植被类别。首先我们在 map T2 植被分类进程上右键,点击 AppendNew,新建一个进程。Algorithm 选择 assign class,Level 选择 Level T2,Class Filter 设置为 unclassifieduse class 设置为非植被-T2 并设置颜色。这里我仍然选择黄色,大多时候我们也习惯这样使用。效果如下

CCDC变化检测 python 实现 ecognition变化检测_CCDC变化检测 python 实现_27


6 map T2 植被合并

在 Process Tree 窗口中右键点击 map T2 非植被分类进程,点击 Append New,添加一个

合并进程,将植被类别的对象进行合并。在 Edit Process 窗口中对进程进行编辑,Algorithm

选择 merge region,作用域定义中将 Class Filter 设置为植被-T2,设置完成后点击 OK。执行完成后,植被-T2 类别的对象就被合并了。如下图

CCDC变化检测 python 实现 ecognition变化检测_右键_28


7 map T2 非植被合并

在 Process Tree 中,右键点击 map T2 植被合并的进程,从菜单中点击 copy,然后再右键点击 map T2 植被合并的进程,从菜单中点击 Paste。双击后来复制的进程,打开 Edit Process对话框。如下设置

CCDC变化检测 python 实现 ecognition变化检测_右键_29


excute后效果如图

CCDC变化检测 python 实现 ecognition变化检测_作用域_30


至此你的map2下子程序应如下图

CCDC变化检测 python 实现 ecognition变化检测_右键_31

第四节 同步地图

1.创建进程目录

在 Process Tree 中,右键点击”分别分类”,从菜单中点击 Append New,创建一个新进程。

在 Edit Process 中 Name 下一栏输入“Synchronous map”,然后点击 OK。

CCDC变化检测 python 实现 ecognition变化检测_CCDC变化检测 python 实现_32


2.添加同步地图进程(map T1→main)

在 Process Tree 窗口中右键点击“Synchronous map”,从菜单中点击 Insert Child,在 Edit Process对话框中编辑进程。Algorithm 选择 synchronize map,作用域中设置 Level 为 Level T1,设置 Map 为 map T1,算法参数中设置 Target Map Name 为 main,设置 Level 名称为 Level T1。Main 地图中只有影像图层,没有对象层,需要将 map T1 的 Level T1 层同步到 main 地图的Level T1 层上,同时在 main 上创建 Level T1。进程编辑完成后点击 OK 保存进程。(哈,现在我想起来标注重点了)

CCDC变化检测 python 实现 ecognition变化检测_作用域_33

执行完同步地图进程后,main 地图上就创建了 Level T1,这个对象层与 map T1 上的

Level T1 是一模一样的。

CCDC变化检测 python 实现 ecognition变化检测_作用域_34


3.添加复制影像对象层进程

在 Process Tree 窗口中右键Synchronous map进程,从菜单中点击 Append New,在 Edit Process对话框中,设置 Algorithm 选择 copy image object level,作用域中设置 Level 为 Level T1,算法参数中设置 Level Name 为 Level T2。这个进程是在 main 地图上复制出一个新的影像对象层,该层位于 Level T1 之上,用于存储将要同步进来的 map T2 的影像对象层。(你看我又想起来了)

CCDC变化检测 python 实现 ecognition变化检测_右键_35

执行完复制影像对象层进程之后,main 地图上又创建了 Level T2 层,该层目前与 LevelT1 层一模一样。

CCDC变化检测 python 实现 ecognition变化检测_特征值_36


4.添加同步地图进程(map T2→main)

在 Process Tree 窗口中右键点击“复制同步地图进程”,从菜单中点击 Append New,在Edit Process 对话框中编辑进程。Algorithm选择 synchronize map,作用域中设置 Level为 LevelT2,设置 Map 为 map T2,算法参数中设置 Target Map Name 为 main,设置 Level 名称为 LevelT2(map T2 中的 Level T2 同步到 main 中,取代 Level T2),Synchronize complete hierachy设置为 no(如果是 yes,main 中的 Level T1 将被取代为无)。进程编辑完成后点击 OK 保存进程。(阅读理解:请问连续几次出现的括号起什么作用)

CCDC变化检测 python 实现 ecognition变化检测_特征值_37


执行完同步地图(map T2→main)进程后,main 地图上位于下层的 Leve T1 将被 LevelT2 的轮廓切割,因为下层分割尺度必须小于或等于上层分割尺度。下图为 main 地图上 LevelT1 在执行该进程后的图

CCDC变化检测 python 实现 ecognition变化检测_特征值_38


下图为 main 地图上 Level T2 在执行该进程后的图。执行完成后 main 地图上的

Level T2 与 map T2 上的 Level T2 一模一样。

CCDC变化检测 python 实现 ecognition变化检测_作用域_39


5.添加转为子对象进程

在 Process Tree 窗口中右键点击同步地图(map T2→mian)进程,从菜单中点击 Append

New,新建一个转为子对象的进程。在 Edit Process 中,Algorithm 选择 convert to sub-objects,作用域中设置 Level 为 Level T2。(答:起强调作用)

CCDC变化检测 python 实现 ecognition变化检测_CCDC变化检测 python 实现_40

执行完转为子对象进程后,main 中的 Level T2 按照子对象层 Level T1 的对象轮廓进行再分割,最终 Level T2 和 Level T1 的图斑可以一一对应。下图为 main 中 Level T2 执行该进程前后的效果图。

CCDC变化检测 python 实现 ecognition变化检测_作用域_41

CCDC变化检测 python 实现 ecognition变化检测_右键_42


**第五节 变化检测

1.创建进程目录

在 Process Tree 窗口中,右键点击“Synchronous map”进程目录,从菜单中点击 Append New,添加一个进程目录。在 Edit Process 中的 Name 一栏中输入“change detection“

至此你的进程树下应有如下的主进程

CCDC变化检测 python 实现 ecognition变化检测_CCDC变化检测 python 实现_43

2.添加复制影像对象层进程

在 Process Tree 窗口中,右键点击“变化检测”进程目录,从菜单中点击 Insert Child,插入一个子进程,通过复制创建一个用于比对变化的影像对象层。在 Edit Process 对话框中,Algorithm 选择 copy image object level,作用域中设置 Level 为 Level T2,算法参数中设置Level Name 为 Level change。(。。)

CCDC变化检测 python 实现 ecognition变化检测_右键_44


执行完成后,main 中的 Level change 与 Level T2 一模一样

CCDC变化检测 python 实现 ecognition变化检测_作用域_45


3.添加删除分类结果进程

在 Process Tree 中右键点击复制影像对象层进程,从菜单中点击 Append New,新建一个进程,删除 Level change 的分类结果。在 Edit Process 中,Algorithm选择 removeclassification,作用域中设置 Level 为 Level change,算法参数中设置 Classes 为非植被-T2 和植被-T2。(。)

CCDC变化检测 python 实现 ecognition变化检测_特征值_46

执行完删除分类结果进程之后,Level change 对象层上的分类结果将被擦除,只有分割轮廓。

CCDC变化检测 python 实现 ecognition变化检测_CCDC变化检测 python 实现_47


4.添加类别描述

1 植被增加类别描述

在 Class Hierarchy 窗口中右键点击一下,从菜单中点击 Insert Class,弹出 ClassDescription 窗口。在 Class Description 窗口中,Name 一栏处输入“vegetation increase”,在下面类描述区域中,双击and(min),弹出 Insert Expression 窗口。这里使用蓝色,稍后设置

CCDC变化检测 python 实现 ecognition变化检测_特征值_48

在 Insert Expression 窗口中双击 Threshold,弹出 Edit Condition 窗口。

CCDC变化检测 python 实现 ecognition变化检测_作用域_49


在 Edit Condition 窗口中,点击 Add New 按钮,添加一个阈值条件。在添加的一行条件中,点击 Value1 栏中的下拉键,再点击 From Feature…,然后弹出 Select Single Feature 窗口。在 main 中植被-T1 类别在 Level T1 中,而 Level T1 与父层 Level change 的距离为 2。因此在 Create Existence of 对话框中,点击 Class 栏,从下拉菜单中选择植被-T1,在Distance栏中输入 2。设置完成后点击 OK,这个特征就创建好了。

CCDC变化检测 python 实现 ecognition变化检测_右键_50

再回到 Select Single Feature 窗口,点击植被-T1(2)这个特征,再点击 OK,这个特征就加载到 Edit condition 窗口中了,用于进行阈值条件设定。

CCDC变化检测 python 实现 ecognition变化检测_CCDC变化检测 python 实现_51


在 Edit condition 窗口中,编辑植被增加类别的阈值条件,植被增加类别是指 T1 时相没有植被,而 T2 时相有植被。因此 Value2 的值为 0,意思是 T1 时相没有植被。

CCDC变化检测 python 实现 ecognition变化检测_作用域_52


再点击一下 Add new…按钮,添加另一个阈值条件来描述植被增加这个类别。在添加的一行条件中,点击 Value1 栏中的下拉键,再点击 From Feature…,然后弹出Select Single Feature 窗口。操作同上步不再赘述,唯一区别多了上步添加到vegetation-T1,在 Edit condition 窗口中,编辑植被增加类别的第二个阈值条件,由于植被增加类别是指 T1 时相没有植被,而 T2 时相有植被。因此 Value1 的值设置为植被-T2(1),Value2 的值为 1,意思是 T2 时相存在植被。

CCDC变化检测 python 实现 ecognition变化检测_右键_53

设定好阈值条件之后,在 Edit condition 窗口上点击 OK,在 Insert Expression 窗口上点击 Close,关闭这两个窗口。我们看到 Class Description 窗口中,植被增加类别已经添加了类别描述,最后点击 OK 完成类别创建。(注意颜色)

CCDC变化检测 python 实现 ecognition变化检测_右键_54


2 植被减少类别描述

整体详细操作参考上步,不再赘述,简单介绍
这里颜色使用砖红色

由于植被减少类别是 T1 时相有植被,而 T2 时相没有植被,因此 Value2 栏中输入 1,表示有植被。

由于植被减少类别是 T1 时相有植被,而 T2 时相没有植被,因此 Value2 栏中输入 0,表示没有植被。

CCDC变化检测 python 实现 ecognition变化检测_特征值_55


3 植被未变化类别描述

整体详细操作参考上步,不再赘述,简单介绍

这里颜色使用深绿色

由于植被未变化类别是 T1 时相有植被,且 T2 时相也有植被,因此 Value2 栏中输入 1,表示有植被。

由于植被未变化类别是 T1 时相有植被,且 T2 时相也有植被,因此 Value2 栏中输入1,表示有植被。

CCDC变化检测 python 实现 ecognition变化检测_作用域_56


查看 Class Hierachy 窗口,植被减少、植被增加和植被未变化类别都已经描述好了。

CCDC变化检测 python 实现 ecognition变化检测_特征值_57

5.添加分类进程

Process Tree 窗口中,右键点击删除分类结果进程,从菜单中点击 Append New,添加一个分类进程。Algorithm 选择 Classification,作用域中 Level 设置为 Level change,算法参数中 Active classes 选择植被减少、植被增加、植被未变化(在 Active classes 的 Value 栏中点击一下弹出 Edit Classification Filter 窗口,里面选择新创建的三个类别)。

CCDC变化检测 python 实现 ecognition变化检测_特征值_58


6.查看变化检测结果

执行完分类进程之后,main 地图上的 Level change 对象层就完成了分类。

CCDC变化检测 python 实现 ecognition变化检测_作用域_59