42
Introducon to ImageJ Session 4: Macro scripng Dimitri Vanhecke

Introduction to ImageJ Session 4: Macro scripting

  • Upload
    others

  • View
    14

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Introduction to ImageJ Session 4: Macro scripting

Introduction to ImageJSession 4: Macro scripting

Dimitri Vanhecke

Page 2: Introduction to ImageJ Session 4: Macro scripting

What? Why? How?

Why writing macros?

LESS CLICKING: ImageJ macro makes your life easier

ImageJ Java plugins (powerfull, exchangable) ImageJ macros (easier, automation of tasks... And documentation, not so easy to exchange)

How to write ImageJ macros

Fiji has a IDE (integrated development environment): editor with syntax highlighter, command auto-completion, ...ImageJ has not such features

Both can record a macro = recording the sequence of clicks in ImageJ

What is an ImageJ macro?

A macro is a recipe= an algorithm that automates a series of (repetitive) ImageJ commands. In essence: a text file with a sequence of commands.

Page 3: Introduction to ImageJ Session 4: Macro scripting

Imagej Macros vs plugins vs other scripting languages

Plugins- Require java programming knowledge- infinite possibilities- Library compatible (once a class is written, it can be used anywhere)

Macros- Much easier and lighter (scripting vs programming)- Relatively slow (~40x slower than plugins)- Limited real-time interaction: a macro is a train that rolls, and rolls, and rolls...- No extendability (no use in other software)

Many scripting languages: ImageJ Macro, JavaScript, BeanShell, Jython, Jruby, Clojure, Groovy, ...

Advantages of ImageJ macros over these languages:- Easy to learn since commands are mirrors of the GUI functions- No need to understand java API

Page 4: Introduction to ImageJ Session 4: Macro scripting

Recording a macro

EXERCISEUse the macro recorder

EXERCISEUse the macro recorder

Plugins > macro > record...

Open example 1 (A, lena or B, Fabio)Adjust brightness and contrast (use ‘set’ in Contrast & Brightness)Invert the image

In the Recorder: click «Create»

Close all images. In the created macro window: click «run»

Page 5: Introduction to ImageJ Session 4: Macro scripting

Recording a macro

EXERCISE See how the macro recorder works

EXERCISE See how the macro recorder works

Close all images.

Macro.ijm > click run

Automatically opens example 1 (lena or Fabio)Automatically adjusts brightness and contrastInverts the image

Page 6: Introduction to ImageJ Session 4: Macro scripting

The «run» command

Use the macro language's built-in run(command, options) function to run any of the 400+ commands in the ImageJ menu bar.

run(«command as shown in imageJ menus», «options»);e.g. Will run the invert algorithm

Many commands come with options.

e.g. The scale command

Page 7: Introduction to ImageJ Session 4: Macro scripting

The «run» command

Some options are required, some are optional

- Some are required input, some are optional.- Some very important commands have their own ‘short’, eg the ‘open‘ command

open(Path) requires a path to an imageopen(Path, n) requires the path to an image, and if n is specified, the nth image (if the image is a stack) will be

opened. If n is not specificed, or the image is not a stack, the entire image/stack is opened.

Page 8: Introduction to ImageJ Session 4: Macro scripting

The print command

1. Open a new script windowIn Fiji: File > New > Script... A new window opens, named «New_»

2. Set the languageIn the Editor: Language > IJ1 macro (note: in the recorder, the macro language was set as default)

3. Write a line of code, e.g. :

! Do not ignore lowercase (print is not the saame as Print or PRINT)! watch the quotation marks «» ! and the semicolor... They are all important

4. Automatically, the syntax highlighter will:- Put «print» in dark yellow: it is recognized as a valid command- («hello world») in pink: it is recognized text- If this does not happen, you forgot point 2, setting the language

Now click «run»

Page 9: Introduction to ImageJ Session 4: Macro scripting

The print command

EXERCISEThe “Hello world” script

EXERCISEThe “Hello world” script

Result:

Script.ijm: Line 1-12

Note: you can also use other words than «Hello world»

Page 10: Introduction to ImageJ Session 4: Macro scripting

Running / debugging the script

Find the prepared script.ijm on the website

To run the entire script (everything), click «run» (don’t do this now)To run part of the script, select the lines you want to include and hit CTRL+SHIFT+R (or Run > Run selected code)

Page 11: Introduction to ImageJ Session 4: Macro scripting

The print command: anatomy of the syntax

Print() is a build-in macro function. It outputs a string to the log window.hello world is the argument. If the agrument is text, it must be place in quotation marks

The argument can be:- Text (placed in «»)- Variables (not placed in «»)- A combination of both- Special arguments

Page 12: Introduction to ImageJ Session 4: Macro scripting

The print command: special arguments

EXERCISEThe “Hello world” script, revisited

EXERCISEThe “Hello world” script, revisited

In the Editor:Write:

What is the function of the special argument «\\clear»?

