# Bioimage Analysis Wiki

### Site Tools

documents:101105ij_r_jython

# Differences

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

 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) Both sides previous revision Previous revision 2014/04/15 08:23 kota [2. Using ImageJ from R] 2014/04/14 14:57 kota [2. Using ImageJ from R] 2014/01/16 02:50 kota 2013/09/10 06:02 kota 2013/09/10 06:00 kota 2013/09/10 05:59 kota 2012/07/11 08:10 external edit2011/05/27 07:31 kota 2010/11/04 06:46 kota created Next revision Previous revision 2014/04/15 08:23 kota [2. Using ImageJ from R] 2014/04/14 14:57 kota [2. Using ImageJ from R] 2014/01/16 02:50 kota 2013/09/10 06:02 kota 2013/09/10 06:00 kota 2013/09/10 05:59 kota 2012/07/11 08:10 external edit2011/05/27 07:31 kota 2010/11/04 06:46 kota created 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 + ​ + + 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. + + [[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. ​ + + ​ + + ====== 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 + ​ + **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 + ​ + ===== 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. ​ + +