shifting images

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

shifting images

audrey karperien-2
Hello, all.  I just tried something in IJ 1.39q that had been working previously, but is now not working.  To summarize, my plugin is supposed to draw on top of an image, and has been working until I upgraded, but now shifts the drawing to the top left corner of the image.  It could be my code, as I have not even looked at it yet, but I was just wondering if this is a known thing with the latest version and if there is an explanation of what is going on.

Thanks,
Audrey
Reply | Threaded
Open this post in threaded view
|

Dynamic measure plugin

Joachim Wesner
Hi list,

I really like the "Dynamic Profiler" plugin, I wonder if there is already
something similar to a "Dynamic Measure" plugin?

The idea is to have measurements similar to the measue window, but the
numbers are immediately updated if the image contents changes or the ROI is
moved/resized.
Has anybody done that before?

I already started to work on a simple version, for the very first version I
only need the Mean value and probably Min and Max of a ROI/the active ROIs.
You should also be able to define and again remove a "reference" ROI that
is taken as "zero". The location of the ref. ROI is shown as an image
overlay
and you can go back and forth between the measurement and reference ROI and
change them.

It should later be relatively easy to add further properties as in the
"Measure" command. Any comments/suggestions?


Mit freundlichen Grüßen / Best regards

Joachim Wesner


______________________________________________________________________
This email has been scanned by the MessageLabs Email Security System.
For more information please visit http://www.messagelabs.com/email 
______________________________________________________________________
Reply | Threaded
Open this post in threaded view
|

ROI Listener?

Joachim Wesner
Hi list,

while working on my "Dynamic Measuring" plugin I noticed that probably
something should be added to the ImageJ core:

There is an ImageListener with the appropriate events, but no such event
that fires when the ROI is changed.
For example the "Dynamic Profiler" goes greats lengths to capture all
appropriate Mouse and Keyboard events to catch a probable ROI change,
however, with the new capabilities that the ROI manager adds, it will still
fail when the ROI is switched from there.

I would request some extension, at best an extra event in ImageListener,
that fires when the ROI is changed.

Or is there already a way to do this efficiently?

Sincerely

Joachim Wesner


Leica Microsystems CMS GmbH | GmbH mit Sitz in Wetzlar | Amtsgericht
Wetzlar  HRB 2432
Geschäftsführer:  Dr. Stefan Traeger | Dr. Wolf-Otto Reuter | Dr. David Roy
Martyr | Colin Davis


______________________________________________________________________
This email has been scanned by the MessageLabs Email Security System.
For more information please visit http://www.messagelabs.com/email 
______________________________________________________________________
Reply | Threaded
Open this post in threaded view
|

Re: ROI Listener?

Michael Schmid
Hi Joachim,

What about the following? Not very elegant, but it might work:
Register your plugin as a listener of the ROI Manager
on the "java.awt.Component" level

So register by addMouseListener and addMouseWheelListener
of the ROI manager itself.
Probably you also have to do a loop over all components of the
ROI manager,
   for (i=0; i<roiManager.getComponentCount(); i++)
for the buttons:
      roiManager.getComponent(i).addActionListener

To get a handle to the ROI manager, I guess that
RoiMangager roiManager = (RoiManager) WindowManager.getFrame("ROI  
Manager");
should work.

Of course, always checking whether a roi manager exists, or
whether there is a new roi manager (closed and opened) and then
de-registering to the old one and registering with the new one
is not a very elegant solution.
Also, changes to a roi done in a macro won't trigger an event
unless we have something like a RoiListener.

A pity that one can't simply add a new roiChanged() method
to ImageListener without breaking compatibility with existing
plugins.

Michael
________________________________________________________________

On 11 Feb 2008, at 10:13, Joachim Wesner wrote:

> Hi list,
>
> while working on my "Dynamic Measuring" plugin I noticed that probably
> something should be added to the ImageJ core:
>
> There is an ImageListener with the appropriate events, but no such  
> event
> that fires when the ROI is changed.
> For example the "Dynamic Profiler" goes greats lengths to capture all
> appropriate Mouse and Keyboard events to catch a probable ROI change,
> however, with the new capabilities that the ROI manager adds, it  
> will still
> fail when the ROI is switched from there.
>
> I would request some extension, at best an extra event in  
> ImageListener,
> that fires when the ROI is changed.
>
> Or is there already a way to do this efficiently?
>
> Sincerely
>
> Joachim Wesner
>
>
> Leica Microsystems CMS GmbH | GmbH mit Sitz in Wetzlar | Amtsgericht
> Wetzlar  HRB 2432
> Geschäftsführer:  Dr. Stefan Traeger | Dr. Wolf-Otto Reuter | Dr.  
> David Roy
> Martyr | Colin Davis
>
>
> ______________________________________________________________________
> This email has been scanned by the MessageLabs Email Security System.
> For more information please visit http://www.messagelabs.com/email
> ______________________________________________________________________
Reply | Threaded
Open this post in threaded view
|

Antwort: Re: ROI Listener?

Joachim Wesner
Hi Michael,

sounds interesting, I did not think along those lines, listening to the ROI
manager components is a new concept I did not consider yet.
I will give it a try.

That a ROI Listener might be also useful together with a macro is another
good argument to have one! Hint!?

Thanx alot

Mit freundlichen Grüßen / Best regards

Joachim Wesner



                                                                           
             Michael Schmid                                                
             <[hidden email]                                            
             N.AC.AT>                                                   An
             Gesendet von:              [hidden email]                
             ImageJ Interest                                         Kopie
             Group                                                        
             <[hidden email].                                       Thema
             GOV>                       Re: ROI Listener?                  
                                                                           
                                                                           
             11.02.2008 10:59                                              
                                                                           
                                                                           
              Bitte antworten                                              
                    an                                                    
              ImageJ Interest                                              
                   Group                                                  
             <[hidden email].                                            
                   GOV>                                                    
                                                                           
                                                                           




Hi Joachim,

What about the following? Not very elegant, but it might work:
Register your plugin as a listener of the ROI Manager
on the "java.awt.Component" level

So register by addMouseListener and addMouseWheelListener
of the ROI manager itself.
Probably you also have to do a loop over all components of the
ROI manager,
   for (i=0; i<roiManager.getComponentCount(); i++)
for the buttons:
      roiManager.getComponent(i).addActionListener

To get a handle to the ROI manager, I guess that
RoiMangager roiManager = (RoiManager) WindowManager.getFrame("ROI
Manager");
should work.

Of course, always checking whether a roi manager exists, or
whether there is a new roi manager (closed and opened) and then
de-registering to the old one and registering with the new one
is not a very elegant solution.
Also, changes to a roi done in a macro won't trigger an event
unless we have something like a RoiListener.

A pity that one can't simply add a new roiChanged() method
to ImageListener without breaking compatibility with existing
plugins.

Michael
________________________________________________________________

On 11 Feb 2008, at 10:13, Joachim Wesner wrote:

> Hi list,
>
> while working on my "Dynamic Measuring" plugin I noticed that probably
> something should be added to the ImageJ core:
>
> There is an ImageListener with the appropriate events, but no such
> event
> that fires when the ROI is changed.
> For example the "Dynamic Profiler" goes greats lengths to capture all
> appropriate Mouse and Keyboard events to catch a probable ROI change,
> however, with the new capabilities that the ROI manager adds, it
> will still
> fail when the ROI is switched from there.
>
> I would request some extension, at best an extra event in
> ImageListener,
> that fires when the ROI is changed.
>
> Or is there already a way to do this efficiently?
>
> Sincerely
>
> Joachim Wesner
>
>
> Leica Microsystems CMS GmbH | GmbH mit Sitz in Wetzlar | Amtsgericht
> Wetzlar  HRB 2432
> Geschäftsführer:  Dr. Stefan Traeger | Dr. Wolf-Otto Reuter | Dr.
> David Roy
> Martyr | Colin Davis
>
>
> ______________________________________________________________________
> This email has been scanned by the MessageLabs Email Security System.
> For more information please visit http://www.messagelabs.com/email
> ______________________________________________________________________



______________________________________________________________________
This email has been scanned by the MessageLabs Email Security System.
For more information please visit http://www.messagelabs.com/email 
______________________________________________________________________
Reply | Threaded
Open this post in threaded view
|

Re: ROI Listener? Another idea!

Joachim Wesner
In reply to this post by Michael Schmid
Hi Michael,

ImageJ Interest Group <[hidden email]> schrieb am 11.02.2008 10:59:09:

> Hi Joachim,
>
> What about the following? Not very elegant, but it might work:
> Register your plugin as a listener of the ROI Manager
> on the "java.awt.Component" level
>
> So register by addMouseListener and addMouseWheelListener
> of the ROI manager itself.
> Probably you also have to do a loop over all components of the
> ROI manager,
>    for (i=0; i<roiManager.getComponentCount(); i++)
> for the buttons:
>       roiManager.getComponent(i).addActionListener
>
> To get a handle to the ROI manager, I guess that
> RoiMangager roiManager = (RoiManager) WindowManager.getFrame("ROI
> Manager");
> should work.
>
> Of course, always checking whether a roi manager exists, or
> whether there is a new roi manager (closed and opened) and then
> de-registering to the old one and registering with the new one
> is not a very elegant solution.
> Also, changes to a roi done in a macro won't trigger an event
> unless we have something like a RoiListener.
>
> A pity that one can't simply add a new roiChanged() method
> to ImageListener without breaking compatibility with existing
> plugins.
>
> Michael

I would rather/also consider using some "polling" by a background thread
(say a few times/sec) to see
if the ROI information of an ImagePlus has changed.

This poses the question how to do an efficient "deep" compare of ROIs, i.e.
the main idea is to
update the probably computationally a bit expensive "Dynamic info" only if
it is really necessary,
otherwise a ROI is a complex object, how deep would one need to compare to
see if it really changed?
Which changes only update data fields (likely with rectangular/oval ROIs),
which changes create new "subobjects"
(likely Polygo ROI/shape ROI) nand could be detected comparing references
only? I fear I have to go back to "the source"!

BTW, working on this I discovered/it seems (What I already mentioned in
another thread) that "wide" reps. "thick" line
selections are not yet handled correctly in some place, i.e. you cannot
combine those in the ROI manager. I assume this is
still based on the idea that a single line selection cannot have an area
(but it can, I alaways prefer using "wide" lines
with the profiler)

Sincerely

Mit freundlichen Grüßen / Best regards

Joachim Wesner
Leica Microsystems CMS GmbH | GmbH mit Sitz in Wetzlar | Amtsgericht
Wetzlar  HRB 2432
Geschäftsführer:  Dr. Stefan Traeger | Dr. Wolf-Otto Reuter | Dr. David Roy
Martyr | Colin Davis


______________________________________________________________________
This email has been scanned by the MessageLabs Email Security System.
For more information please visit http://www.messagelabs.com/email 
______________________________________________________________________
Reply | Threaded
Open this post in threaded view
|

Re: ROI Listener? Another idea!

Michael Schmid
Hi Joachim,

Concerning the question of how to compare Rois:

My suggestion would be comparing first the outline Rectangle
(java.awt.Rectangle has an equals method).
Then compare the mask (getMask) unless it and the previous mask
are null. This can be done simply with "==", i.e. checking that
it is the same object. ImageJ caches the mask of a roi, so it
should remain unchanged if the roi remains unchanged.

Creating a mask won't cause additional computing time since the
various statistics like FloatStatistics need a mask anyhow.

The only significant cost of this procedure would be additional
memory demand since the old mask can't be garbage collected
while there is a reference to it for comparing it with the new
one. But I think that one can live with it.

---
Area rois for thick lines - that would be an advantage in many
cases, but it could be a disadvantage in others:
I also like thick lines to eliminate noise in profiles.
Making thick lines an area roi would make filters operate on
this area only.
E.g., if I use the dynamic profiler together with preview of a
filter to see how the filter would affect the profile (e.g.
edge conservation, overshoot, ...) I do not want the filter
operation to be restricted to the line.

So, what I would prefer is some way to convert a line roi to
an area roi. Maybe there is one and I am not aware of it?

Michael
________________________________________________________________

On 12 Feb 2008, at 09:54, Joachim Wesner wrote:

> Hi Michael,
>
> ImageJ Interest Group <[hidden email]> schrieb am 11.02.2008  
> 10:59:09:
>
>> Hi Joachim,
>>
>> What about the following? Not very elegant, but it might work:
>> Register your plugin as a listener of the ROI Manager
>> on the "java.awt.Component" level
>>
>> So register by addMouseListener and addMouseWheelListener
>> of the ROI manager itself.
>> Probably you also have to do a loop over all components of the
>> ROI manager,
>>    for (i=0; i<roiManager.getComponentCount(); i++)
>> for the buttons:
>>       roiManager.getComponent(i).addActionListener
>>
>> To get a handle to the ROI manager, I guess that
>> RoiMangager roiManager = (RoiManager) WindowManager.getFrame("ROI
>> Manager");
>> should work.
>>
>> Of course, always checking whether a roi manager exists, or
>> whether there is a new roi manager (closed and opened) and then
>> de-registering to the old one and registering with the new one
>> is not a very elegant solution.
>> Also, changes to a roi done in a macro won't trigger an event
>> unless we have something like a RoiListener.
>>
>> A pity that one can't simply add a new roiChanged() method
>> to ImageListener without breaking compatibility with existing
>> plugins.
>>
>> Michael
>
> I would rather/also consider using some "polling" by a background  
> thread
> (say a few times/sec) to see
> if the ROI information of an ImagePlus has changed.
>
> This poses the question how to do an efficient "deep" compare of  
> ROIs, i.e.
> the main idea is to
> update the probably computationally a bit expensive "Dynamic info"  
> only if
> it is really necessary,
> otherwise a ROI is a complex object, how deep would one need to  
> compare to
> see if it really changed?
> Which changes only update data fields (likely with rectangular/oval  
> ROIs),
> which changes create new "subobjects"
> (likely Polygo ROI/shape ROI) nand could be detected comparing  
> references
> only? I fear I have to go back to "the source"!
>
> BTW, working on this I discovered/it seems (What I already  
> mentioned in
> another thread) that "wide" reps. "thick" line
> selections are not yet handled correctly in some place, i.e. you  
> cannot
> combine those in the ROI manager. I assume this is
> still based on the idea that a single line selection cannot have an  
> area
> (but it can, I alaways prefer using "wide" lines
> with the profiler)
>
> Sincerely
>
> Mit freundlichen Grüßen / Best regards
>
> Joachim Wesner
>
Reply | Threaded
Open this post in threaded view
|

Re: ROI Listener?

dscho
In reply to this post by Joachim Wesner
Hi,

On Mon, 11 Feb 2008, Joachim Wesner wrote:

> while working on my "Dynamic Measuring" plugin I noticed that probably
> something should be added to the ImageJ core:
>
> There is an ImageListener with the appropriate events, but no such event
> that fires when the ROI is changed.

How about the patch below?

NOTENOTENOTE: this will break all existing ImageListeners, as
ImageListener is an interface, not a class.  So if you have a compiled
plugin implementing an ImageListener, ImageJ+this patch will try to call
the roiChanged() method on that class, and fail with an exception that the
method was not found.

Wayne, how about making ImageListener a class, not an interface, with
ellipses for all methods?  Then it would be extensible in a safe (read:
backwards-compatible) manner...

Unfortunately, the ImageListener is an (unchanged) interface already since
1.35l (9 January 2006), so making it a class would also break quite a few
plugins, I guess.

Ciao,
Dscho

P.S.: if you want to download a snapshot of ImageJA with this patch, just
download the source from:

http://repo.or.cz/w/imageja.git?a=snapshot;h=roi-changed;sf=tgz

-- snipsnap --
[PATCH] ImageListener: add roiChanged() method

Whenever a ROI is changed, this method is called with the ImagePlus
whose ROI was changed.

Note: This method is not called when a ROI is "killed".

Signed-off-by: Johannes Schindelin <[hidden email]>
---
 ij/ImageListener.java |    1 +
 ij/ImagePlus.java     |    9 ++++++++-
 2 files changed, 9 insertions(+), 1 deletions(-)

diff --git a/ij/ImageListener.java b/ij/ImageListener.java
index 4edda9f..3f43162 100644
--- a/ij/ImageListener.java
+++ b/ij/ImageListener.java
@@ -10,4 +10,5 @@ package ij;
 
  public void imageUpdated(ImagePlus imp);
 
+ public void roiChanged(ImagePlus imp);
 }
diff --git a/ij/ImagePlus.java b/ij/ImagePlus.java
index bfe13e1..7a0780b 100644
--- a/ij/ImagePlus.java
+++ b/ij/ImagePlus.java
@@ -58,7 +58,8 @@ public class ImagePlus implements ImageObserver, Measurements {
  protected ImageWindow win;
  protected Roi roi;
  protected int currentSlice;
- protected static final int OPENED=0, CLOSED=1, UPDATED=2;
+ protected static final int OPENED=0, CLOSED=1, UPDATED=2,
+ ROI_CHANGED=3;
  protected boolean compositeImage;
  protected int width;
  protected int height;
@@ -1119,6 +1120,7 @@ public class ImagePlus implements ImageObserver, Measurements {
  ip.resetRoi();
  }
  roi.setImage(this);
+ notifyListeners(ROI_CHANGED);
  draw();
  }
 
@@ -1168,6 +1170,7 @@ public class ImagePlus implements ImageObserver, Measurements {
  }
  break;
  }
+ notifyListeners(ROI_CHANGED);
  }
 
  /** Deletes the current region of interest. Makes a copy
@@ -1205,6 +1208,7 @@ public class ImagePlus implements ImageObserver, Measurements {
  roi.setLocation((width-r.width)/2, (height-r.height)/2);
  else if (r.width==width && r.height==height) // is it the same size as the image
  roi.setLocation(0, 0);
+ notifyListeners(ROI_CHANGED);
  draw();
  }
  }
@@ -1674,6 +1678,9 @@ public class ImagePlus implements ImageObserver, Measurements {
  case UPDATED:
  listener.imageUpdated(this);
  break;
+ case ROI_CHANGED:
+ listener.roiChanged(this);
+ break;
  }
  }
  }
--
1.5.4.1.1276.g92036
Reply | Threaded
Open this post in threaded view
|

Re: ROI Listener?

J H-4
Hi,
  I've encountered a similar issue watching for changes when an ROI is
altered ( e.g. handle dragged, addPoints, grow).  I would avoid using an
abstract class, because then you have to inhereit from it if you want to
listen to the changes.  If you had a plugin that wants to listen to a ROI
change, you would have to inherit from PlugIn, so you couldn't inherit from
ROIListener, and would have to create a member variable for it and relay the
event, it gets really messy. So I would say stick with an interface. I see
three possibilities:

1) One quick and dirty but minimal changes way to do it is simply override
imageUpdate (since really the image IS getting updated). Add
notifyListeners(UPDATED) where Johannes indicated.  Then your ImageListener
simply stores a pointer to the roi, and test it against the imp.roi when the
event is fired to see if indeed the ROI changed, or if the update was fired
from the existing places. This *does* mean existing plugins will get extra
update messages when the ROI changes, but I can't imagine how it would
effect them negatively.

2) create a ROIListener.  But think about future expansions and make it
generic.  Most interfaces pass a hint or parameter to indicate exactly what
happened.  i.e. my ROIListener looks like this:

public interface ROIListener {

        //hints that tell what fired the update (in 1.5+ this would be an
enum)
        public static int SETLOCATION = 1;
        public static int GROW = 2;
        public static int NUDGE = 3;
        public static int MOVEHANDLE = 4;

        etc...

       public void ROIUpdated(ImagePlus imp, ROI roi, int hint, Object
roiUpdateArgs );

}
That way in the future, I can add more triggers as needed by adding more
static ints, but I don't have to change the interface at all.  It also
allows for me to create any struct roiUpdateArgs and stuff it with info,
such as the previous position (or pass null).  A good example is Sun's
ImageObserver:
http://java.sun.com/j2se/1.3/docs/api/java/awt/image/ImageObserver.html

3) Change the current ImageListener.  But if this is done, I would add the
hints and args as above so that it doesn't need to change in the future.

Just my 2 cents.



On 2/12/08, Johannes Schindelin <[hidden email]> wrote:

>
> Hi,
>
> On Mon, 11 Feb 2008, Joachim Wesner wrote:
>
> > while working on my "Dynamic Measuring" plugin I noticed that probably
> > something should be added to the ImageJ core:
> >
> > There is an ImageListener with the appropriate events, but no such event
> > that fires when the ROI is changed.
>
> How about the patch below?
>
> NOTENOTENOTE: this will break all existing ImageListeners, as
> ImageListener is an interface, not a class.  So if you have a compiled
> plugin implementing an ImageListener, ImageJ+this patch will try to call
> the roiChanged() method on that class, and fail with an exception that the
> method was not found.
>
> Wayne, how about making ImageListener a class, not an interface, with
> ellipses for all methods?  Then it would be extensible in a safe (read:
> backwards-compatible) manner...
>
> Unfortunately, the ImageListener is an (unchanged) interface already since
> 1.35l (9 January 2006), so making it a class would also break quite a few
> plugins, I guess.
>
> Ciao,
> Dscho
>
> P.S.: if you want to download a snapshot of ImageJA with this patch, just
> download the source from:
>
> http://repo.or.cz/w/imageja.git?a=snapshot;h=roi-changed;sf=tgz
>
> -- snipsnap --
> [PATCH] ImageListener: add roiChanged() method
>
> Whenever a ROI is changed, this method is called with the ImagePlus
> whose ROI was changed.
>
> Note: This method is not called when a ROI is "killed".
>
> Signed-off-by: Johannes Schindelin <[hidden email]>
> ---
> ij/ImageListener.java |    1 +
> ij/ImagePlus.java     |    9 ++++++++-
> 2 files changed, 9 insertions(+), 1 deletions(-)
>
> diff --git a/ij/ImageListener.java b/ij/ImageListener.java
> index 4edda9f..3f43162 100644
> --- a/ij/ImageListener.java
> +++ b/ij/ImageListener.java
> @@ -10,4 +10,5 @@ package ij;
>
>        public void imageUpdated(ImagePlus imp);
>
> +       public void roiChanged(ImagePlus imp);
> }
> diff --git a/ij/ImagePlus.java b/ij/ImagePlus.java
> index bfe13e1..7a0780b 100644
> --- a/ij/ImagePlus.java
> +++ b/ij/ImagePlus.java
> @@ -58,7 +58,8 @@ public class ImagePlus implements ImageObserver,
> Measurements {
>        protected ImageWindow win;
>        protected Roi roi;
>        protected int currentSlice;
> -       protected static final int OPENED=0, CLOSED=1, UPDATED=2;
> +       protected static final int OPENED=0, CLOSED=1, UPDATED=2,
> +               ROI_CHANGED=3;
>        protected boolean compositeImage;
>        protected int width;
>        protected int height;
> @@ -1119,6 +1120,7 @@ public class ImagePlus implements ImageObserver,
> Measurements {
>                                ip.resetRoi();
>                }
>                roi.setImage(this);
> +               notifyListeners(ROI_CHANGED);
>                draw();
>        }
>
> @@ -1168,6 +1170,7 @@ public class ImagePlus implements ImageObserver,
> Measurements {
>                                }
>                                break;
>                }
> +               notifyListeners(ROI_CHANGED);
>        }
>
>        /** Deletes the current region of interest. Makes a copy
> @@ -1205,6 +1208,7 @@ public class ImagePlus implements ImageObserver,
> Measurements {
>                                        roi.setLocation((width-r.width)/2,
> (height-r.height)/2);
>                                else if (r.width==width && r.height==height)
> // is it the same size as the image
>                                        roi.setLocation(0, 0);
> +                               notifyListeners(ROI_CHANGED);
>                                draw();
>                        }
>                }
> @@ -1674,6 +1678,9 @@ public class ImagePlus implements ImageObserver,
> Measurements {
>                                        case UPDATED:
>                                                listener.imageUpdated
> (this);
>                                                break;
> +                                       case ROI_CHANGED:
> +                                               listener.roiChanged(this);
> +                                               break;
>                                }
>                        }
>                }
> --
> 1.5.4.1.1276.g92036
>
Reply | Threaded
Open this post in threaded view
|

Re: Dynamic measure plugin

jmutterer
In reply to this post by Joachim Wesner
Hi Joachim,
i've just posted a macro tool that does this. It also displays a live
histogram of the selected ROI using a standard plot window.
You can find this macro at :
http://rsb.info.nih.gov/ij/macros/tools/Dynamic_Stats_and_Histo.txt
Thanks to Wayne for improving it.

Note that Gilles Carpentier also suggested another method for having a
custom live histogram window earlier this year in his timelaspe macro set
http://rsb.info.nih.gov/ij/macros/TimeLapseVideoMacros.txt

Jerome


On Sun, Feb 10, 2008 at 1:07 PM, Joachim Wesner <
[hidden email]> wrote:

> Hi list,
>
> I really like the "Dynamic Profiler" plugin, I wonder if there is already
> something similar to a "Dynamic Measure" plugin?
>
> The idea is to have measurements similar to the measue window, but the
> numbers are immediately updated if the image contents changes or the ROI
> is
> moved/resized.
> Has anybody done that before?
>
> I already started to work on a simple version, for the very first version
> I
> only need the Mean value and probably Min and Max of a ROI/the active
> ROIs.
> You should also be able to define and again remove a "reference" ROI that
> is taken as "zero". The location of the ref. ROI is shown as an image
> overlay
> and you can go back and forth between the measurement and reference ROI
> and
> change them.
>
> It should later be relatively easy to add further properties as in the
> "Measure" command. Any comments/suggestions?
>
>
> Mit freundlichen Grüßen / Best regards
>
> Joachim Wesner
>
>
> ______________________________________________________________________
> This email has been scanned by the MessageLabs Email Security System.
> For more information please visit http://www.messagelabs.com/email
> ______________________________________________________________________
>
Reply | Threaded
Open this post in threaded view
|

Re: Dynamic measure plugin

Harry Parker
In reply to this post by Joachim Wesner
Hi Jerome,

Thanks for the very nice dynamic histogram & stats macro tool set.

However, I noticed that it doesn't work correctly for 16 bit images.
Would that be a quick fix for you to do?
 
--  
Harry Parker  
Senior Systems Engineer  
Digital Imaging Systems, Inc.

----- Original Message ----
From: Jerome Mutterer <[hidden email]>
To: [hidden email]
Sent: Thursday, February 14, 2008 10:54:22 AM
Subject: Re: Dynamic measure plugin

Hi
Joachim,
i've
just
posted
a
macro
tool
that
does
this.
It
also
displays
a
live
histogram
of
the
selected
ROI
using
a
standard
plot
window.
You
can
find
this
macro
at
:
http://rsb.info.nih.gov/ij/macros/tools/Dynamic_Stats_and_Histo.txt
Thanks
to
Wayne
for
improving
it.

Note
that
Gilles
Carpentier
also
suggested
another
method
for
having
a
custom
live
histogram
window
earlier
this
year
in
his
timelaspe
macro
set
http://rsb.info.nih.gov/ij/macros/TimeLapseVideoMacros.txt

Jerome


On
Sun,
Feb
10,
2008
at
1:07
PM,
Joachim
Wesner
<
[hidden email]>
wrote:

>
Hi
list,
>
>
I
really
like
the
"Dynamic
Profiler"
plugin,
I
wonder
if
there
is
already
>
something
similar
to
a
"Dynamic
Measure"
plugin?
>
>
The
idea
is
to
have
measurements
similar
to
the
measue
window,
but
the
>
numbers
are
immediately
updated
if
the
image
contents
changes
or
the
ROI
>
is
>
moved/resized.
>
Has
anybody
done
that
before?
>
>
I
already
started
to
work
on
a
simple
version,
for
the
very
first
version
>
I
>
only
need
the
Mean
value
and
probably
Min
and
Max
of
a
ROI/the
active
>
ROIs.
>
You
should
also
be
able
to
define
and
again
remove
a
"reference"
ROI
that
>
is
taken
as
"zero".
The
location
of
the
ref.
ROI
is
shown
as
an
image
>
overlay
>
and
you
can
go
back
and
forth
between
the
measurement
and
reference
ROI
>
and
>
change
them.
>
>
It
should
later
be
relatively
easy
to
add
further
properties
as
in
the
>
"Measure"
command.
Any
comments/suggestions?
>
>
>
Mit
freundlichen
Grüßen
/
Best
regards
>
>
Joachim
Wesner
>
>
>
______________________________________________________________________
>
This
email
has
been
scanned
by
the
MessageLabs
Email
Security
System.
>
For
more
information
please
visit
http://www.messagelabs.com/email
>
______________________________________________________________________
>





      ____________________________________________________________________________________
Be a better friend, newshound, and
know-it-all with Yahoo! Mobile.  Try it now.  http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAcJ 
Reply | Threaded
Open this post in threaded view
|

Antwort: Re: Dynamic measure plugin

Joachim Wesner
In reply to this post by jmutterer
ImageJ Interest Group <[hidden email]> schrieb am 14.02.2008 16:54:22:

> Hi Joachim,
> i've just posted a macro tool that does this. It also displays a live
> histogram of the selected ROI using a standard plot window.
> You can find this macro at :
> http://rsb.info.nih.gov/ij/macros/tools/Dynamic_Stats_and_Histo.txt
> Thanks to Wayne for improving it.
>
>
> Jerome
>

Hi Jerome,

the plugin did not work for me as is (IJ 1.39q/Win), as I seem to have no
toString(arg, n) function,
only a toString(arg) function in the macro language!?

Very nice plugin/macro, but I would wish that you still can resize the
selection while it´s active.
However using the built-in statistics is a nice idea I wil try to use for
my plugin too.

Thanx

Joachim



______________________________________________________________________
This email has been scanned by the MessageLabs Email Security System.
For more information please visit http://www.messagelabs.com/email 
______________________________________________________________________