<div class="gmail_quote">Hi,<div><br></div><div>I&#39;m trying to use WarpImageFilter to interpolate single slices from an image by using differently sized regions (example code below). This works when I create a new instance of the WarpImageFilter for each slice, but gives the following error when I reuse the *same* WarpImageFilter for the second slice:</div>



<div><br></div><div><div>itk::InvalidRequestedRegionError (0xc6a3a0)</div><div>Location: &quot;virtual void itk::DataObject::PropagateRequestedRegion()&quot; </div><div>File: /Users/George/itk/InsightToolkit-3.14.0/Code/Common/itkDataObject.cxx</div>



<div>Line: 397</div><div>Description: Requested region is (at least partially) outside the largest possible region.</div><div><br></div><div>Any ideas on what may cause this?</div><div><br></div><div>Many thanks,</div><div>


<br>
</div><div>George</div><div><br></div><div><br></div><div>//========================================================</div><div><div>// main.cxx</div><div>//========================================================</div><div>



<br></div></div><div><div>#include &lt;itkExtractImageFilter.h&gt;</div><div>#include &lt;itkImage.h&gt;</div><div>#include &lt;itkLinearInterpolateImageFunction.h&gt;</div><div>#include &lt;itkWarpImageFilter.h&gt;</div>



<div><br></div><div>typedef float DataType;</div><div>typedef itk::Image&lt; DataType, 3 &gt; ImageType;</div><div>typedef float CoordinateType;</div><div>typedef itk::Vector&lt; CoordinateType, 3 &gt; VectorType;</div><div>



typedef itk::Image&lt; VectorType, 3 &gt; WarpFieldType;</div><div>typedef itk::WarpImageFilter&lt; ImageType, ImageType, WarpFieldType &gt; WarpImageFilterType;</div><div>typedef itk::ExtractImageFilter&lt; WarpFieldType, WarpFieldType &gt; WarpFieldExtractFilterType;</div>



<div><br></div><div>// Reusing this global instance gives an error</div><div>WarpImageFilterType::Pointer WarpImageFilter;</div><div><br></div><div>void InterpolateImageSlice(</div><div>    const unsigned int SliceNumber,</div>



<div>    const unsigned int SliceDirection,</div><div>    const ImageType * Image,</div><div>    const WarpFieldType * WarpField )</div><div>{</div><div>    // Extract slice from warp field</div><div>    WarpFieldExtractFilterType::Pointer Filter = WarpFieldExtractFilterType::New();</div>



<div>    Filter-&gt;SetInput( WarpField );</div><div>    WarpFieldType::RegionType Region = WarpField-&gt;GetLargestPossibleRegion();</div><div>    Region.SetSize(  SliceDirection, 1 );</div><div>    Region.SetIndex( SliceDirection, SliceNumber);</div>



<div>    std::cout &lt;&lt; Region &lt;&lt; std::endl;</div><div><br></div><div>    Filter-&gt;SetExtractionRegion( Region );</div><div>    try</div><div>    {</div><div>        Filter-&gt;Update();</div><div>    }</div>


<div>
    catch ( itk::ExceptionObject &amp; err)</div><div>    {</div><div>        std::cout &lt;&lt; err &lt;&lt; std::endl;</div><div>        return;</div><div>    }</div><div><br></div><div>    // Using a local instance of WarpImageFilter works, commented out for now</div>



<div>    //WarpImageFilterType::Pointer WarpImageFilter = WarpImageFilterType::New();</div><div><br></div><div>    WarpImageFilter-&gt;SetInput( Image );</div><div>    WarpImageFilter-&gt;SetOutputParametersFromImage( Filter-&gt;GetOutput() );</div>



<div>    WarpImageFilter-&gt;SetDeformationField( Filter-&gt;GetOutput() );</div><div>    try</div><div>    {</div><div>        WarpImageFilter-&gt;Update();</div><div>    }</div><div>    catch ( itk::ExceptionObject &amp; err)</div>



<div>    {</div><div>        std::cout &lt;&lt; err &lt;&lt; std::endl;</div><div>        return;</div><div>    }</div><div>}</div><div><br></div><div>int main( int argc, char* argv[] )</div><div>{</div><div>    // Set up image</div>



<div>    ImageType::Pointer Image = ImageType::New();</div><div>    ImageType::SizeType Size;</div><div>    Size.Fill( 50 );</div><div>    ImageType::IndexType Index;</div><div>    Index.Fill( 0 );</div><div>    ImageType::RegionType Region;</div>



<div>    Region.SetSize( Size );</div><div>    Region.SetIndex( Index );</div><div>    Image-&gt;SetRegions( Region );</div><div>    Image-&gt;Allocate();</div><div><br></div><div>    // Set up warp field</div><div>    WarpFieldType::Pointer WarpField = WarpFieldType::New();</div>



<div>    WarpField-&gt;SetRegions( Region );</div><div>    WarpField-&gt;Allocate();</div><div><br></div><div>    WarpImageFilter = WarpImageFilterType::New();</div><div>    InterpolateImageSlice( 25, 0, Image, WarpField );</div>



<div><br></div><div>    InterpolateImageSlice( 25, 1, Image, WarpField );</div><div><br></div><div>    return EXIT_SUCCESS;</div><div>}</div><div><br></div></div></div>
</div><br>