Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I use ImageJ as a library for a separate Java application?

In a regular Java application, I have a BufferedImage that I would like to manipulate with ImageJ. I have a macro that is exactly what I need to execute. I suspect that the first step is to make an ImagePlus object, but I am not sure how to then run a macro on the ImagePlus object from within Java. Section 7.3 of the ImageJ tutorial found here says:

If you decide to use ImagePlus as your internal image format you can also use all plugins and macros from the ImageJ distribution as well as all other ImageJ plugins.

But does not indicate how to do so. If someone could explain how, or point me towards a resource that does, I would very much appreciate it.

like image 611
eiowmqui Avatar asked May 20 '12 18:05

eiowmqui


People also ask

Is ImageJ written in Java?

Runs Everywhere: ImageJ is written in Java, which allows it to run on Linux, Mac OS X and Windows, in both 32-bit and 64-bit modes. Open Source: ImageJ and its Java source code are freely available and in the public domain.

How do I download ImageJ plugins?

Installing ImageJ plugins just requires you to download the plugin file (or files) and copy it into the plugins/ directory that can be found inside the ImageJ's installation directory. After copying the file and restarting ImageJ, the plugin can be run from the corresponding Plugins menu option.


2 Answers

The following site describes ImageJ API with examples: http://albert.rierol.net/imagej_programming_tutorials.html#ImageJ programming basics

The examples include reading images, processing pixels etc. Well, I guess you will also need to use the API documentation a lot.

like image 123
Hakan Serce Avatar answered Sep 29 '22 02:09

Hakan Serce


Here is a sample code that opens an image, inverts it and saves it back:

import ij.ImagePlus;
import ij.io.FileSaver;
import ij.process.ImageProcessor;

ImagePlus imgPlus = new ImagePlus("path-to-sample.jpg");
ImageProcessor imgProcessor = imgPlus.getProcessor();
imgProcessor.invert();
FileSaver fs = new FileSaver(imgPlus);
fs.saveAsJpeg("path-to-inverted.jpg");

And here's a sample code that shows how to manipulate an image to make it grayscale:

BufferedImage bufferedImage = imgProcessor.getBufferedImage();
for(int y=0;y<bufferedImage.getHeight();y++)
{
    for(int x=0;x<bufferedImage.getWidth();x++)
    {
        Color color = new Color(bufferedImage.getRGB(x, y));
        int grayLevel = (color.getRed() + color.getGreen() + color.getBlue()) / 3;
        int r = grayLevel;
        int g = grayLevel;
        int b = grayLevel;
        int rgb = (r<<16)  | (g<<8)  | b;
        bufferedImage.setRGB(x, y, rgb);
    }
}
ImagePlus grayImg = new ImagePlus("gray", bufferedImage);
fs = new FileSaver(grayImg);
fs.saveAsJpeg("path-to-gray.jpg");

I hope it helps you get started :)

like image 44
B Faley Avatar answered Sep 29 '22 00:09

B Faley