跳转至

使用 ENVITask 进行批量处理

原文链接: https://www.nv5geospatialsoftware.com/Learn/Blogs/Blog-Details/batch-processing-using-an-envitask

20322 文章评分:

2.8

使用 ENVITask 进行批量处理

匿名作者 2014年8月5日,星期二

上周,Brian Griglak 在 IDL Data Point 上概述了如何为 ENVITask 子集化 ENVIRaster。此功能经常被使用,但如果你需要反其道而行之呢?如果你需要在单个脚本中处理多个文件呢?

通过在 ENVI API 中运行批处理,你可以对文件列表运行单个处理(或一系列处理),并将结果输出到你选择的位置。

使用 ENVITasks 的 ENVI 批处理脚本必须包含 5 个要素才能正常运行:

  • 启动 ENVI 应用程序,由于不需要用户界面,最好使用无头模式。
  • 初始化 ENVITask 并设置恒定参数。
  • 生成待处理的输入文件列表。
  • 为每个输入文件创建输出文件名。
  • 使用你选择的参数在循环中对每个文件运行处理。

创建批处理脚本的许多工作并非来自处理本身,而是来自管理输入和输出文件。以下代码概述了如何使用 辐射定标 任务来设置此最小框架。

pro batch_radiometric_calib

compile_opt idl2

;以无头模式启动 ENVI  e = envi(/headless)

;实例化 ENVITask,设置恒定参数。  task = ENVITask('Radiometric')  task.CALIBRATION_TYPE = 1

;在目录中查找所有具有 .dat 扩展名的文件。  search_dir = '待定标文件的目录'  filelist = file_search(search_dir + '*.dat')  ;为将被追加的输出文件设置基础路径。  outbase = 'C:\Scratch\Reflectance_Cal_'

;遍历每个文件。  ;打开栅格,设置参数,并执行任务。  foreach file, filelist, index do begin    raster = e.OpenRaster(file)    task.input_raster = raster    task.output_raster_uri = outbase + strtrim(index, 2)    task.Execute  endforeach

end

使用 ENVITask 进行批处理的一个很酷的地方在于,每次循环时,你只需要更改那些……嗯……需要更改的参数!

在上面的示例中,CALIBRATION_TYPE 被设置为 1(以定标为大气层顶反射率),此设置位于循环之外,因此只设置一次。而 input_raster 和 output_raster 则在循环内部设置——它们会随着每个文件而变化。

在循环结束时,新的参数就位后,调用 task.Execute。这将启动使用当前参数的 ENVITask 处理,但保持该任务不变以供后续使用。

要获取当前的 ENVITask 列表:

IDL> e=envi()

ENVI> e.TASK_NAMES

关于示例中使用函数的帮助:

STRTRIM, FILE_SEARCH, OPENRASTER, COMPILE_OPT

祝你批量处理顺利!

为 ENVITask 子集化 ENVIRaster 以夏日速度前行