【ENVI入门系列】27.ENVI Modeler建模工具
版权声明:本教程涉及到的数据仅供练习使用,禁止用于商业用途。
目录
ENVI Modeler建模工具
1 概述
2 ENVI Modeler入门
3 构建工作流
4 生成ENVI扩展工具
5 图像批处理
6 生成Metatask
7 构建多源数据
1 概述
ENVI 5.5版本开始提供全新建模工具(ENVI Modeler)。ENVI Modeler建模工具提供可视化界面,通过拖拽方式对ENVI现有功能灵活“组装”,可零代码实现复杂工作流和图像批处理的构建。通过该工具构建的工作流程还可以生成为ENVI扩展工具和发布为企业级(ENVI Services Engine)遥感图像服务。
ENVI Modeler具有如下技术特点:
- 提供友好的用户界面和优秀的用户体验
- 零代码构建批处理、工作流
- 可生成IDL代码、Python代码
- 可一键将模型创建为ENVITask,用于其他模型中
- 支持保存和导入模型,能够与他人分享模型
- 支持将模型任务提交到远程ENVI Services Engine服务器运行
- 可将模型生成为ENVI扩展工具
- 可将模型发布到ArcMap、ArcGIS Pro的工具箱
- 可发布为企业级(ENVI Services Engine)遥感图像服务。
2 ENVI Modeler入门
启动ENVI Modeler有两种方式:
- 工具箱:/Task Processing/ENVI Modeler
- 主菜单:Display > ENVI Modeler
ENVI Modeler最为典型的应用是构建工作流和图像批处理。下面我们以一个简单的例子介绍ENVI Modeler的使用方法。需要实现的功能如下图所示:
图1.1 ENVI Modeler入门示例工作流
下面开始建模:
(1)在Toolbox工具箱中,选择/Task Processing/ENVI Modeler。首次启动时会查询所有可用的ENVITasks,需要一些时间,之后启动速度较快。
(2)ENVI Modeler主界面分为如下几个区域:
- 菜单栏:主要包含文件操作、编辑处理、代码生成、服务器、帮助等功能;
- 工具栏:主要包含新建/打开/保存模型、运行模型、模型布局等操作;
- Basic Nodes:基本节点。包含可以作为输入节点的文件(File)、数据集(Dataset)、数组(Array of Values)等;以及数据管理器(Data Manager)、视图(View);迭代(Iterator)用于构建图像批处理;聚合(Aggregator)用于收集多个元素为数组。Input/Output Parameters用于开放模型参数,便于构建ENVI扩展工具或生成Metatask(从而用于其他流程)。
- Tasks:图像处理功能,用于构建工作流
(3)在左侧Basic Nodes中,将Dataset用鼠标拖拽到右侧空白区(也可以通过双击实现)。弹出Select Type对话框,单击Raster按钮。弹出Data Selection对话框,选择ENVI自带示例数据:
- C:\Program Files\Harris\ENVI5x\data\qb_boulder_msi
注:如果没有设置输入数据,可以在Raster节点中单击选择栅格图像。
(4)在左侧Tasks中搜索isodata,将ISODATA Classification用鼠标拖拽到右侧空白区(也可以通过双击实现)。然后用鼠标左键在[Raster]节点和ISODATA节点之间连线。由于ISODATA只有一个输入栅格参数,所以自动进行了参数设置,可通过双击连线查看参数设置情况。
(5)单击ISODATA节点的图标,可以设置ISODATA非监督分类的参数。因为此步骤结果并不是最终结果,所以建议Output Raster默认为空即可。
(6)在左侧Tasks中搜索smooth,将Classification Smoothing用鼠标拖拽到右侧空白区(也可以通过双击实现)。然后用鼠标左键在ISODATA节点和Classification Smoothing节点之间连线。可通过双击连线查看参数设置情况。
下面是一些常用操作方法:
- 在视图中,鼠标滚轮可以缩放;按住鼠标滚轮可以平移。
- 对于节点,可以单选、框选、按住Ctrl多选、全选(Ctrl+A)。
- 对于选中节点可以复制(Ctrl+C)、粘贴(Ctrl+V)、剪切(Ctrl+X)、删除(Delete)。
- 鼠标右键菜单中同样包含上述功能,除此之外还有对齐、帮助、断点等。
- 在建模过程中,可以撤销(Ctrl+Z)、重做(Ctrl+Y)。
- 请及时保存模型(Ctrl+S)。
- 工具栏可以居中显示模型。
- 工具栏可以自动排版模型,如果不满意排版效果,可以撤销(Ctrl+Z)。
(7)因为Classification Smoothing是最后一个处理步骤,可单击设置输出文件路径,如果不设置,则默认输出为虚拟栅格或临时目录。
(8)为了将结果自动添加到Data Manager并加载显示,在左侧Basic Nodes中分别将Data Manager和View拖拽到Classification Smoothing节点右侧,并与之相连,如下图所示:
(9)单击工具栏Run按钮,运行模型。
3 构建工作流
本章节以变化检测为例,介绍利用ENVI Modeler构建较复杂工作流的过程。首先,我们确定变化检测处理流程如下。
下面开始介绍建模过程。
(1)启动ENVI,打开两个时相的数据(“构建工作流”文件夹内的time1.dat和time2.dat)。
(2)启动ENVI Modeler。
(3)单击ENVI Modeler工具栏按钮 ,新建模型。
(4)在左侧Basic Nodes中,将Dataset用鼠标拖拽到右侧空白区(也可以通过双击实现)。弹出Select Type对话框,单击Raster按钮。弹出Data Selection对话框,选择前一时相数据(dat);
注:如果没有设置输入数据,可以在Raster节点中单击 选择栅格图像。
(5)重复步骤3,再添加后一时相数据(dat),效果如下图所示:
注:建议先将模板保存到本地文件中,以防丢失。每个步骤完成后请及时保存。
(6)在左侧Tasks中搜索quac,将QUAC用鼠标拖拽到右侧空白区(也可以通过双击实现)。然后鼠标左键连接[Raster]节点和QUAC节点。由于QUAC只有一个输入栅格参数,所以自动进行了参数设置,可通过双击连线查看参数设置情况。
(7)重复步骤4,再添加一个QUAC,并将后一时相数据与QUAC连接。效果如下图所示:
注:单击QUAC节点中的 可以设置QUAC执行参数。如下图所示,因为QUAC为中间结果,所以可以设置Output Raster为虚拟栅格(Virtual Raster),否则将生成为临时文件。
(8)依次添加如下节点:
Task名称 |
功能 |
重要说明 |
Spectral Index |
计算NDVI |
需要添加2个节点。并设置参数如下: Index:NDVI |
Image Intersection |
计算重叠区 |
因为计算NDVI差值需要2个数据行列数一致。 将2个NDVI结果均连接到计算重叠区节点。 将前一时相NDVI的Output Raster设置为计算重叠区节点的Input Raster 1。 将后一时相NDVI的Output Raster设置为计算重叠区节点的Input Raster 2。 |
Image Band Difference |
计算差值 |
将计算重叠区的Output Raster 1设置为计算差值的Input Raster 1。 将计算重叠区的Output Raster 2设置为计算差值的Input Raster 2。 |
Auto Change Threshold Classification |
自动阈值分割 |
连接节点即可。使用默认的算法: Thresholding Method:Otsu |
Classification Smoothing |
平滑处理 |
去除锯齿。 |
ClassificationAggregation |
聚合处理 |
去除小斑块。 如果想将最终结果保存在本地文件中,可以在设置此节点的Output Raster,否则将保存在临时文件中。 |
效果如下图所示:
(9)在左侧Basic Nodes中,依次将Data Manager和View节点拖拽到右侧,并将聚合处理节点与之相连。目的是将最终结果添加到Data Manager和加载显示。最终效果如下图:
(10)单击工具栏Run按钮,运行模型。
4 生成ENVI扩展工具
上一章节介绍了ENVI Modeler构建工作流的方法,本章节将以同样的功能(变化检测)为例,介绍将模型生成为ENVI扩展工具的方法。我们需要对上一章节的模型进行改造。
下面开始介绍过程。
(1)启动ENVI Modeler。
(2)打开上一章节构建的模型:model
注:建议将此模型另存为一份(File > Save As…)。
(3)删除如下图所示的两个节点。可以框选、Ctrl多选等,然后按Delete。
(4)在左侧Basic Nodes中,将Input Parameters用鼠标拖拽到右侧空白区(也可以通过双击实现)。然后将Input Parameters与第一个QUAC连接起来。在弹出的Connect Parameters对话框中单击QUAC的Input Raster,如下图所示。单击OK。
(5)将然后将Input Parameters与第二个QUAC连接起来,并在弹出的Connect Parameters对话框中依次单击Add New Input(s)和右侧的Input Raster,如下图所示。单击OK。
(6)最后将Input Parameters与Classification Aggregation连接起来,并在弹出的Connect Parameters对话框中依次单击Add New Input(s)和右侧的Output Raster URI,如下图所示。单击OK。
(7)到目前为止,我们开放了两个时相的输入栅格、输出路径3个参数。效果如下图所示:
(8)单击Run按钮,可以看到此模型生成的用户界面,可以交互的设置参数。与使用ENVI自带工具没有区别。
注:如果想开放其他参数,可以将Input Parameters与对应的节点连接并设置参数对应关系即可。目前开放的参数无法调整顺序,请按照合理顺序依次添加。
注:另外可以单击Input Parameters节点的 ,对每个参数名进行修改。
(9)接下来我们将其生成为ENVI扩展工具,之后便可以在工具箱Extensions文件夹中使用此功能了。单击菜单 Code > Generate IDL Program,可以生成IDL代码。然后单击Create Extension按钮,在弹出对话框中输入工具名。不建议使用中文名!在输入中文时,有可能引起ENVI崩溃!可以先在记事本中编辑好,然后粘贴到文本框中。单击OK即可。会弹出成功提示。
无需重启ENVI,即可使用:
可以根据上述流程多开放几个参数,并修改参数名,模型如下图所示:
运行效果:
5 图像批处理
利用ENVI Modeler可以轻松构建批处理。在批处理时,我们需要自动设定输出文件名。ENVI目前提供了一个ENVIGenerateFilenameTask可以自动生成文件名,但是只能设定“固定前缀+索引+后缀”的格式,会丢失输入文件名。为了更方便地进行批处理,特意编写了一个自定义ENVITask——Generate_Output_Filename,可以设定“输入文件名+后缀”的格式。
请将ENVI_Generate_Output_Filename文件夹拷贝到custom_code文件夹:
- C:\Program Files\Harris\ENVI5x\custom_code\
本章节以批量计算NDVI、去除异常值、密度分割流程为例进行介绍。
(1)启动ENVI Modeler。
(2)在左侧Basic Nodes中,将File拖拽到右侧空白区(也可以通过双击实现)。在弹出的Select Type对话框中选择Raster。然后可以多选栅格图像文件(ENVI格式二进制文件、hdr文件、tif文件等能够被ENVI直接识别的均可)。选择hdr和time2.hdr文件。
节点效果如下图所示:
注:本节点同样可以使用Dataset类型。
(3)在左侧Basic Nodes中,将Iterator用鼠标拖拽到右侧空白区。并将Raster与Iterator节点相连。如下图所示。
(4)在左侧Tasks中,将Spectral Index用鼠标拖拽到右侧空白区,并将Iterator与之相连。单击节点中 设置参数如下:
建模效果如下:
(5)按照前边的步骤,依次在后边添加如下节点:
Task名称 |
功能 |
重要说明 |
Band Math |
去除异常值 |
设置节点如下参数: Expression:b1>(-1)<1 Output Raster:Virtual Raster |
Color Slice Classification |
密度分割 |
设置节点如下参数: Data Minimum:0 Data Maximum:1 Number of Ranges:5 Color Table Name:CB-Greens Reverse Color Table:No |
建模效果如下图所示:
(6)下面添加自动生成输出文件名的Task。在左侧Tasks中,将Generate Output Filename用鼠标拖拽到右侧空白区,并连接在Iterator后边。并设置如下参数。输出路径(Output Directory)可根据自己需要进行设置。
Generate Output Filename参数说明:
- Input File/Input Raster:二者选其一。设置输入文件名,获取前缀。
- Output File Extension:设置后缀。
- Output Directory:设置输出路径。
- Delete Existing File:是否删除已存在输出文件。
然后将Generate Output Filename与Color Slice Classification相连,在弹出的对话框中按照如下进行设置。
建模效果如下图所示:
(7)在左侧Basic Nodes中,依次将Data Manager和View节点拖拽到右侧,并将Color Slice Classification节点与之相连。目的是将最终结果添加到Data Manager和加载显示。最终效果如下图:
(8)单击Run按钮执行模型。
6 生成Metatask
ENVI Modeler除了生成ENVI扩展工具外,还可以生成IDL代码、Python代码等。另外还可以生成Metatask(即多个task构建的函数链)。然后便可以用于其他模型中。
比如我们希望获取森林变化检测的矢量结果,而第3章节我们已经构建了森林变化检测的模型,现在基于此模型构建Metatask,然后用于生成矢量结果。
下面介绍操作流程:
(1)在ENVI Modeler中打开模型“model”。
(2)将模型另存为model。
(3)删除模型中最后的View和Data Manager节点。
(4)将Basic Nodes中的Output Parameters拖拽到模型最后,并与Classification Aggregation节点相连。效果如下图所示:
(5)单击ENVI Modeler菜单 Code > Generate Metatask,可以生成task文件。然后单击Publish Task按钮。按照下图进行设置。其中Name不能包含空格,Display Name可以有空格,其他默认即可。单击OK,提示成功,然后关闭Metatask对话框。
(6)在ENVI Modeler中新建模型。添加两个Dataset,分别选择dat和time2.dat。
(7)在Tasks列表中搜索forest,将Forest Change Detection Task拖拽到右侧空白区。将两个Raster节点与之相连。并分别设置连线参数。
(8)在Tasks列表中搜索shapefile,将Convert Classification to Vector Shapefile拖拽到右侧空白区,并与Forest Change Detection Task相连。并添加View、Data Manager。效果如下图所示:
7 构建多源数据
由于有了前几个章节的学习,这里不再描述建模过程,直接提供给大家一个建模结果。
本例实现了构建多源数据的功能。这里用到了一个新的节点Aggregation(聚集),可以将多个元素组合成数组。
具体实现功能是基于多光谱、DEM数据构建多源数据。结果波段组成如下:
- 原始多光谱
- NDVI——归一化植被指数
- SAVI——土壤调整植被指数
- 原始DEM
- 由DEM计算的坡度
练习数据位于“构建多源数据”文件夹内。
建模结果如下图所示: