迭代器与聚合器节点
课程内容
第 1 课,共 1 课
ENVI Modeler - 迭代器与聚合器
本快速指南提供了 ENVI Modeler 的更高级概述。您将学习如何使用迭代器节点和聚合器节点来执行对多个输入数据集或多个处理参数进行循环的批处理分析。您将使用这些模型来测试不同的滤波器参数、将滤波器应用于多个栅格,并创建滤波产品的栅格序列和图层堆叠。
您可以在 ENVI Modeler 简介、创建简单 ENVI 模型 和 导出 ENVI 模型 快速指南中找到入门概念和示例。建议您在开始本指南之前先完成那些快速指南。
本快速指南将逐步介绍三个示例用例:
- 使用不同参数迭代单个过程。
- 对多个文件迭代单个过程。
- 对多个文件迭代一个过程并聚合结果。
背景
以下部分描述了 ENVI Modeler 中迭代器节点和聚合器节点的用途。
迭代器节点
迭代器节点可用于批量处理多个数据集或循环遍历元素组,类似于在 IDL 编程中使用 FOR 语句。
应用示例包括:
- 对多个栅格应用相同的操作。
- 使用一系列不同的参数应用相同的操作。
- 在不同的 ENVI 服务器(在新标签页中打开)上批处理数据。
注意: 不支持嵌套迭代(循环)。要执行此类操作,您必须使用聚合器节点关闭第一个循环,然后将输出传递给另一个迭代器节点以进行第二个循环。
过滤器迭代器节点
过滤器迭代器节点可用于应用条件语句,类似于在 IDL 中使用 IF...THEN 语句。节点将在应用指定条件的同时迭代数据。
您可以添加两个过滤器迭代器节点以执行 IF...ELSE...THEN 条件。
注意: 使用 Band Math 任务节点来 对栅格数据值应用条件运算符(在新标签页中打开)。
聚合器节点
聚合器节点可用于:
- 将独立的项收集到一个可以传递给后续操作的单个数组中。
- 关闭由迭代器节点定义的循环。
聚合器节点通常用在包含迭代器节点的模型中。此外,在需要输入栅格数组的任务节点(如 Build Time Series 任务)之前,需要聚合器节点。
聚合器节点可以接受多个输入,但它们必须是相同的数据类型,例如栅格或矢量。但是,当聚合器节点用于关闭迭代器循环时,将不接受其他输入。要合并多个循环的输出,您可以链接多个聚合器节点。
示例数据
您将使用来自欧洲航天局 Sentinel-1 卫星的四幅经过预处理的合成孔径雷达强度图像来探索和运行模型,这些图像覆盖了 2023 年 12 月澳大利亚凯恩斯的一场洪水事件。SAR 图像预处理是使用 ENVI SARscape 进行的,包括:
- 多视:重采样以减少噪声,
- 配准:将所有图像重采样到一个参考图像(本例中为第一个日期),
- 滤波:进一步降低噪声,
- 地理编码:从 SAR 坐标转换到地理坐标。
ENVI SARscape 的输出(单位为分贝)已保存为 ENVI 格式的栅格,无需额外模块许可即可在 ENVI 中可视化。
该示例数据集将使您能够观察因农田土壤湿度变化引起的后向散射变化。由于静止水体后向散射较低,您还可以根据与其他非洪水日期相比后向散射的减少,在 2023 年 12 月 16 日的图像中识别洪水区域。
示例数据下载
下载下面的 ZIP 文件,并将其内容解压缩到您系统上的一个目录中。
[S1_Flood.zip
400.8 MB
下载](assets/S1_Flood.zip)
首先,在 ENVI 中打开数据集:
- 1 从 菜单栏 中,选择 File > Open。出现一个 Open 对话框。
- 2 转到您为本教程保存文件的目录。
- 3 按住 Ctrl 键的同时单击每个 .dat 文件以高亮显示所有五个文件。然后单击 Open。Sentinel-1 栅格将显示在 Image 窗口 中。
示例 1 - 使用不同参数迭代单个过程
在此示例中,我们将说明如何导入单个栅格、使用不同的窗口大小应用滤波器,并保存带有附加参数值的输出以比较结果。
您可以在此处下载本示例的 ENVI 模型:
[Model1_FilterTests.model
3.8 KB
下载](assets/Model1_FilterTests.model)
- 4 使用上面的链接下载模型并将其保存到本地文件中。
- 5 将模型文件拖放到 ENVI 中。这将在 ENVI Modeler 窗口中打开模型。或者,打开 Modeler 窗口 (Display > ENVI Modeler),然后从窗口打开模型 (File > Open)。
该模型如下所示:

