Search code examples
javaimage-processingcomputer-visionimagejroi

Get ImagePlus objects from multiple ROIs using ImageJ


I'm using ImageJ's Java API and need to calculate some data based on multiple selected ROIs (regions of interest).

First I get an instance of the current ROI Manager by using

RoiManager roiMng = RoiManager.getInstance();

Then, I get all ROIs in the manager by using Roi[] rois = roiMng.getRoisAsArray(); .

From here, I need to get the image in the ROI and get some data from it. However, I seem to only get Null back when calling getImage() on a ROI.

Doing something like,

Roi roi = rois[0];
ImagePlus foo = roi.getImage();
int height = foo.getHeight();

gives me 'java.lang.NullPointerException' at the foo.getHeight() line.

Anyone got any ideas as to what may be going here?

Thanks!


Solution

  • you need to set the roi on the ImagePlus . Then you can duplicate the part of the image defined by the active ROI by calling the duplicate() method.

    ImagePlus imp = IJ.getImage(); // get the (current) image from the active/selected window
    ...
    imp.setRoi(rois[0]);
    ImagePlus roiImp = imp.duplicate();
    

    This way you will get the image defined by the ROI's bounding box. The duplicate methods either creates a copy of the entire image or the roi-image, if a ROI is set.

    In case you do not need the pixel data, but you need to get ROI based stats, you might want to have a look at https://imagej.nih.gov/ij/developer/api/ij/ImagePlus.html#getStatistics-- and https://imagej.nih.gov/ij/developer/api/ij/gui/Roi.html#getStatistics--

    hope that helps

    Felix