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