该模型使用粉红色的 Input Parameters 节点接受一个 Input Raster,并将其提供给 Enhanced Frost Adaptive Filter 节点。它还使用了一个 Array of Values 节点(青色),其值已设置为 3、6 和 9。这些将是我们为 Filter 任务循环使用的窗口大小。在 Array of Values 和 Enhanced Frost Adaptive Filter 任务节点之间使用 Iterator 节点可确保任务将使用这些值中的每一个作为所选窗口大小各运行一次。我们还有一个额外的任务节点 Generate Filename,它确保每次迭代的输出文件名都附加了窗口大小值,以便我们可以跟踪哪个输出对应哪个参数。
此示例使用了 Enhanced Frost Adaptive Filter,它有四个可调整的参数:Window Size、Damping Factor、Homogeneous Cutoff 和 Heterogeneous Cutoff。您可以在 ENVI 文档中心(在新标签页中打开) 中找到有关不同类型自适应滤波器及其参数的更多信息。
以下视频将引导您了解此模型中的参数和连接:

Video Player is loading.
Play Video
Play
Loaded: 0%
0:00
Remaining Time --:-
1x
Playback Rate 1x
- 2x
- 1.75x
- 1.5x
- 1.25x
- 1x, selected
- 0.75x
- 0.5x
- 0.25x
Captions
- captions off, selected
Picture-in-PictureFullscreen
Mute
This is a modal window.
需要注意的主要事项是:
- • Array of Values 节点的每个值都单独一行提供,并且 Data Type 设置为 Integer
- • Iterator 节点和 Filter 任务节点之间的连接使用了 Iterator 的 Output,而不是 Iteration Index。这是因为我们希望使用提供的整数值 3、6 和 9 作为窗口大小,而不是迭代的值(后者将是 0、1 和 2)。
- • 类似地,Iterator 节点和 Generate Filename 任务节点之间的连接使用了 Iterator 的 Output,而不是 Iteration Index。同样,我们希望将提供的整数附加到文件名,而不是迭代次数。
- • Generate Filename 任务节点有一个预设的 Filename Prefix,您可以修改,也可以选择将其更改为通过 Input Parameters 节点提供的输入之一。Append Random Number 选项设置为 No,这样附加的数字是迭代器提供的数字,而不是随机数字。
保存、验证并运行模型
模型已准备就绪,可以运行。在运行模型之前保存模型总是一个好主意,这样如果程序崩溃,您不会丢失进度。
- 1 使用 File > Save As 保存模型。
- 2 使用 Code > Validate Model 验证模型。
- 3 使用 Code > Run Model 运行模型。 由于此模型有一个 Input Parameters 节点,您将看到一个对话框,提示您选择 Input Raster 并为输出设置一个 Directory。
- 4 单击 Input Raster 旁边的省略号。这将打开 Data Selection 对话框。 由于您之前已打开这 5 个栅格,您将在此对话框中看到它们。
- 5 选择 sentinel1_20231110_dB.dat 文件,然后单击 OK。
- 6 单击 Output 旁边的省略号,导航到要保存此模型输出的目录。
- 7 单击 OK 运行模型。
当您运行模型时,单元格会变为灰色,然后在进行中变为黄色,完成后变为绿色。Iterator 任务在所有三次迭代进行时保持黄色,而 Filter 任务在处理完每个迭代的参数时会多次闪烁黄色然后绿色。
模型运行后,三个输出文件被添加到 Layer Manager,并显示在 Image 窗口 中,位于 5 个原始栅格之上。

您可以放大图像的不同部分,并通过勾选和取消勾选这三个图层来比较增加 Enhanced Frost Filter 窗口大小的效果。在具有清晰边缘的区域(如海岸线或水体周围)比较输出,可以看出窗口越大,保留的细节越少。
这就完成了第一个示例。第二个示例将向您展示如何批量地将此滤波器应用于所有输入栅格。
示例 2 - 对多个文件迭代单个过程
在此示例中,我们将说明如何导入所有五个 Sentinel-1 栅格并应用 Enhanced Frost Filter,利用迭代器节点。过程与上一个模型类似,但这次您不需要 Array of Values 节点。
您可以在此处下载本示例的 ENVI 模型:
[Model2_FilterSAR.model
3 KB
下载](assets/Model2_FilterSAR.model)
- 1 使用上面的链接下载模型并将其保存到本地文件中。
- 2 将模型文件拖放到 ENVI 中。这将在 ENVI Modeler 窗口中打开模型。或者,打开 Modeler 窗口 (Display > ENVI Modeler),然后从窗口打开模型 (File > Open)。
该模型如下所示:

