[Insight-users] ExtractImageFilter

Luis Ibanez luis.ibanez@kitware.com
Mon, 03 Feb 2003 06:54:36 -0500


Hi Puja,

Is the first slice the only one warped ?

warping is usually and indication that the image size is
incorrect with respect to the buffer data.  For example,
reciving a buffer of size 256x256 and setting the image
size to 255x256 will probably give a warping effect.

However, this should corrupt all the slices, not only
the first one...

I would guess that the abnormal disconection of the
image from the pipeline is somehow corrupting the
image buffer.

Could you please verify the output of the extract filter
just by displaying  the image obtained as

filter->GetOutput()

or by saving it to a file and checking the file afterwards.
Do this without any of the GraftOutput() procedure...

Let us know what you find.

If what you want is to make sure that the image exists
when you exit the subroutine, you may want to grab
the ImagePixelContainer of the image....

Please let us know what is the intended use of the
output image.

   Thanks

            Luis

--------------------------------------------
Puja Malik wrote:

> Hi Luis,
>
> It is very possible that I'm not disconnecting the pipeline properly, 
> I'm not familiar with the proper way to do this.
>
> However, I am getting a processed image as an output, so the filter is 
> definitely doing something (just not what I want it to do!).
>
> As for your question, besides the intesnisty ranges, the extracted 
> image seems ok, except for the first slice, which is always warped.  
> It seems that the further away from {0,0,0} the index is, the more 
> warped the first slice becomes.  Very strange.
>
> Puja
>
> Luis Ibanez wrote:
>
>> Hi Puja,
>>
>> Thanks for letting us know of the details,
>>
>> I found a bit strange the process you are
>> doing with GraftOutput() and then calling
>> Update() both in the filter and the image.
>>
>> It looks like what you want here is just
>> to disconect the output image from the
>> pipeline so it is not destroyed when your
>> filter goes out of scope.
>>
>> Probably Jim, can give us a better advice
>> on how to do this correctly.
>>
>> ----
>>
>> The FLTK viewer may not be the most accurate
>> method for finding the intensity range.
>> However, we should not find big changes
>> on the image range.
>>
>> The arguments for this example are:
>>
>>    xindex yindex  xsize ysize
>>
>> (xindex,yindex) indicate the position of
>> the first pixel that will be included in
>> the region.
>>
>> (xsize,ysize) are the number of pixels
>> along each dimension of the region.
>> (it is the total number of pixels, not
>> a radius.)
>>
>> A question:
>>     Apart from the intensity
>>     range changes, is the extracted image
>>     looking ok ?
>>
>> Thanks
>>
>>      Luis
>>
>> ------
>>
>> Puja Malik wrote:
>> >
>> >
>> >     Hi Luis,
>> >
>> >     I am processing an MR image of meta format.  I've looked at the
>> >     example in the Software Guide, and adapted the code.  To find the
>> >     intensity range, I use the values given in the FLTK viewer, in the
>> >     bottom left hand corner.
>> >
>> >     Just for clarification:  The region size {x, y, z} would have x, y
>> >     and z being the lengths of the sides of the region right?  Or is
>> >     this size computed like a radius?  And the index is the corner 
>> from
>> >     where the specified region would start from right?
>> >
>> >     Here is my code, perhaps there is something that I am overlooking.
>> >     My View function displays the image in the FLTK viewer.
>> >
>> >     void ExtractImageRegion2(ImageType::Pointer imIN,
>> >     ImageType::SizeType regSize,
>> >            ImageType::IndexType regIndex)
>> >     {
>> >
>> >      typedef itk::ExtractImageFilter< ImageType, ImageType > 
>> FilterType;
>> >       FilterType::Pointer filter = FilterType::New();
>> >
>> >      ImageType::Pointer imOUT = ImageType::New();
>> >
>> >      ImageType::RegionType region;
>> >      region.SetSize(regSize);
>> >      region.SetIndex(regIndex);
>> >
>> >      filter->SetExtractionRegion(region);
>> >      filter->SetInput(imIN);
>> >      filter->GraftOutput(imOUT);
>> >
>> >      imOUT = filter->GetOutput();
>> >
>> >      try
>> >         {
>> >         filter->Update();
>> >         }
>> >       catch( itk::ExceptionObject & err )
>> >         {
>> >         std::cout << "ExceptionObject caught !" << std::endl;
>> >         std::cout << err << std::endl;
>> >
>> >         }
>> >
>> >         try
>> >         {
>> >         imOUT->Update();
>> >         }
>> >        catch( itk::ExceptionObject & err )
>> >         {
>> >         std::cout << "ExceptionObject caught !" << std::endl;
>> >         std::cout << err << std::endl;
>> >
>> >         }
>> >
>> >
>> >      View(imOUT, "this is the region");
>> >     }
>> >
>> >
>> >     Thanks for your help!
>> >     Puja
>> >
>> >
>> >     Luis Ibanez wrote:
>> >
>> >         Hi Puja,
>> >
>> >         The ExtractImageFilter shouldn't be changing
>> >         the intensity values of the extracted pixels.
>> >         It is supposed to simply copy their values
>> >         into a smaller image.
>> >
>> >         What kind of image are you processing ?
>> >
>> >         What method are you using for computing
>> >         the intensity range ?
>> >
>> >         (e.g. you could use the MinimumMaximumImageCalculator.)
>> >
>> >         BTW an example on the use of the ExtractImageFilter
>> >         is available under:
>> >
>> >         Insight/Examples/IO/ImageReadExtractWrite.cxx
>> >
>> >         and is described in the SoftwareGuide on the
>> >         section:
>> >
>> >               "Reading and Writing Images"
>> >
>> >         You can experiment with it by passing 2D images
>> >         and providing the index and size in the command
>> >         line. It reads and writes PNG, DICOM, VTK, and
>> >         MetaImage formats.
>> >
>> >         Please let us know some more details of what
>> >         you are doing.
>> >
>> >            Thanks
>> >
>> >               Luis
>> >
>> >         ----------------------------------
>> >         Puja Malik wrote:
>> >
>> >          > Hello,
>> >          > I'm having trouble using the itk ExtractImageFilter.
>> >          >
>> >          > In my implementation, I use an image of size {512,512,30}.
>> >         The interger
>> >          > range in this image is from 0 to 272.  When I extract a
>> >         region size of
>> >          > the same size as the image, I get back the correct image.
>> >         However, if I
>> >          > set my index as {0,0,0} and extract a region size of {511,
>> >         511, 30},
>> >          > then I get the correct image back, however the interger 
>> range
>> >         is now
>> >          > from 0 to 4161 and the image appears much dimmer.  It seems
>> >         that the
>> >          > smaller I make the region to be extracted, the larger the
>> >         resulting
>> >          > image's interger range is.
>> >          >
>> >          > Perhaps I'm not understanding the functionality of the
>> >          > ExtractImageFilter properly.  Does anyone have any idea 
>> how I
>> >         could fix
>> >          > this?
>> >          >
>> >          > Thanks,
>> >          > 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
>> >          > ---------------------------------------
>> >          >
>> >          >
>> >
>> > --
>> > ---------------------------------------
>> > 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
>> >  
>> <http://www.MEMcenter.unibe.ch>---------------------------------------
>> >
>> >
>> >
>> > --
>> > ---------------------------------------
>> > 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
>>
>-- 
>---------------------------------------
>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
>---------------------------------------
>
>