Макроязык (Macro Language) программы ImageJ - BioinforMatix.ru - портал по биоинформатике, имейджингу и биософту

Макроязык (Macro Language) программы ImageJ - BioinforMatix.ru - портал по биоинформатике, имейджингу и биософту

Макроязык (Macro Language) программы ImageJ

Печать E-mail
Автор Команда bioinformatix.ru   
22.04.2009 г.

Макроязык (Macro Language) - это специализированный функциональный программный механизм, который помогает автоматизировать ряд команд программы ImageJ.

Cамый простой способ создать макрос – это записать серию команд с помощью команды recorder (Plugins/Macros/Record...). Макрос сохраняется   в  виде текстового файла, и при необходимости запускается с помощью команды run (Plugins/Macros/Run – и выбираете свой, ранее сохраненный макрос). Если ваш макрос открыть  в  окне ImageJ, то его можно запустить с помощью горячих клавиш Ctrl-R. Можно также встроить на иконку  в  панели инструментов ImageJ.

Уже существует более чем 300 примеров макросов на официальном веб-сайте программы ImageJ (на английском языке). На нашем сайте тоже постоянно обновляется раздел о макросах и плагинах, где вы можете найти примеры других макросов, но только уже на русском языке. Чтобы перейти  в  этот раздел, нажмите Плагины и макросы программы ImageJ

Чтобы попробовать какой-нибудь из них, необходимо:

открыть его  в  окне браузера

скопировать его  в  буфер обмена (CRTL-A, Ctrl-C)

перейти на окно программы ImageJ

открыть окно редактора с помощью команды File/New/Text Window, или горячими клавишами Ctrl-Shift-N (или просто Shift-N)

вставить (Ctrl-V)

запустить его с помощью команды Plugins/Macros/Run (Ctrl-R).

Большинство примеров макросов к программе ImageJ доступны также  в  папке macros внутри папки ImageJ (автоматически появляется там после инсталляции ImageJ).


Простейший пример

 В  качестве примера мы будем создавать, запускать и обрабатывать одну строку - " Привет мир " макрос.

Во-первых, откройте новое окно редактора с помощью команд File/New/Text Window (или нажмите Shift-N).  В  окне редактора введите следующую строку:

print ("Привет мир");

Для запуска макроса нажмите Plugins/Macros/Run (Ctrl-R). На экране вы увидите лог-окно,  в  котором отображается выполненная команда.

Пример макроса в программе ImageJ

Чтобы сохранить этот файл (или любой другой), используйте команды File/Save As, и  в  появившемся диалоговом окне наберите имя файла. Желательно, чтобы оно было из латинских букв без пробелов. Вы можете запустить этот макрос нажатием одной клавиши, создав ярлык помощью команд Plugins/Shortcuts/Create Shortcuts.

Чтобы снова открыть макрос, используйте команды File/Open, или просто перетащите файл с макросом прямо на окно программы ImageJ.

 

Использование команды Recorder для воспроизведения макросов.

Простые макросы могут быть получены с помощью рекордера (PluginsMacrosRecord). Например, это макрос, который выполняет Измерения и ставит Метку:

run("Measure");
run("Label");

генерируется при использовании команд Analyze/Measure и Analyze/Label во время работы рекордера. Если сохранить этот макрос  в  папку Plugins, или  в  отдельную папку  в  папке Plugins с названием "Measure_And_Label.txt" и перезапустить ImageJ, то  в  списке плагинов появится новый плагин "Measure And Label". Вы можете запустить этот макрос нажатием одной клавиши, создав ярлык помощью команд Plugins/Shortcuts/Create Shortcuts.

Вот пример сохранения макроса "Measure And Label" на клавишу F1.

Пример сохранения макроса в программе ImageJ


Множественные макросы

Файл макроса может содержать более одного конкретного макроса, каждый из них определяется особыми ключевыми словами.

   macro "Macro 1" {

        print("This is Macro 1");
    }
     macro "Macro 2" {
        print("This is Macro 2");
    }
 В  этом примере показаны два макроса, определенные словами "Macro 1" и "Macro 2". 