In the Editor:Write («clear» without capital «C»):

Any differences?

Page 13: Introduction to ImageJ Session 4: Macro scripting

Basics II: installing macros in ImageJ

EXERCISEThe “Hello world” script, revisited II

EXERCISEThe “Hello world” script, revisited II

In the Editor:Write:

Script.ijm: Line 14-16

«macro»: turns blue, «print_Hello» red, and the {} also turn red.Two macros in 1 file = Macro sets

Save the macro. Use a ijm extension (ImageJ Macro)In the Editor: File > Save

Install macrosIn Fiji: Plugins > Macro > Install

(click anywhere in an image and observe the log window)

Page 14: Introduction to ImageJ Session 4: Macro scripting

Variables and strings

EXERCISEText variables

EXERCISEText variables

In the Editor:Write:

What is the difference between the above script and this one below?

Page 15: Introduction to ImageJ Session 4: Macro scripting

Variables and strings

EXERCISECombining text variables

EXERCISECombining text variables

In the Editor:Write:

Variables are typeless (no need to declare integers, bytes, ...)Variables can contain

- a part of a text (=string)- a number (integer, double, float)- a boolean (true/false)- an array

Case sensitive! (AMI is not the same as Ami)

Page 16: Introduction to ImageJ Session 4: Macro scripting

Operators

Used to perform operations on variables and their values

++ Increment 1-- Decrement 1- Unary minus (e.g. -4) 1

* Multiplication 2/ Division 2+ addition or string concatenation 3- Subtraction 3

<, <=less than, less than or equal 4>, >=greater than, greater than or equal 4== Equal to 4!= Not Equal to 4

&& Boolean AND 5¦¦ Boolean OR 5 = Assignment 6

Precendence defines the order the software reads a string of operators.

E.g. -4 + 3 * 2, -(of -4) will be read first, then * (level 2), then + (level 3).

Page 17: Introduction to ImageJ Session 4: Macro scripting

Using variables

The statements can be fitted with variables. In short, the options must be a text form that is understood by the command.e.g.

Note the difference between text («string») and numbers («Variable»)- Text must always between «»- Variables not (try it)- Plus (+) joins numbers and text together- The sentence is read from left to right (you can perform calculation on the variables during concatenation)

Alternatively:

Page 18: Introduction to ImageJ Session 4: Macro scripting

Arrays

An array is a list of variables. It can contain numbers, strings (text) or both.

Arrays have powerful methods:- Find min, max, mean, mode, median, & maxima/minima (not just max/min!) in a numerical array- Sorting (alphabetically)- Find fourier amplitudes- Rank positions- Get Vertex positions (assuming the array describes positions on a closed contour)

Script.ijm: Line 18-29

Page 19: Introduction to ImageJ Session 4: Macro scripting

Build-in Functions:

There are many build-in functions: help > Macro functions ... http://rsb.info.nih.gov/ij/developer/macro/functions.html

There are many build-in functions:

Page 20: Introduction to ImageJ Session 4: Macro scripting

Functions

You can also make functions yourself:

1. ‘sumTheseValues’ is called2. The two variables Value1 and Value2 are send to the function (accepted as variable «one» and «two»). 3. Within the function (defined by {}), some lines can be written4. The result is returned to the main code

Script.ijm: Line 31-41

Page 21: Introduction to ImageJ Session 4: Macro scripting

Comments

When you read your code again later (or much later), you want to understand what your code does, and why. For this, you can add comments, i.e. text which is ignored by ImageJ when it executes the macro.

Use // in front of the line. ; at the end is not needed. The entire line will be ignored by the interpreter.e.g. Line 38

For multiline comments (eg line 44-59):Use ‘/*’. Close the section off by ‘*/’

Page 22: Introduction to ImageJ Session 4: Macro scripting

Window management

- Each image gets an ID (a negative number). With at least one image open:- Useful to track each window and image during more complex algorithms.

- Out of any number of open windows, you can always select the one you need, provided you have the ID (get it when is opened/created)

= equivalent of clicking on the window

Alternatively, you can rename the window:

Page 23: Introduction to ImageJ Session 4: Macro scripting

Something useful…

Try to make a Sobel filter yourself.

EXERCISEEXERCISE

Page 24: Introduction to ImageJ Session 4: Macro scripting

Something useful…

Try to make a Sobel filter yourself.

EXERCISEEXERCISE

Lines 92-115

Page 25: Introduction to ImageJ Session 4: Macro scripting

Conditional codeTo execute a part of the code if and only if a certain condition is met:

<, <= less than, less than or equal

>, >= greater than, greater than or equal

==, != equal, not equal

&& boolean AND

|| boolean OR

Note the ==, it is not = (that would be an assingment, which does not make sense here). Operators:

Lines 119-133

Page 26: Introduction to ImageJ Session 4: Macro scripting

Conditional code

To execute a certain part of the code if and only if a certain condition is NOT met:

<, <= less than, less than or equal

