[Insight-users] Output index of ExtractImageFilter

Luis Ibanez luis.ibanez at kitware.com
Sat Jun 28 21:34:59 EDT 2008


Hi Jeroen,

Thanks for the clarification,

this behavior may indeed be a reasonable expectation.

However this is not the current behavior of the resample filter
nor the Interpolators.

There is an oustanding bug report regarding the computation of pixels
centers that will have implications in this kind of interpolation
situations.

In the meantime, something that you may find useful is to look at
the Neighborhood iterators and the use of BoundaryCondition classes.

They seem to englobe the behavior that you are expecting in this case.

You may find interesting to read the "Iterators" chapter in the
ITK Software Guide.


   Regards,


       Luis


-----------------------------
J.S.Wijnhout at lumc.nl wrote:
> Hi,
> 
> I'm assuming that the slice, even with extent zero, still has a
> thickness as given by the pixel spacing. In that case it is obvious, the
> extracted slice will be duplicated three times with one third of the
> spacing. I.e.:
> Input: v1 v2 v3 spacing=1
>        v4 v5 v6
>        v7 v8 v9
> Slice 2: v4 v5 v6 spacing=1
> Interpolated: v4 v5 v6 spacing=1/3
>               v4 v5 v6
>               v4 v5 v6
> 
> I hope this clarifies it. If the interpolator does not take into account
> the spacing and hence the finite thickness of a single slice, then I can
> understand (and agree with) the behaviour of the interpolators.
> Currently I'm solving the problem with duplicating the single slice
> manually. However I would like to use (and understand) the default ITK
> filters as much as possible.
> 
> Best,
> Jeroen
> 
> -----Original Message-----
> From: Luis Ibanez [mailto:luis.ibanez at kitware.com] 
> Sent: dinsdag 24 juni 2008 4:14
> To: Wijnhout, J.S. (LKEB)
> Cc: insight-users at itk.org
> Subject: Re: [Insight-users] Output index of ExtractImageFilter
> 
> Hi Jeroen,
> 
> Thanks for the clarification.
> 
> Other than with a NearestNeighborhood interpolation, it is hard
> to see how a single slice can be interpolated to extract 3 slices...
> 
> What should be the "correct" behavior of a linear interpolator
> for producing 3 data points out of a single one ?
> 
> e.g.
> we could assume that the rest of the domain is filled with
> zeros and the do something like:
> 
>     Input:        0  0   0   v   0   0   0
>     Output:       0  0  v/2  v  v/2  0   0
> 
> 
> but this will have (at least) two problems:
> 
> 
> a) Theoretical: It will not conserve the energy
>                  in the image (the signal)
> 
> b) Practical:   The two additional slices will have
>                  half the intensity of the original slice
> 
> 
> Any suggestions of a definition of 'correct behavior'
> are welcome.
> 
> 
>     Regards,
> 
> 
>        Luis
> 
> 
> --------------------------
> J.S.Wijnhout at lumc.nl wrote:
> 
>>Hi Luis,
>>
>>Thanks for the tip, although the problems remains using the
>>RegionOfInterestImageFilter. The region I'm extracting has size
>>(256,256,1) and I want to resample them to three slices (i.e. size
>>(25,256,3)). However it seems that the interpolators can not deal with
>>dimensions of size less than three, is that correct?
>>
>>Best,
>>Jeroen
>>
>>-----Original Message-----
>>From: Luis Ibanez [mailto:luis.ibanez at kitware.com] 
>>Sent: dinsdag 17 juni 2008 19:18
>>To: Wijnhout, J.S. (LKEB)
>>Cc: insight-users at itk.org
>>Subject: Re: [Insight-users] Output index of ExtractImageFilter
>>
>>
>>Hi Jeroen,
>>
>>You may want to use the itkRegionOfInterestImageFilter as an
> 
> alternative
> 
>>to the ExtractImageFilter.
>>
>>These two filters have different policies on how they compute the
> 
> image
> 
>>Origin and the Starting index of their region.
>>
>>
>>ExtractImageFilter:
>>
>>    * Preserves the Origin
>>    * Use as Starting index of the output image the
>>      starting index of the region to be extracted.
>>
>>
>>RegionOfInterestImageFilter:
>>
>>    * Use zeros in the starting index of the output
>>      image region
>>    * Computes the Origin of the output image as
>>
>>      InputImageOrigin  +  Spacing  x  StartingIndex
>>
>>
>>It seems that for your application you are expecting the
>>behavior of the RegionOfInterestImageFilter.
>>
>>
>>    Regards,
>>
>>
>>       Luis
>>
>>
>>---------------------------
>>J.S.Wijnhout at lumc.nl wrote:
>>
>>
>>>Hi,
>>>
>>>
>>>
>>>It seems I'm a bit confused about the ExtractImageFilter. I'm trying
>>
>>to 
>>
>>
>>>use it to extract a slice from a 3D image, so far so good. However
>>
>>when 
>>
>>
>>>I use the extracted slice as input for ResampleImageFilter I seem to
>>
>>be 
>>
>>
>>>getting into trouble (that is: garbage output).
>>>
>>>
>>>
>>>After some debugging I got confused about the following: the 
>>>ExtractImageFilter does not recomputed the origin (apparently this is 
>>>intended) and consequently the image index is set to the index 
>>>corresponding to the extraction region. So if I want to extract slice
>>
>>10 
>>
>>
>>>and use index=(0,0,10) then the index of the regions of the output
>>
>>image 
>>
>>
>>>is (0,0,10) as well. However, and this is the confusing part for me,
>>
>>the 
>>
>>
>>>size of the output image will be (256,256,1). That is, the index
>>
>>extends 
>>
>>
>>>beyond the maximum allowed image. How should I deal with this?
>>>
>>>
>>>
>>>Best,
>>>
>>>Jeroen
>>>
>>>
>>>
>>>This is a code snippet where I'm trying to extract a slice and then 
>>>super-sample it:
>>>
>>> void SlabExtractionFilter::GenerateData ()
>>>
>>> {
>>>
>>>   const Image *inputImage = GetInput ();
>>>
>>>
>>>
>>>   m_Extracter->SetInput ( inputImage );
>>>
>>>   m_Extracter->SetExtractionRegion ( slabRegion ); // selects a
>>
>>slice 
>>
>>>from the volume
>>
>>>  
>>>
>>>   m_Resampler->SetOutputDirection ( inputImage->GetDirection () );
>>>
>>>   m_Resampler->SetOutputOrigin ( outputOrigin ); // the origin 
>>>belonging to the extracted slice            
>>>
>>>   m_Resampler->SetOutputSpacing ( outputSpacing ); // one-third of
>>
>>the 
>>
>>
>>>spacing in the z-dimension of the input image
>>>
>>>   m_Resampler->SetSize ( outputSize ); // 256,256,3
>>>
>>>   m_Resampler->SetInput ( m_Extracter->GetOutput () );
>>>
>>>
>>>
>>>   //m_Resampler->GraftOutput ( this->GetOutput () );
>>>
>>>   m_Resampler->Update ();
>>>
>>>   GraftOutput ( m_Resampler->GetOutput () );
>>>
>>>}
>>>
>>>
>>>
>>
>>
> ------------------------------------------------------------------------
> 
>>>_______________________________________________
>>>Insight-users mailing list
>>>Insight-users at itk.org
>>>http://www.itk.org/mailman/listinfo/insight-users
>>
>>
> 


More information about the Insight-users mailing list