Чтобы проверить, как работают эти макросы: скопируйте их, (Ctrl-C), перейдите на окно программы ImageJ
откройте окно редактора (Ctrl-Shift-N), вставьте из буфера скопированное (Ctrl-V)
выберите редактор MacrosInstall Macros
затем выберите MacrosMacro 1 для запуска первого макроса 
MacrosMacro 2 для запуска второго макроса. 
Отдельные макросы  в  множественных макросах могут 
взаимодействовать друг другом с помощью глобальных переменных:
var s = "a string";
     macro "Enter String..." {
        s = getString("Enter a String:", s);
    }
     macro "Print String" {
        print("This is Macro 2");
    }

С помощью команд FileSave As вы можете сохранить этот множественный макрос, содержащий  в  себе эти два макроса. Вы можете выбрать ему имя, например, "MyMacros.txt" и сохранить его  в  папке Macros, которая находится внутри основной папки ImageJ. Чтобы  в  дальнейшем инсталлировать данный макрос, нажмите PluginsMacrosInstall и  в  появившемся диалоговом окне выберете "MyMacros.txt". Если у этого макроса сменить название на "StartupMacros.txt", то при запуске программы ImageJ он будет запускаться автоматически.

 

Сочетания клавиш

 В  множественном макросе для каждого из макросов можно назначить сочетание клавиш  в  список быстрого доступа. Это делается добавлением  в  скобках после имени макроса буквы или символа, с помощью которого вы хотите запускать данный макрос.
    macro "Macro 1 [a]" {
        print("The user pressed 'a'");
    }
    macro "Macro 2 [1]" {
        print("The user pressed '1'");
    }

 В  этом примере нажатие клавиши "A" запускает первый макрос, нажатие клавиши '1' запускает второй макрос.

 

Инструменты макросов


Вы можете добавлять макросы  в  панель инструментов программы ImageJ. Когда макрос добавлен  в  эту панель, он просто запускается нажатием на кнопку  в  этой панели.

Вот пример инструмента, который отображает координаты мыши на изображении:
macro "Sample Tool - C0a0L18f8L818f" {
       getCursorLoc(x, y, z, flags);
       print("Sample: "+x+" "+y);
    }

Чтобы установить этот инструмент  в  панель инструментов основного окна программы ImageJ, необходимо открыть окно редактора открыть окно редактора (PluginsMacrosNew),  вставить туда этот код, а затем выполнить команду MacrosInstall Macros. Если этому макросу дать название "StartupMacros.txt", то при запуске программы ImageJ он будет запускаться автоматически.

Файл множественного макроса может содержать до шести макросов, которые являются инструментами, и неограниченное количество макросов, не являющихся инструментами. Файл макроса должен иметь расширение “. TXT”.   В  этом примере описан диалог, когда пользователь дважды нажимает на значок круга на панели инструментов.

var radius = 20;
    macro "Circle Tool - C00cO11cc" {
       getCursorLoc(x, y, z, flags);
       makeOval(x-radius, y-radius, radius*2, radius*2);
    }
    macro "Circle Tool Options" {
       radius = getNumber("Radius: ", radius);
    }

 

Инструменты действия

Инструменты макросов, имена которых заканчиваются на "Action Tool" при нажатии на них  в  панели инструментов совершают какое-нибудь действие.

Вот пример того, что появляется окно с информацией об  ImageJ при нажатии пользователем на знак вопроса ( в  котором зашифрована команда "About ImageJ") на панели инструментов.

  macro "About ImageJ Action Tool - C059T3e16?" {
       doCommand("About ImageJ...");
    }

Другие примеры макросов вы можете найти  в  разделе Плагины и макросы программы ImageJ

Чтобы посмотреть, как работает тот или иной макрос, скопируйте текст макроса, потом запускайте Ctrl-Shift-N (редактор нового макроса) и вставляйте туда скопированный текст макроса. Для запуска пользуйтесь командой Plugins/Macros/Run  или сочетанием горячих клавиш Ctrl +R.

 

Наборы инструментов

Файл макроса может содержать до шести инструментов (меню, действий), а также любое количество простых макросов. Макрос, содержащий такие инструменты, называется набор инструментов. Сохранить такой набор инструментов можно  в  папку ImageJ/macros/toolsets после чего он будет опубликован  в  меню правой части панели инструментов.

 

Инструмент Icons

Инструмент макросов Icons - простой и компактный набор, состоящий из однобуквенных команд.

Команда

Описание

Crgb

Установить цвет

Bxy

установить местонахождение базы (по умолчанию (0,0))

Rxywh

Нарисовать прямоугольник

Fxywh