>, >= greater than, greater than or equal

==, != equal, not equal

&& boolean AND

|| boolean OR

Page 27: Introduction to ImageJ Session 4: Macro scripting

Something useful II

Try to make a Sobel filter yourself. Open an image of choice, but only run the filter if the image width is at least than 1000 pixels. If it is smaller, scale it to 1000px width and then run the sobel filter.

Additional: pack the limiter (1000 px) in a variable and pass it on to the function

EXERCISEEXERCISE

Page 28: Introduction to ImageJ Session 4: Macro scripting

Something usefull, maybe?

EXERCISEEXERCISE

Lines 136-170

Page 29: Introduction to ImageJ Session 4: Macro scripting

LoopsTo repeat instructions several times, loops are used.

for - runs a block of code a specified number of times while - repeatedly runs a block of code while (as log as) a condition is true do...while - runs a block of code once then repeats while a condition is true

Evaluatecondition

Statements

true false

Statements

false

true

EvaluateconditionStatements

false

true

X ++

X < defined variable

Page 30: Introduction to ImageJ Session 4: Macro scripting

FOR Loops

for This loop is a good choice when the number of repetitions is known, or can be supplied aforehand by the user.

for (initialization; condition; increment) {statement(s);

}

Output: Output:

Lines 180-184

Page 31: Introduction to ImageJ Session 4: Macro scripting

WHILE Loops

the loop must repeat until a certain "condition" is met. If the "condition" is FALSE at the beginning of the loop, the loop is never executed.

while (condition) {statement(s);

}

Lines 187-193

Page 32: Introduction to ImageJ Session 4: Macro scripting

DO Loops

Same concept as the while loop except that the do-while will always execute the body of the loop at least one time. Do-while is an exit-condition loop -- the condition is checked at the end of the loop.

This looping process is a good choice when you are asking a question, whose answer will determine if the loop is repeated.

do {statement(s);

} while (condition);

Lines 196-203

Page 33: Introduction to ImageJ Session 4: Macro scripting

Point operations}

EXERCISEOpen an grayscale image and invert the image by a script (do not use the internal invert function).

EXERCISEOpen an grayscale image and invert the image by a script (do not use the internal invert function).

You now know already enough to write a first simple script. - Iterate through all pixels in the image to invert the 8 bit image. Obviously, you are not allowed to use the run(«invert»)

command.

- Suggestions:- Use a loop- getPixel, setPixel- getDimensions

Page 34: Introduction to ImageJ Session 4: Macro scripting

Point operations

You now know already enough to write a first simple script. Iterate through all pixels in the image to invert the 8 bit image. Combine the following:

EXERCISEOpen an grayscale image and invert the image by a script (do not use the internal invert function).

EXERCISEOpen an grayscale image and invert the image by a script (do not use the internal invert function).

Lines 205-215

Page 35: Introduction to ImageJ Session 4: Macro scripting

Result table functions

getResult («Column name», row number)Will get a value from the result table (assumed there is one).

E.g. After running the «Measure particle« routine:

Result: 1719.88697

print(getResult(“X”, 3006));

Page 36: Introduction to ImageJ Session 4: Macro scripting

A propos: arrays

EXERCISETry to find the mean and the median value of the particle measurement of Figure 11

EXERCISETry to find the mean and the median value of the particle measurement of Figure 11

Median: use an array. - Store all values (Feret) in one array- Sort the array- Pick out the middle value (=median)

Mean: sum all values and devide by the total number of values. - Sum all values (Feret) in one variable- Divide by the length of the table: nResults

Page 37: Introduction to ImageJ Session 4: Macro scripting

A propos: arrays

EXERCISETry to find the mean and the median value of the particle measurement of Figure 11

EXERCISETry to find the mean and the median value of the particle measurement of Figure 11

Median: use an array. - Store all values (Feret) in one array- Sort the array- Pick out the middle value (=median)

Mean: sum all values and devide by the total number of values. - Sum all values (Feret) in one variable- Divide by the length of the table: nResults

Lines 218-236

Page 38: Introduction to ImageJ Session 4: Macro scripting

Graphical user interface

DialogWill create a interaction window

Lines 238-246

Page 39: Introduction to ImageJ Session 4: Macro scripting

Graphical user interface II

getString reads an input string (text)getChoice reads an input combo box (Choice)getNumber reads an input number

Lines 249-266

Page 40: Introduction to ImageJ Session 4: Macro scripting

Graphical user interface: sliders and radiobuttons

addSlider(label, min, max, default) adds a slideraddRadioButtonGroup(label, items, rows, columns, default) similar as checkboxgroup, but with radio buttons (only 1 choice)

...

...

Lines 270-303

Page 41: Introduction to ImageJ Session 4: Macro scripting

Graphical user interface: add help button

addHelp(html) adds a help button. The option defines the html code

Lines 306-345

Page 42: Introduction to ImageJ Session 4: Macro scripting