- 3 单击蓝色 Rasters 节点右下角的图标。这将弹出 Data Selection 对话框,显示已打开的 5 个栅格。
- 4 单击 Select All,以高亮显示所有 5 个文件。

- 5 单击 OK 关闭对话框。青色节点将重命名为 5 Rasters。
需要注意的主要事项是:
- • 在此示例中,Input Rasters 直接连接到 Iterator 节点。这是因为我们要对每个输入文件逐一执行单个操作(滤波)。
- • 在 Generate Filenames 节点之前有一个额外的节点 Extract Properties and Metadata。 此任务允许您从文件中提取元数据,用作另一个节点的输入。在我们的例子中,我们希望提取每幅图像的采集时间作为输出文件的前缀,以便我们可以跟踪哪个滤波输出对应哪个日期。 如下所示,Extract Properties and Metadata 节点的 acquisition time 被设置为 Generate Filename 节点的 Filename Prefix。

- • Filter 任务将 Iterator 输出作为 Input Raster,所有其他参数为默认值,并将 Generate Filename 输出作为 Output Raster。

保存、验证并运行模型
- 1 保存模型:File > Save As。
- 2 验证模型:Code > Validate Model。
- 3 运行模型:Code > Run Model 或选择工具栏上的 Run 图标。
提示:如果您选择 Code > Run Model in Debug Mode,您可以看到不同过程节点的时序。
单元格最初变为灰色,然后在进行中变为黄色,完成后变为绿色。Iterator 任务在所有三次迭代进行时保持黄色,而 Enhanced Frost Adaptive Filter 任务在处理完每个迭代的参数时会多次闪烁黄色然后绿色。
文件被添加到 Layer Manager,并显示在 Image 窗口 中。
这就完成了第二个示例。第三个示例扩展了此模型,以使用输出创建栅格序列。
示例 3 - 迭代过程并聚合结果
在此示例中,我们将说明如何聚合迭代的结果以创建可以在 ENVI 中保存到文件并可视化的栅格序列和图层堆叠。图层堆叠将使您能够可视化选定像素 SAR 强度随时间的变化。
您可以在此处下载本示例的 ENVI 模型:
[Model3_SARseries.model
7 KB
下载](assets/Model3_SARseries.model)
- 1 使用上面的链接下载模型并将其保存到本地文件中。
- 2 将模型文件拖放到 ENVI 中。这将在 ENVI Modeler 窗口中打开模型。或者,打开 Modeler 窗口 (Display > ENVI Modeler),然后从窗口打开模型 (File > Open)。
该模型如下所示:

需要注意的主要事项是:
- • Input Parameters 节点设置为接收 Input Rasters、Raster Series 输出的输出目录 (Output Raster Series URI) 和 Layer Stack 的输出目录 (Output Raster URI)。
- • 由于 Iterator 节点的输入是由 Input Parameters 节点提供的尚未定义的栅格,因此 Extract Properties and Metadata 节点没有填充的 Known Properties 列表,因此您必须在 Other Properties 下包含要提取的字段名称:

- • Aggregator 节点放置在执行迭代操作的任务之后。在这种情况下,只有一个 Filter 任务。如果要对每个单独的滤波图像执行额外的任务,该任务将放在 Aggregator 节点之前,因为 Aggregator 节点设置了循环的结束。
- • Layer Stack 将显示在 ENVI 视图中,但也会加载到 Data Manager 中。
保存、验证并运行模型
模型已准备就绪,可以运行:
- 1 保存模型:File > Save As。
- 2 验证模型:Code > Validate Model。
- 3 运行模型:Code > Run Model 或选择工具栏上的 Run 图标。 由于模型有 Input Parameters 节点,会出现一个对话框,提示您输入 Input Rasters、Output Raster Series 和 Output Raster:

- 4 单击 Input Raster 旁边的省略号以选择输入。出现 Data Selection 对话框。
- 5 由于您的五个 Sentinel-1 栅格已在 ENVI 中打开,它们将显示在 Select Input Data 下。您可以单击 Select All 按钮全选。如果您的文件尚未加载到 ENVI 中,可以单击 Open File 图标导航到保存数据的目录并从那里打开文件。

