[Insight-users] Extract Image Filter

Miller, James V (Research) millerjv@crd.ge.com
Wed, 5 Feb 2003 09:23:27 -0500


A viewer should only show the RequestedRegion. The RequestedRegion
is the only area that an algorithm HAS to provide valid pixel values
for.  In other words, an algorithm may not set all the pixels in 
the BufferedRegion. (This behavior is not recommended but not enforced
either).

A viewer should never try to show the LargestPossibleRegion (unless
the LargestPossibleRegion happens to be the same as the RequestedRegion).

Now, what should be happening is that the viewer should be "requesting"
that the pipeline provide a particular region.  The viewer should be
setting the RequestedRegion on the last node in the pipeline.  The viewer
should then check whether the BufferedRegion is the same size as the 
RequestedRegion.  If they match, then the viewer knows the data is 
contiguous in memory and viewing should be straightforward.  If they
do not match, then the viewer either has to be able to handle the 
fact that it is supposed to display a subregion of the buffered region
or the viewer needs to "copy" the RequestedRegion to a contiguous block
of memory.

The other option is for the viewer to set the RequestedRegion to be
the LargestPossibleRegion.  This is a quick fix but not a recommended
solution.






> -----Original Message-----
> From: Stephen R. Aylward [mailto:aylward@unc.edu]
> Sent: Tuesday, February 04, 2003 3:49 PM
> To: Luis Ibanez
> Cc: Miller, James V (Research); 'Puja Malik'; itk newsgroup
> Subject: Re: [Insight-users] Extract Image Filter
> 
> 
> The difficult thing is that viewers need an entire slice per view (at 
> least).   I don't think any viewer will work if it is only passed a 
> Requested or Buffered region.   FltkImageViewer actually has 
> a built-in 
> volume renderer, hence it does a GetLargestPossibleRegion.
> 
> We could try to determine which data is currently being 
> viewed, and then 
> pass that back as the requested region - in effect, the 
> viewer would end 
> up driving the pipeline - calculations are made based on 
> which slice the 
> user is currently viewing.
> 
> There are commercial viz systems for medicine that work that 
> way: slice 
> based.
> 
> I could try to check something in really fast on this...just 
> kidding... 
>   Perhaps we can talk about it at the meeting on Thursday.
> 
> Stephen
> 
> Luis Ibanez wrote:
> 
> > Jim,
> >
> > Well, may this is the problem....
> >
> > fltkImageViewer uses internally the GLSliceViewer
> > which in the SetInputImage() method it asks for
> >
> >       GetLargestPossibleRegion()
> >
> > Should be change it for "GetRequestedRegion()"
> > or "GetBufferedRegion()" ?
> >
> >
> > Luis
> >
> >
> >
> > --------------------------------------------
> >
> >
> > Miller, James V (Research) wrote:
> >
> >> Luis,
> >>
> >>  
> >>
> >> Does this mean there is an issue with the FLTK image 
> viewer?  Is it 
> >> triggering off the wrong Region?
> >>
> >>  
> >>
> >> Jim
> >>
> >>     -----Original Message-----
> >>     *From:* Puja Malik [mailto:puja.malik@MEMcenter.unibe.ch]
> >>     *Sent:* Tuesday, February 04, 2003 11:27 AM
> >>     *To:* itk newsgroup
> >>     *Subject:* [Insight-users] Extract Image Filter
> >>
> >>     Hi Luis,
> >>
> >>     I've managed to fix my problem in the 
> ExtractImageFilter.  I do have
> >>     one concern though.  I cannot directly use the image 
> object from the
> >>     output of the filter, and view it in the fltk image 
> filter.  If I do
> >>     this, the images intensity range is altered, and the 
> first slice is
> >>     distorted.  I must first write the output of the filter ( image
> >>     object ) to a file, read it back into a new image 
> object and then
> >>     view it.  This way, I see a correctly extracted image. 
>  This is very
> >>     strange.  It would be convenient if the output of the 
> filter could
> >>     be used directly.  Please see my code below, including 
> the extra
> >>     steps I needed to perform to get the desired results.
> >>
> >>     void ExtractImageRegion(ImageType::Pointer imIN, 
> ImageType::SizeType
> >>     regSize,
> >>                                                        
> >> ImageType::IndexType
> >>     regIndex)
> >>     {
> >>
> >>      typedef itk::ExtractImageFilter< ImageType, ImageType 
> > FilterType;
> >>      FilterType::Pointer filter = FilterType::New();
> >>      ImageType::Pointer imOUT;
> >>
> >>      ImageType::RegionType region;
> >>      region.SetSize(regSize);
> >>      region.SetIndex(regIndex);
> >>
> >>      filter->SetExtractionRegion(region);
> >>      filter->SetInput(imIN);
> >>      filter->Update();
> >>          // View(filter->GetOutput(), "region");  <-- doing this 
> >> directly
> >>     shows a distorted image
> >>
> >>     //the following is the extra steps needed to view a 
> correct image
> >>     //View, Read, WriteMetaFile are my own functions 
> written using itk
> >>     classes.
> >>         imOUT = filter->GetOutput();
> >>         imOUT->DisconnectPipeline();
> >>              ImageType::Pointer im;
> >>         
> WriteMetaFile("/home/encephalon/puja/testRegion.mhd", imOUT);
> >>          im=Read("/home/encephalon/puja/testRegion.mhd");
> >>          View(im, "region");
> >>
> >>     }
> >>
> >>     Thanks for your help,
> >>     Puja
> >>
> >> -- 
> >> ---------------------------------------
> >> Puja Malik
> >> Surgical Instruments Group
> >> MEM Research Center for Orthopaedic Surgery
> >> Institute for Surgical Technology and Biomechanics 
> University of Bern
> >> Murtenstrasse 35, P.O. Box 8354
> >> 3010 Bern, Switzerland
> >> Phone: +41-31-632-8730
> >> Fax: +41-31-632-4951
> >> Email: Puja.Malik@MEMcenter.unibe.ch
> >> http://www.MEMcenter.unibe.ch
> >> ---------------------------------------
> >>
> >>      
> >
> >
> >
> >
> >
> >
> > _______________________________________________
> > Insight-users mailing list
> > Insight-users@public.kitware.com
> > http://public.kitware.com/mailman/listinfo/insight-users
> 
> 
>