Bioimage Analysis Wiki

Sidebar

EMBL BioImage Data Analysis

EuBIAS

NEUBIAS

Popularity Ranking

 @MarionLouveaux I can't find Astha's twitter account, but she is here already in twitter. She's got the poster priz… https://t.co/mZuB80qRJP About 1 hour, 51 mins ago by: Kota Miura (@cmci_) one of the discussion topics with @MarionLouveaux and Astha was "how to deal with people asking 'I want to find dif… https://t.co/ME9YhMp9hL About 1 hour, 52 mins ago by: Kota Miura (@cmci_) Ah wrongly mentioned. @ilastik_team About 3 hours, 19 mins ago by: Kota Miura (@cmci_) ... a pic kindly taken by Fred Hamprecht who just by chance passed by. Thanks Fred! @ilastik About 3 hours, 22 mins ago by: Kota Miura (@cmci_) RT @Biosdfp: Amazing metal-replica electron microscopy of cortical actin in membrane blebs from the Svitkina and Alexandrova labs in latest… About 22 hours, 18 mins ago by: Kota Miura (@cmci_) RT @PLOSBiology: EmbryoPhenomics - an #OpenSource platform for high-throughput #phenome screening of aquatic #embryos. Proof-of-principle c… About 22 hours, 19 mins ago by: Kota Miura (@cmci_)
documents:101105ij_r_jython

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()
c.close()


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

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.

RImageJ:

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.

1. set CLASSPATH

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

#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("http://rsb.info.nih.gov/ij/images/blobs.gif")
>>> imp.show()
>>> 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("graphics.off()")
#will close all the plots.