MIJ is a java package to exchange images between MATLAB and the original ImageJ. It is written by Daniel Sage (Biomedical Image Group (BIG), Ecole Polytechnique Fédérale de Lausanne (EPFL), Switzerland) and Dimiter Prodanov (Department of Physiology and Pharmacology, Université Catholique de Louvain (UCL), Brussels, Belgium). It allows to start a instance of ImageJ inside MATLAB and exchange images back and forth with it. It takes advantage of the fact that the user interface of MATLAB is written in Java.
For your convenience, Jacques Pecreaux & Johannes Schindelin wrote
Miji.m, which makes it super-easy to use Fiji and the libraries and functions provided by Fiji’s components from within MATLAB. Simply make sure that the
scripts/ directory of your
Fiji.app/ is in MATLAB’s search patch, via File › Set Path… (on Mac, the file chooser doesn’t let you choose directories within .app packages, so you have to use the MATLAB command
addpath('/Applications/Fiji.app/scripts')). Then a simple
will start a Fiji inside MATLAB.
Using MATLAB as processing core and sending results to Fiji
An example how to work with MIJ is provided here:
MIJ.run('Embryos (42K)'); I = MIJ.getCurrentImage; E = imadjust(wiener2(im2double(I(:,:,1)))); imshow(E); MIJ.createImage('result', E, true);
If you get an error saying that some Plugin related classes cannot be found, please update your Fiji with Help › Update Fiji!
Running ImageJ commands
In ImageJ, you can record macros, one of the most powerful ways to use the program. Most of the recorded statements will look like this:
run("Command", "key1=7 key2 key3=[C:\\Documents and Settings\\Fiji\\Test.png]");
The first parameter to the
run() method is the menu item’s label which identifies the plugin to run (in this example, the label would read: Command).
The second parameter is a String containing values the user specified via an ImageJ dialog. Every value is identified by a label, and except for checkboxes (such as
key2 in the example above), they have values. If the values contain spaces, you need to enclose the value in square brackets (such as
key3 in the example above).
Note that the backslash is a so-called escape character, i.e. it can be used to insert special characters such as line breaks or tabs. To insert a plain backslash, it has to be repeated therefore (as in the
C:\\Documents and Settings becomes
C:\\\\Documents and Settings).
You can use those recorded statements in a slightly modified form via MIJ:
- replace the double quotes by single quotes
- prefix the
The above example would read like this:
MIJ.run('Command', 'key1=7 key2 key3=[C:\\Documents and Settings\\Fiji\\Test.png]');
Note: in MATLAB, it is not strictly necessary to end the
MIJ.run() statement with a semicolon, because it does not return anything. However, it is good practice with MIJ to end all statements in semicolons: some functions return images, cluttering the output and taking a very long time to print if the statement does not end in a semicolon.
Normally, the best way to use MIJ is to use ImageJ’s macro recorder. However, this procedure does not work when opening images because ImageJ records simply:
Instead, one needs to keep in mind how
run() statements are constructed and imitate it for the
MIJ.run('Open...', 'path=[C:\\Documents and Settings\\Fiji\\Test.png]');
Using Fiji as a 3D viewer for MATLAB
To get a quick help on the available functions, call
Further descriptions and example code can be found on the home page for MIJ. Eventually, detailed documentation about the class MIJ can be found here (suitable if you have a bit of experience with Java).
Alternative: do not start the Fiji GUI
If you want to use the functions without starting Fiji’s graphical interface, just call