Overlays (from plugin) example?

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Overlays (from plugin) example?

Kenneth Sloan
I'm writing a plugin, in java (i.e., NOT a macro), and feel the need to
display results (for now, several sets of points - later, perhaps several
polylines) as an overlay.  I prefer not to munge the underlying image.

Google tells me that someone implemented "ImageCanvasWithOverlay" about a year ago.

But, I also see references to "Overlay" in the ImageJ documentation, and a flurry of
changes (as recent as 1 June) that seem to be related to overlays.  From what I can
gather, this overlay feature is closely coupled with ROI's.  It's not entirely clear to me
that my point sets are "ROIs" - perhaps I'm confused about that?

I checked the Examples, and found a *macro* that uses the ROI manager to create an overlay.
What I need is an example that does this from a (java) plugin.  

My target code for this would look something like:

        createOverlay();
        for(int i = 0; i < numPointSets; i++)
         {
           setColor(color[i]);
           for(int p = 0; p < numPoints[i]; p++)
             plotPoint(points[i][p];
         }
        showOverlay();

Bottom line: I want to display several collections of POINTS (perhaps later POLYLINES) as
an overlay.

Perhaps I need a good "plugin developers' reference manual"?  Feel free to point me at one...please!  
My profound apologies if such a thing exists in plain sight and I've simply missed it.

--
Kenneth Sloan
[hidden email]
Reply | Threaded
Open this post in threaded view
|

Re: Overlays (from plugin) example?

Michael Schmid
Hi Kenneth,

probably the easiest would be to create a Roi, e.g.,
     Roi roi = new PolygonRoi(xPoints, yPoints, nPoints, Roi.POLYGON);
where xPoints and yPoints are int arrays of the x and y coordinates,
and then use the setOverlay ImagePlus method
     imp.setOverlay(roi, strokeColor, strokeWidth, fillColor)

Michael
________________________________________________________________

On 1 Jul 2010, at 18:04, Kenneth Sloan wrote:

> I'm writing a plugin, in java (i.e., NOT a macro), and feel the  
> need to
> display results (for now, several sets of points - later, perhaps  
> several
> polylines) as an overlay.  I prefer not to munge the underlying image.
>
> Google tells me that someone implemented "ImageCanvasWithOverlay"  
> about a year ago.
>
> But, I also see references to "Overlay" in the ImageJ  
> documentation, and a flurry of
> changes (as recent as 1 June) that seem to be related to overlays.  
> From what I can
> gather, this overlay feature is closely coupled with ROI's.  It's  
> not entirely clear to me
> that my point sets are "ROIs" - perhaps I'm confused about that?
>
> I checked the Examples, and found a *macro* that uses the ROI  
> manager to create an overlay.
> What I need is an example that does this from a (java) plugin.
>
> My target code for this would look something like:
>
> createOverlay();
> for(int i = 0; i < numPointSets; i++)
> {
>   setColor(color[i]);
>   for(int p = 0; p < numPoints[i]; p++)
>     plotPoint(points[i][p];
> }
> showOverlay();
>
> Bottom line: I want to display several collections of POINTS  
> (perhaps later POLYLINES) as
> an overlay.
>
> Perhaps I need a good "plugin developers' reference manual"?  Feel  
> free to point me at one...please!
> My profound apologies if such a thing exists in plain sight and  
> I've simply missed it.
>
> --
> Kenneth Sloan
> [hidden email]
Reply | Threaded
Open this post in threaded view
|

Re: Overlays (from plugin) example?

Rasband, Wayne (NIH/NIMH) [E]
In reply to this post by Kenneth Sloan
On Jul 1, 2010, at 12:04 PM, Kenneth Sloan wrote:

> I'm writing a plugin, in java (i.e., NOT a macro), and feel the need to
> display results (for now, several sets of points - later, perhaps several
> polylines) as an overlay.  I prefer not to munge the underlying image.
>
> Google tells me that someone implemented "ImageCanvasWithOverlay" about a year ago.
>
> But, I also see references to "Overlay" in the ImageJ documentation, and a flurry of
> changes (as recent as 1 June) that seem to be related to overlays.  From what I can
> gather, this overlay feature is closely coupled with ROI's.  It's not entirely clear to me
> that my point sets are "ROIs" - perhaps I'm confused about that?
>
> I checked the Examples, and found a *macro* that uses the ROI manager to create an overlay.
> What I need is an example that does this from a (java) plugin.  
>
> My target code for this would look something like:
>
> createOverlay();
> for(int i = 0; i < numPointSets; i++)
> {
>   setColor(color[i]);
>   for(int p = 0; p < numPoints[i]; p++)
>     plotPoint(points[i][p];
> }
> showOverlay();
>
> Bottom line: I want to display several collections of POINTS (perhaps later POLYLINES) as
> an overlay.
>
> Perhaps I need a good "plugin developers' reference manual"?  Feel free to point me at one...please!  
> My profound apologies if such a thing exists in plain sight and I've simply missed it.

An overlay is just a list of one or more ROIs that is non-destructively displayed on an image. To display a collection of points you can create a PointRoi (a multi-point selection) and display it as an overlay. Or create a ShapeRoi containing custom points and display it as an overlay. Here is an example plugin that does both.

-wayne


import ij.*;
import ij.gui.*;
import java.awt.*;
import java.util.Random;
import ij.plugin.*;
import java.awt.geom.*;

public class Overlay_Points implements PlugIn {

   public void run(String arg) {
      ImagePlus imp = IJ.getImage();
      int n = 100;
      int[] xpoints = new int[n];
      int[] ypoints = new int[n];
      Random ran = new Random();
      for (int i=0; i<n; i++) {
         xpoints[i] = (int)(ran.nextDouble()*imp.getWidth());
         ypoints[i] = (int)(ran.nextDouble()*imp.getWidth());
      }
      Roi roi = new PointRoi(xpoints, ypoints, n);
      roi.setStrokeColor(Color.red);
      Overlay overlay = new Overlay(roi);
      imp.setOverlay(overlay);

      IJ.wait(4000);
      int size = 10;
      int lineWidth = 3;
      GeneralPath path = new GeneralPath();
      for (int i=0; i<n; i++) {
         path.moveTo(xpoints[i]-size,ypoints[i]);
         path.lineTo(xpoints[i]+size,ypoints[i]);
         path.moveTo(xpoints[i],ypoints[i]-size);
         path.lineTo(xpoints[i],ypoints[i]+size);
      }
      roi = new ShapeRoi(path);
      roi.setStrokeColor(Color.blue);
      roi.setStrokeWidth(lineWidth);
      overlay = new Overlay(roi);
      imp.setOverlay(overlay);
   }

}