使用 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
祝你批量处理顺利!