- 6 单击 OK 关闭对话框。
- 7 单击 Input Raster 旁边的 Sort 图标(蓝色箭头)以按日期对输入进行排序。 注意: Layer Stack 任务将按照提供给任务的顺序堆叠图层。为了生成可用的时间序列,您需要按日期对图层进行排序。
- 8 单击 Output Raster Series 旁边的省略号以选择输出序列的目录和文件名,例如 S1_Flood.series。序列文件的适当扩展名是 .series。
- 9 选择 Output Raster 旁边的 File 选项,然后单击三个点以选择输出图层堆叠的目录和文件名,例如 S1_Flood_stack.dat。

- 10 单击 OK 关闭对话框。
设置好 Input Parameters 并单击 OK 后,模型运行,如下面的视频片段所示:

Video Player is loading.
Play Video
Play
Loaded: 0%
0:00
Remaining Time --:-
1x
Playback Rate 1x
- 2x
- 1.75x
- 1.5x
- 1.25x
- 1x, selected
- 0.75x
- 0.5x
- 0.25x
Captions
- captions off, selected
Picture-in-PictureFullscreen
Mute
This is a modal window.
可视化模型输出
ENVI 的 Layer Manager 和 Image window 显示了时间序列和图层堆叠输出。
如上文 Sample Data 部分所述,该数据集展示了由于农田土壤湿度变化引起的 SAR 后向散射的更微妙变化,以及由洪水引起的更强烈变化。
您可以使用 Series 输出直观地检查这五个日期中的这些变化。注意 2023 年 12 月 16 日的图像上河流周围出现的暗色(低后向散射)像素,这是由于洪水造成的。
- 1 从 Menu bar 选择 Display > Series/Animation Manager 以显示 Series Manager。
- 2 单击蓝色前进箭头逐个播放图像。您可以将显示时间从默认的 0.1 秒调整到 0.5 或 1 秒。
下面的视频片段显示了 Series Manager 的输出。注意与海岸平行的农田网格中单个土地斑块的强度变化。还要注意图像右下角河流周围的区域在 2023 年 12 月 16 日的图像上如何变黑 - 这是静止洪水的位置。

Video Player is loading.
Play Video
Play
Loaded: 0%
0:00
Remaining Time --:-
1x
Playback Rate 1x
- 2x
- 1.75x
- 1.5x
- 1.25x
- 1x, selected
- 0.75x
- 0.5x
- 0.25x
Captions
- captions off, selected
Picture-in-PictureFullscreen
Mute
This is a modal window.
- 3 关闭 Series Manager。
- 4 取消勾选 Layer Manager 中的 Series 文件以查看 Layer Stack。
图层堆叠栅格以红-绿-蓝 (RGB) 合成图像的形式显示,使用前三个日期分别对应每个颜色通道。注意农田如何呈现蓝色、红色、黄色、绿色和紫色调。这是由于前三个日期土壤湿度变化导致的强度变化。
您可以打开 Data Manager 以将单个图像加载为灰度图像,或选择不同的图像组以 RGB 合成图像的形式可视化。您接下来将执行此操作。
- 5 从 Menu bar 选择 File > Data Manager。
- 6 在 Data Manager 中的图层堆叠文件下,单击 20231110 图像,然后 20231216 图像,然后 20231228 图像,然后单击 Load Data。 这将显示一个新图像,其中红色通道显示洪水前日期的强度,绿色通道显示洪水日期的强度,蓝色通道显示洪水后日期的强度。
由于洪水区域 SAR 强度较低,洪水区域呈现紫色调(红色和蓝色通道强度高,绿色通道强度低)。
您可以使用 Spectral Profile 工具(下图红色方框标记)查看图像中单个像素在五个堆叠日期上的 SAR 幅度剖面:

您可以单击图像周围,查看图像中不同位置随时间变化的强度变化。
如果您单击洪水区域的像素,您将看到索引 4(对应 2023 年 12 月 16 日洪水日期)的强度最低(约 -15 到 -20 dB),如下图所示:

本快速指南到此结束。
您的反馈对我们很重要,请花几分钟时间填写我们的 快速指南反馈(在新标签页中打开) 表格。
© 2024 NV5 Geospatial Solutions, Inc. 本信息不受《国际武器贸易条例》(ITAR) 或《出口管理条例》(EAR) 的管制。


