User Tools

Site Tools


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 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.

http://stackoverflow.com/questions/18989725/how-can-i-call-execute-an-imagej-macro-with-r

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:

http://romainfrancois.blog.free.fr/index.php?category/R-package/RImageJ

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

http://rsbweb.nih.gov/ij/developer/api/ij/IJ.html

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:

http://www.rforge.net/rJava/index.html

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
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("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. 

documents/101105ij_r_jython.txt · Last modified: 2020/11/26 09:11 by 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki