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 revision Previous revision
Next revision
Previous revision
documents:101105ij_r_jython [2014/04/14 14:57]
kota [2. Using ImageJ from R]
documents:101105ij_r_jython [2016/05/24 05:46] (current)
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. 
 +
 +<​quote>​
 + ​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. ​
 +
 +</​quote>​
 +
 +====== 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>​
  
documents/101105ij_r_jython.txt ยท Last modified: 2016/05/24 05:46 (external edit)