Нарисовать и заполнить прямоугольник

Oxywh

Нарисовать овал

oxywh

Нарисовать и заполнить овал

Lxyxy

Нарисовать линию

Dxy

Нарисовать точку

Pxyxy...xy0

Нарисовать множественную линию

Txyssc

Нарисовать символ

Где X (X-координата), Y (Y-координата), W (ширина), H (высота), R (красный), G (зеленый) и B (синий).

 

Переменные 
 В  программа ImageJ макроязык является "typeless", т.е. бестиповым.
Переменные не должны быть описаны заранее и не имеют явных типов данных.
Они автоматически инициализируется при запуске макроса. Переменная может содержать числа, строки или массив.
 По сути дела, одна и та же переменная может быть хоть строкой, хоть массивом, 
хоть числом  в  разное время выполнения макроса. Числа хранятся  в  64-битном формате с плавающей точкой формате. 
 В  этом примере рассмотрим числа, строки и массивы, которые относятся к одной и той же переменной. 

 
v = 1.23;
    print(v);
    v = "a string";
    print(v);
    v = newArray(10, 20, 50);
    for (i=0; iv.length; i++) print(v[i]);


 В  отличие от обычных переменных, глобальные переменные должны быть объявлены до выполнения основной части макроса. Для этого используют их объявление с помощью ключевого слова 'var'.

Пример:

var x=1;
    macro "Macro1..." {
        x = getNumber("x:", x);
    }
    
    macro "Macro2" {
        print("x="+x);
    }

Следует заметить, что макроязык чувствителен к регистру. Например, "Name" и "name" – это две разные переменные.

 

Операторы
Макроязык программы ImageJ поддерживает почти все стандартные операторы Java, но с меньшим числом предшествующих уровней (Prec).

Оператор

Prec.

Описание оператора

++

1

До или после увеличения

--

1

До или после уменьшения

-

1

Минус

!

1

Булевое дополнение

~

1

Побитовое дополнение

*

2

Умножение

/

2

Деление

%

2

Остаток

&

2

Побитовое И

|

2

Побитовое ИЛИ

^

2

Побитовое XOR (когда первый операнд не равен второму)

,

2

Перемещение влево, перемещение вправо

+

3

Сложение, если строки - совмещение

-

3

Вычитание

, =

4

Меньше, меньше или равно

, =

4

Больше, больше или равно

==, !=

4

Равно, не равно

&&

5

Булевая И

||

5

Булевая ИЛИ

=

6

Присваивание

+=, -=, *=, /=

6

Присваивание с операцией

if/else Statements

The if statement conditionally executes other statements depending on the value of a boolean expression. It has the form:
   if (condition) {
statement(s)
}
The condition is evaluated. If it is true, the code block is executed, otherwise it is skipped. If at least one image is open, this example prints the title of the active image, otherwise it does nothing.
   if (nImages0) {
title = getTitle();
print("title: " + title);
}
An optional else statement can be included with the if statement:
   if (condition) {
statement(s)
} else {
statement(s)
}
In this case, the code block after the else is executed if the condition is false. If no images are open, this example prints "No images are open", otherwise it prints the title of the active image.
   if (nImages==0)
print("No images are open");
else
print("The image title is " + getTitle);
Note that the "==" operator is used for comparisons and the "=" operator is used for assignments. The braces are omitted in this example since they are not required for code blocks containing a single statement.

The macro language does not have a switch statement but it can be simulated using if/else statements. Here is an example:

   type = selectionType();
if (type==-1)
print("no selection");
else if ((type=0 && type=4) || type==9)
print("area selection");
else if (type==10)
print("point selection");
else
print("line selection");

Looping Statements (for, while and do...while)

Looping statements are used to repeatadly run a block of code. The ImageJ macro language has three looping statements:
  • for - runs a block of code a specified number of times
  • while - repeatedly runs a block of code while a condition is true
  • do...while - runs a block of code once then repeats while a condition is true
The for statement has the form:
   for (initialization; condition; increment) {
statement(s)
}
The initialization is a statement that runs once at the beginning of the loop. The condition is evaluated at top of each iteration of the loop and the loop terminates when it evaluates to false. Finally, increment is a statement that runs after each iteration through the loop.

In this example, a for loop is used to print the values 0, 10, 20...90.

   for (i=0; i10; i++) {
j = 10*i;
print(j);
}
The braces can be omitted if there is only one statement in the loop.
   for (i=0; i=90; i+=10)
