User Tools

Site Tools


documents:101105ij_r_jython

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
documents:101105ij_r_jython [2014/01/16 10:50] kotadocuments:101105ij_r_jython [2020/11/26 09:11] (current) – external edit 127.0.0.1
Line 1: Line 1:
 +======= 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:
 +
 +  - Use R from ImageJ (Rserve)
 +  - Use ImageJ from R (no description yet)
 +  - 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. 
 +
 +[[http://www.rforge.net/Rserve/doc.html|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. 
 +
 +  * [[http://www.rforge.net/Rserve/files/|Rserve downloads]]
 +
 +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:
 +<code>
 +R CMD Rserve
 +</code>
 +
 +Then in the Fiji script editor, try the following code:
 +
 +<sxh python>
 +from org.rosuda.REngine.Rserve import RConnection
 + 
 +c = RConnection()
 +x = c.eval("R.version.string")
 +print x.asString()
 +c.close()
 +</sxh>
 +
 +If you see the version number of R printed in the output field, then you are successfully communicating with R from ImageJ.
 +
 +[[http://rforge.net/org/doc/|Here is the Javadoc of Rserve]].  
 +
 +[[http://cmci.embl.de/documents/120206pyip_cooking/python_imagej_cookbook#rmulti-peak_fitting_using_r|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. 
 +
 +<blockquote>
 + 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. 
 +
 +</blockquote>
 +
 +====== 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:
 +
 +  * [[http://rosuda.org/rJava/|rJava]] package should be installed in R.  
 +  * [[http://www.jython.org/|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
 +<code>
 +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
 +</code>
 +**2.  set PATH**
 +
 +R native libraries should be linked. Then the path should be added with bin, jri, R.dll and JVM.dll:
 +<code>
 +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
 +</code>
 +===== Example Scripting =====
 +<sxh python>
 +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. 
 +
 +</sxh>
  

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki