Login  Register

Re: Rectangle roi from ImageStack

Posted by Michael Doube on Mar 23, 2009; 11:06am
URL: http://imagej.273.s1.nabble.com/Rectangle-roi-from-ImageStack-tp3693215p3693217.html

Michael,

Thanks for this explanation.  Turns out that the issue that I was having
trouble with was the way IJ handled a null return from
ImageStack.getRoi(); I was expecting that it would be the same as
ImagePlus.getRoi() (i.e. the ROI has the image bounds).  Wayne
identified this as a bug and fixed it in a daily build some time last
week - so now ImageStack.getRoi() returns the image size and (0,0)
origin instead of null when no ROI is drawn.

Cheers

Mike



Michael Schmid wrote:

> Hi Michael,
>
> a few points about rois, maybe some of this helps you solve your  
> problem.
>
> ImageProcessor.getRoi gives the roi bounds (rectangle), also for non-
> rectangular rois. You can get the mask for non-rectangular rois.
>
> Unless you are in the run(ip) method of a PlugInFilter, the rois of  
> an ImageProcessor do not necessarily reflect the roi of the ImagePlus  
> that the the ImageProcessor is part of. This is for avoiding  
> unnecessary calculations (calculating the mask takes some time).
> See the PlugInFilterRunner in the ImageJ source code on how to  
> transfer the roi from an ImagePlus to the roi rectangle/mask of an  
> ImageProcessor.
>
> Also note that the roi of an ImagePlus may be null. Then, in the run
> (ip) method of a PlugInFilter you will get a roi rectangle enclosing  
> the whole image. This greatly facilitates programming plugin filters.
>
> Hope this helps a bit.
>
> Michael
> ________________________________________________________________
>
> On 18 Mar 2009, at 14:09, Michael Doube wrote:
>
>> Hi all
>>
>> I want to get the Rectangle ROI from an ImageStack that I have  
>> passed to a method, as in
>>
>> public void myMethod(ImageStack stack){
>> Rectangle r = stack.getRoi();
>> //do something with r
>> return;
>> }
>>
>> This is fine when there is a rectangle drawn, but if there is not  
>> an ROI drawn, I get a null pointer exception.
>>
>> Interestingly, if I set r to be a class variable
>>
>> Public Rectangle r;
>>
>> Then in the run() method set it with
>>
>> r = ip.getRoi();
>>
>> All the 'r's in my other methods behave sensibly and I don't get a  
>> null pointer exception when I haven't drawn an ROI on my stack.
>>
>> What is going on here?
>>
>> Mike