print(i);
The while statement has the form:
   while (condition) {
statement(s)
}
First, the condition is evaluated. If it is true, the code block is executed and the while statement continues testing the condition and executing the code block until the condition becomes false.

In this example, a while loop is used to print the values 0, 10, 20...90.

   i = 0;
while (i=90) {
print(i);
i = i + 10;
}
The do...while statement has the form:
   do {
statement(s)
} while (condition);
Instead of evaluating the condition at the top of the loop, do-while evaluates it at the bottom. Thus the code block is always executed at least once.

In this example, a do...while loop is used to print the values 0, 10, 20...90.

   i = 0;
do {
print(i);
i = i + 10;
} while (i=90);

User-defined Functions

A function is a callable block of code that can be passed values and can return a value. The ImageJ macro language has two kinds of functions: built-in and user-defined. A user-defined function has the form:
   function myFunction(arg1, arg2. arg3) {
statement(s)
}
Functions can use the return statement to return a value.
   function sum(a, b) {
return a + b;
}
The number of arguments given when calling a function must correspond to the number of arguments in the function definition. The sum() function has two arguments so it must called with two arguments.
    print(sum(1, 2));
A function definition with no arguments must include the parentheses
   function hello() {
print("Hello");
}
and, unlike built-in functions, must be called with parentheses.
   hello();
Basic data types (strings and numbers) are passed to a function by value; arrays are passed by reference. 

Working with Strings

Use the indexOf() function to test to see if one string is contained in another. Use the startsWith() and endsWith() functions to see if a string starts with or ends with another string. Use the substring() function to extract a portion of string. Use the lengthOf() function to determine the length of a string.

Use the "==", "!=", "" and "" operators to compare strings. Comparisons are case-insensitive. For example, the following code display true.

   ans = "Yes";
if (ans=="yes")
print ("true");
else
print("false");

Extending the Macro Language

There are two ways to add functions implemented as Java code to the macro language. One is to use the call function to call static methods defined in a plugin. The other is to write a plugin that implements the MacroExtension interface. The ImpProps plugin demonstrates how to use the call function to get and set image properties and the Image5D_Extensions plugin demonstrates how to add MacroExtension (Ext) functions that work with the Image5D plugins.

Running Macros from the Command Line

You can run a macro from the command line and pass a string argument using the -macro or -batch command line options. As an example, this macro opens an image in the 'images' directory in the users home directory:
   name = getArgument;
if (name=="") exit ("No argument!");
path = getDirectory("home")+"images"+File.separator+name;
setBatchMode(true);
open(path);
print(getTitle+": "+getWidth+"x"+getHeight);
Assume it is named 'OpenImage.txt' and it is located in the macros folder. Run the command
   java -jar ij.jar -macro OpenImage blobs.tif
and ImageJ will launch and "blobs.tif: 256x254" is displayed in the Log window. Note that ImageJ assumed the '.txt' extension and the ImageJ/macros directory. Or run
   java -jar ij.jar -batch OpenImage blobs.tif
and ImageJ does not launch and "blobs.tif: 256x254" is displayed in the terminal window.

A description of all the ImageJ command line options is available at rsb.info.nih.gov/ij/docs/install/linux.html#options. 

Debugging Macros

You can debug a macro using the commands in the Debug menu, which was added to the macro editor in ImageJ 1.42. You start a debugging session by pressing ctrl-d (Debug Macro). You can then single step through the macro code by repeatedly pressing ctrl-e (Step).

There are seven commands in the Debug menu:

  • Debug Macro - Starts running the macro in debug mode and opens the "Debug" window, which initially displays the memory usage, number of open images, and the active image's title. The macro stops running at the first executable line of code, which is highlighted. Use one of the following commands to continue execution.
  • Step - Executes the highlighted statement and advances to the next. The variable names and values in the "Debug" window are updated.
  • Trace - Runs the macro, displaying variable names and values in the "Debug" window as they are encountered.
  • Fast Trace - Same as above, but faster.
  • Run - Runs the macro to completion at normal speed.
  • Run to Insertion Point - Runs the macro to a statement that was previously defined by clicking the mouse on an executable line of code.
  • Abort - Exits the macro.
Последнее обновление ( 24.04.2009 г. )
 
« Пред.


Copyright 2012 Bioinformatix.ru