User Tools

Site Tools


Courses -2016
Courses 2018-
Downloads (-2016)
Downloads (2016-)
RSS aggregates

EMBL BioImage Data Analysis



—- Contact
CMCI Alumni
EMBL Heidelberg
EMBL Intranet

Popularity Ranking

Timeline of @cmci_

cmci_ avatar

RT @J_Cell_Sci: Registration is now open for our 2023 Journal Meeting 'Imaging Cell Dynamics', organised by Erika Holzbaur @ErikaHolzbaur,…
About 6 hours, 51 mins ago by: Kota Miura (@cmci_)

cmci_ avatar

RT @joachimgoedhart: This online resource that introduces data visualization using #rstats & ggplot2 has 12 complete protocols available fo…
About 11 hours, 40 mins ago by: Kota Miura (@cmci_)

cmci_ avatar

The code for image analysis is the "provided upon request" style ... it would be much better to have it openly acce…
About 13 hours, 6 mins ago by: Kota Miura (@cmci_)

cmci_ avatar

RT @SXS_biophysics: Why do cells move faster in higher viscosity environments? Debonil's paper on this question is out:
About 6 days, 2 hours ago by: Kota Miura (@cmci_)

cmci_ avatar

The first day of online “defragmentation” NEUBIAS academy / EOSC-Life ended, lead by @RogerDAntuono . Great job Roc…
About 6 days, 5 hours ago by: Kota Miura (@cmci_)

cmci_ avatar

RT @hpke1980: Our annotator software is coming soon on BiorXiv. Check it out! #napari @napari_imaging #singlecell h…
About 6 days, 7 hours ago by: Kota Miura (@cmci_)

R + ImageJ

Analysis using several tools is a powerful way to deal with complex Image data. We often do this, and here is one small example of taking advantages of ImageJ and R at the same time. There are three ways:

  1. Use R from ImageJ (Rserve)
  2. Use ImageJ from R (no description yet)
  3. Use ImageJ and R from Jython REPL

1. Using R from ImageJ via Rserve

In this example, R functions are used from ImageJ via Rserve using Jython scripting.

Rserve is a package that you could install from within R. In addition, you need two jar files in the plugin folder of ImageJ/Fiji.

After the installation, Rserve is an independent program so you could directly start it from the commandline (Rserve is a server that waits for commands, exectutes them and return the output) by:

R CMD Rserve

Then in the Fiji script editor, try the following code:

from org.rosuda.REngine.Rserve import RConnection
c = RConnection()
x = c.eval("R.version.string")
print x.asString()

If you see the version number of R printed in the output field, then you are successfully communicating with R from ImageJ.

Here is the Javadoc of Rserve.

Here is an example of using multi-peak fitting and shoing the peak positions within the current image.

2. Using ImageJ from R

One easy way is to execute a shell command to run ImageJ macro / scripts in R. Such example is well documented in the link below.

I have not made any attempt to directly access ImageJ classes from R but here is my advice for an inquiry. There is an R-package “RImageJ” that allows you to use ImageJ commands. Problem is that this package has not been updated since 2010.


This basically allows use of methods available in one of the classes in ImageJ called ij.IJ

This class IJ is a kind of utility class with many static methods that allows user to operate on images like ImageJ macro (especially the run() method does sort of such).

Access is limited, but depending on what you want to do, I could maybe advice more.

Another option is to access at much lower level using rJava:

By adding ImageJ to your Java path, it's probably possible to write script in R like Rhino javascript or Jython.

3. Using ImageJ and R from Jython Interactive Interpreter

ImageJ classes could be accessed by Jython, a python based java interface. R has rJava (JRI, Java - R Interface). For this reason, one way of using ImageJ functions and R functions in an integrated environment is to use these resources from Jython.

Python-scripting environment is light enough to test many things. After these testings are done, then a serious Java code could be written.

Here is a trial in win32. All commands will be done from command line. It should basically be similar in other environment.

Setting Up Environment.

You should have done:

  • rJava package should be installed in R.
  • jython.jar should be somewhere locally.


Following three jars should be in your classpath.

  • JRI.jar
  • REngine.jar
  • JRIEngine.jar
  • ij.jar

… so in command line

set CLASSPATH=%CLASSPATH%;C:\Program Files\R\R-2.12.0\library\rJava\jri\JRI.jar;C:\Program Files\R\R-2.12.0\library\rJava\jri\REngine.jar;C:\Program Files\R\R-2.12.0\library\rJava\jri\JRIEngine.jar;C:\ImageJ2\ij.jar

2. set PATH

R native libraries should be linked. Then the path should be added with bin, jri, R.dll and JVM.dll:

set PATH=%PATH%;C:\Program Files\R\R-2.12.0\bin;C:\Program Files\R\R-2.12.0\library\rJava\jri;C:\Program Files\R\R-2.12.0\bin\i386;C:\Program Files\Java\jre6\bin\client

Example Scripting

C:\>java org.python.util.jython
Jython 2.5.1 (Release_2_5_1:6813, Sep 26 2009, 13:47:54)
[Java HotSpot(TM) Client VM (Sun Microsystems Inc.)] on java1.6.0_22
Type "help", "copyright", "credits" or "license" for more information.

#importing image using ImageJ

>>> import ij.IJ
>>> import org.rosuda.JRI.REXP
>>> import org.rosuda.JRI.Rengine as Rengine
>>> import ij.IJ as IJ
>>> imp = IJ.openImage("")
>>> flA = imp.getProcessor().getFloatArray()
>>> intA = imp.getProcessor().getIntArray()
>>> intA3=intA[3]
>>> histA = imp.getProcessor().getHistogram()

# going into R, first instantiate
>>> engine = Rengine(['--no-save'], False, None)
>>> engine.assign("histR", histA)
>>> engine.eval("pixint <- {0:255}")
>>> engine.eval("histform <- data.frame(pixint, histR)")

>>> engine.eval("plot(histform$pixint, histform$histR)")
#.. will plot the graph but one cannot close it...

>>> engine.eval("")
#will close all the plots. 

documents/101105ij_r_jython.txt · Last modified: 2020/11/26 09:11 (external edit)