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