User Tools

Site Tools


Sidebar

Top
Seminar
Courses
Textbooks
Documents
Downloads (-2016)
Downloads (2016-)
Weblog
RSS aggregates
Discussions
Archives


EMBL BioImage Data Analysis

EuBIAS

NEUBIAS

—- Contact
CMCI Alumni
ALMF
EMBL Heidelberg
EMBL Intranet


Popularity Ranking


Timeline of @cmci_

cmci_ avatar

RT @empleo_mid: Puesto: 1 PhD student position available for "Image analysis of cardiac development in the mouse" - CNIC https://t.co/0AfJ8
About 14 hours, 5 mins ago by: Kota Miura (@cmci_)

cmci_ avatar

RT @CanonMedicalEDI: Five #vacancies currently open: Image Analysis Scientist, Software Engineer (various) & IT Administrator. Rewarding #H…
About 1 day, 15 hours ago by: Kota Miura (@cmci_)

cmci_ avatar

@haesleinhuepf @ReynaudEmmanuel @BioImagingUK @BBSRC @NEUBIAS_COST ... and fun!
About 1 day, 15 hours ago by: Kota Miura (@cmci_)

cmci_ avatar

RT @thewtex: @cmci_ @ProjectJupyter @UCBIDS @stefanvdwalt @cziscience @thefreemanlab @ctrueden @FijiSc @cmci_ sorry about the quality. Here…
About 1 day, 15 hours ago by: Kota Miura (@cmci_)

cmci_ avatar

@thewtex @ProjectJupyter @UCBIDS @stefanvdwalt @cziscience @thefreemanlab @ctrueden @FijiSc thanks!
About 1 day, 15 hours ago by: Kota Miura (@cmci_)

cmci_ avatar

@thewtex @ProjectJupyter @UCBIDS @stefanvdwalt @cziscience @thefreemanlab @ctrueden @FijiSc great! do you have an y… https://t.co/Xnyd9VhAip
About 1 day, 16 hours 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 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: 2016/05/24 05:46 (external edit)