https://wiki.gis-lab.info/index.php?title=%D0%90%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%B2%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B5%D0%B9_%D0%B2_ERDAS_IMAGINE&feed=atom&action=historyАвтоматизация выполнения моделей в ERDAS IMAGINE - История изменений2024-03-28T21:33:29ZИстория изменений этой страницы в викиMediaWiki 1.39.6https://wiki.gis-lab.info/index.php?title=%D0%90%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%B2%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B5%D0%B9_%D0%B2_ERDAS_IMAGINE&diff=6424&oldid=prevVoltron: Новая страница: «{{Статья|Опубликована|batch-erdas}} {{Аннотация|Экономим время при сохранении четкой логики пр…»2012-07-28T09:29:14Z<p>Новая страница: «{{Статья|Опубликована|batch-erdas}} {{Аннотация|Экономим время при сохранении четкой логики пр…»</p>
<p><b>Новая страница</b></p><div>{{Статья|Опубликована|batch-erdas}}<br />
{{Аннотация|Экономим время при сохранении четкой логики процесса обработки групп изображений.}}<br />
<br />
Допустим есть модель, которую мы хотим автоматизировать. Допустим что эта модель использует 2 файла на входе, назовем их A и B и один — на выходе С. Схематично операция будет выглядеть так:<br />
<br />
<pre>A + B + ... = C</pre><br />
<br />
Исходные растры A и B могут быть исходными данными для сколь угодно сложных вычислений, которые можно реализовать в инструменте моделирования ERDAS. Более того, исходных растров может быть больше чем 2. Проиллюстрируем процесс на простом сложении двух растров, для простоты объяснения использовать будем только их первые каналы.<br />
<br />
Наша задача состоит в том, чтобы используя эту модель преобразовать наборы файлов A и набор файлов B в результат — набор файлов C.<br />
<br />
Продемонстрируем по шагам выполнение данной автоматизации.<br />
<br />
=== Экспортируем модель (файл с расширением <tt>gmd</tt>) в скрипт (файл с расширением <tt>mdl</tt>) ===<br />
<br />
Для этого, открываем модель в Model Maker и выбираем «Process → Generate script». Содержание подобного скрипта может выглядеть например вот так:<br />
<br />
<pre><br />
COMMENT "Generated from graphical model: c:/temp/test.gmd";<br />
SET CELLSIZE MIN;<br />
SET WINDOW UNION;<br />
SET AOI NONE;<br />
#<br />
# declarations<br />
#<br />
Integer RASTER n1 FILE OLD NEAREST NEIGHBOR AOI NONE "c:/temp/imageA.img";<br />
Integer RASTER n2 FILE OLD NEAREST NEIGHBOR AOI NONE "c:/temp/imageB.img";<br />
Integer RASTER result FILE DELETE_IF_EXISTING IGNORE 0 ATHEMATIC 16 BIT SIGNED INTEGER "c:/temp/imageC.img";<br />
#<br />
# function definitions<br />
#<br />
#<br />
define func Integer($n1(1) + $n2(1))<br />
result = func;<br />
QUIT; <br />
</pre><br />
<br />
Изучим содержимое скрипта, не обращая внимания на то, что именно он делает, но попытаемся разобраться как происходит адресация файлов с которыми он работает. Как можно видеть из примера — файлы указываются в явном виде в виде полного к ним пути. Выполнить такой скрипт легко можно с помощью Model Librarian, однако он выполнит операцию только для той пары файлов, которая указана в содержимом скрипта. К сожалению, возможности создать массив из имен новых файлов в таком скрипте нет. Да если бы и была, при новом наборе файлов для обработки пришлось бы переписывать их имена заново в этот массив.<br />
<br />
=== Заменим меняющиеся параметры в модели (имена файлов) на аргументы ===<br />
<br />
Аргументы — специальные кодовые слова, которые сможет использовать пакетный процессор ERDAS. Наш файл приобрете следующий вид, имена файлов замененные на аргументы выделены жирным:<br />
<br />
COMMENT "Generated from graphical model: c:/temp/test.gmd";<br />
SET CELLSIZE MIN;<br />
SET WINDOW UNION;<br />
SET AOI NONE;<br />
#<br />
# declarations<br />
#<br />
Integer RASTER n1 FILE OLD NEAREST NEIGHBOR AOI NONE '''ARG1''';<br />
Integer RASTER n2 FILE OLD NEAREST NEIGHBOR AOI NONE '''ARG2''';<br />
Integer RASTER result FILE DELETE_IF_EXISTING IGNORE 0 ATHEMATIC 16 BIT SIGNED INTEGER '''ARG3''';<br />
#<br />
# function definitions<br />
#<br />
#<br />
define func Integer($n1(1) + $n2(1))<br />
result = func;<br />
QUIT; <br />
<br />
Уже лучше, теперь нужно найти способ подставить в эти аргументы наши имена файлов.<br />
<br />
=== Используем пакетный процессор для запуска модели с аргументами ===<br />
<br />
Перед этим создадим batch-файл (<tt>test.bcf</tt>), который будет запускать модель, такого содержания:<br />
<br />
<pre>modeler c:/temp/test.mdl c:\temp\imageA.img c:\temp\imageB.img c:\temp\imageC.img</pre><br />
<br />
Как видно из содержания, процесс запуска модели состоит из передачи таких параметров как имя модели и трех аргументов специальной программе — modeler'у.<br />
<br />
Уже лучше, так как нам не нужно хранить файлы в самой модели, однако все еще не очень хорошо, так как теперь вместо того, чтобы генерировать 100 моделей для 100 пар исходных файлов, надо генерировать 100 записей в bcf-файл с разными аргументами.<br />
<br />
Обращаем внимание, что возможности подстановки параметров в bcf в пакетном процессоре присутствует, это видно например из этого примера, однако в нашем случае ничего в полях параметров выбрать нельзя, потому что параметры нужно определить еще и в bcf-файле.<br />
<br />
[[Файл:batch-erdas-01.gif|center]]<br />
<br />
Идем дальше.<br />
<br />
=== Видоизменим bcf-файл введя параметры и туда ===<br />
<br />
Новый <tt>bcf</tt> будет выглядеть таким образом:<br />
<br />
<pre><br />
variable Input User;<br />
variable Input1 User;<br />
variable Output Auto "c:/temp//$(Input.root).img" Delete_Before;<br />
modeler c:/temp/test.mdl '$(Input)' '$(Input1)' '$(Output)' -meter -state<br />
</pre><br />
<br />
Загрузим bcf-файл в пакетный процессор, отметим, что появилась возможность выбора параметров (ими в нашем случае будут имена файлов).<br />
<br />
[[Файл:batch-erdas-02.gif|center]]<br />
<br />
=== Выберем обрабатываемые изображения ===<br />
<br />
Последним шагом нашей автоматизации будет выбор собственно изображений, для этого нажмем «Next» и появившемся окне сначала выберем группу изображений в качестве ImageA и группу в качестве ImageB, не забывая менять название параметра которому мы подставляем исходные растры.<br />
<br />
Удобным способом выбора будет сначала выбрать в параметрах Input и выбрать с помощью кнопки [[Файл:batch-cs-erdas-04.gif]] («Select files to add») серию первых исходных растров (imageA), а затем выбрать в параметрах Input1, выделить колонку Input1 и выбрать с помощью той же кнопки серию вторых исходных растров (imageB).<br />
<br />
[[Файл:batch-erdas-03.gif|center]]<br />
<br />
Автоматизация завершена, осталось только выполнить пакет — «Finish».<br />
<br />
=== Ссылки по теме ===<br />
<br />
* [http://gis-lab.info/qa/batch-cs-erdas.html Назначение системы координат в пакетном режиме в ERDAS IMAGINE]</div>Voltron