Автоматизация выполнения моделей в ERDAS IMAGINE

Материал из GIS-Lab
Версия от 11:29, 28 июля 2012; Voltron (обсуждение | вклад) (Новая страница: «{{Статья|Опубликована|batch-erdas}} {{Аннотация|Экономим время при сохранении четкой логики пр…»)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигации Перейти к поиску
Эта страница опубликована в основном списке статей сайта
по адресу http://gis-lab.info/qa/batch-erdas.html


Экономим время при сохранении четкой логики процесса обработки групп изображений.

Допустим есть модель, которую мы хотим автоматизировать. Допустим что эта модель использует 2 файла на входе, назовем их A и B и один — на выходе С. Схематично операция будет выглядеть так:

A + B + ... = C

Исходные растры A и B могут быть исходными данными для сколь угодно сложных вычислений, которые можно реализовать в инструменте моделирования ERDAS. Более того, исходных растров может быть больше чем 2. Проиллюстрируем процесс на простом сложении двух растров, для простоты объяснения использовать будем только их первые каналы.

Наша задача состоит в том, чтобы используя эту модель преобразовать наборы файлов A и набор файлов B в результат — набор файлов C.

Продемонстрируем по шагам выполнение данной автоматизации.

Экспортируем модель (файл с расширением gmd) в скрипт (файл с расширением mdl)

Для этого, открываем модель в Model Maker и выбираем «Process → Generate script». Содержание подобного скрипта может выглядеть например вот так:

COMMENT "Generated from graphical model: c:/temp/test.gmd";
SET CELLSIZE MIN;
SET WINDOW UNION;
SET AOI NONE;
#
# declarations
#
Integer RASTER n1 FILE OLD NEAREST NEIGHBOR AOI NONE "c:/temp/imageA.img";
Integer RASTER n2 FILE OLD NEAREST NEIGHBOR AOI NONE "c:/temp/imageB.img";
Integer RASTER result FILE DELETE_IF_EXISTING IGNORE 0 ATHEMATIC 16 BIT SIGNED INTEGER "c:/temp/imageC.img";
#
# function definitions
#
#
define func Integer($n1(1) + $n2(1))
result = func;
QUIT; 

Изучим содержимое скрипта, не обращая внимания на то, что именно он делает, но попытаемся разобраться как происходит адресация файлов с которыми он работает. Как можно видеть из примера — файлы указываются в явном виде в виде полного к ним пути. Выполнить такой скрипт легко можно с помощью Model Librarian, однако он выполнит операцию только для той пары файлов, которая указана в содержимом скрипта. К сожалению, возможности создать массив из имен новых файлов в таком скрипте нет. Да если бы и была, при новом наборе файлов для обработки пришлось бы переписывать их имена заново в этот массив.

Заменим меняющиеся параметры в модели (имена файлов) на аргументы

Аргументы — специальные кодовые слова, которые сможет использовать пакетный процессор ERDAS. Наш файл приобрете следующий вид, имена файлов замененные на аргументы выделены жирным:

 COMMENT "Generated from graphical model: c:/temp/test.gmd";
 SET CELLSIZE MIN;
 SET WINDOW UNION;
 SET AOI NONE;
 #
 # declarations
 #
 Integer RASTER n1 FILE OLD NEAREST NEIGHBOR AOI NONE ARG1;
 Integer RASTER n2 FILE OLD NEAREST NEIGHBOR AOI NONE ARG2;
 Integer RASTER result FILE DELETE_IF_EXISTING IGNORE 0 ATHEMATIC 16 BIT SIGNED INTEGER ARG3;
 #
 # function definitions
 #
 #
 define func Integer($n1(1) + $n2(1))
 result = func;
 QUIT; 

Уже лучше, теперь нужно найти способ подставить в эти аргументы наши имена файлов.

Используем пакетный процессор для запуска модели с аргументами

Перед этим создадим batch-файл (test.bcf), который будет запускать модель, такого содержания:

modeler c:/temp/test.mdl c:\temp\imageA.img c:\temp\imageB.img c:\temp\imageC.img

Как видно из содержания, процесс запуска модели состоит из передачи таких параметров как имя модели и трех аргументов специальной программе — modeler'у.

Уже лучше, так как нам не нужно хранить файлы в самой модели, однако все еще не очень хорошо, так как теперь вместо того, чтобы генерировать 100 моделей для 100 пар исходных файлов, надо генерировать 100 записей в bcf-файл с разными аргументами.

Обращаем внимание, что возможности подстановки параметров в bcf в пакетном процессоре присутствует, это видно например из этого примера, однако в нашем случае ничего в полях параметров выбрать нельзя, потому что параметры нужно определить еще и в bcf-файле.

Batch-erdas-01.gif

Идем дальше.

Видоизменим bcf-файл введя параметры и туда

Новый bcf будет выглядеть таким образом:

variable Input User;
variable Input1 User;
variable Output Auto "c:/temp//$(Input.root).img" Delete_Before;
modeler c:/temp/test.mdl '$(Input)' '$(Input1)'  '$(Output)'  -meter -state

Загрузим bcf-файл в пакетный процессор, отметим, что появилась возможность выбора параметров (ими в нашем случае будут имена файлов).

Batch-erdas-02.gif

Выберем обрабатываемые изображения

Последним шагом нашей автоматизации будет выбор собственно изображений, для этого нажмем «Next» и появившемся окне сначала выберем группу изображений в качестве ImageA и группу в качестве ImageB, не забывая менять название параметра которому мы подставляем исходные растры.

Удобным способом выбора будет сначала выбрать в параметрах Input и выбрать с помощью кнопки Batch-cs-erdas-04.gif («Select files to add») серию первых исходных растров (imageA), а затем выбрать в параметрах Input1, выделить колонку Input1 и выбрать с помощью той же кнопки серию вторых исходных растров (imageB).

Batch-erdas-03.gif

Автоматизация завершена, осталось только выполнить пакет — «Finish».

Ссылки по теме