[Insight-users] Simple resampling problem
Darren Weber
darren.weber.lists at gmail.com
Mon Mar 15 15:28:52 EDT 2010
On Mon, Mar 1, 2010 at 4:34 PM, Luis Ibanez <luis.ibanez at kitware.com> wrote:
> Hi Richard,
>
> Thanks for letting us know what was wrong.
>
> --
>
> In general, you may find useful the "ReferenceImage"
> functionality of the ResampleImageFitler.
>
> It takes care of using the Origin, Spacing, Direction
> and number of pixels from a given image, instead
> of you having to specify all of them one by one.
>
> Providing a reference image is typically what you
> want to use after an image registration process.
>
>
Oh, this is interesting. Something like the following is common practice:
typedef itk::ResampleImageFilter< iImgType, oImgType >
ResampleFilterType;
ResampleFilterType::Pointer Resampler = ResampleFilterType::New();
Resampler->SetTransform( transform );
Resampler->SetInterpolator( interpolator );
Resampler->SetInput( MovReader->GetOutput() );
Resampler->SetSize( FixInfo.size ); // assume this struct works
Resampler->SetOutputOrigin( FixReader->GetOutputOrigin() );
Resampler->SetOutputSpacing( FixReader->GetOutputSpacing() );
Resampler->SetOutputDirection( FixReader->GetOutputDirection() );
Resampler->SetDefaultPixelValue( 100 ); // highlight outside regions
So that could be replaced with (?):
typedef itk::ResampleImageFilter< iImgType, oImgType >
ResampleFilterType;
ResampleFilterType::Pointer Resampler = ResampleFilterType::New();
Resampler->SetTransform( transform );
Resampler->SetInterpolator( interpolator );
Resampler->SetInput( MovReader->GetOutput() );
Resampler->SetUseReferenceImage( true );
Resampler->SetReferenceImage( FixReader->GetOutput() );
Resampler->SetDefaultPixelValue( 100 ); // highlight outside regions
Is that right? This would resample the moving image from MovReader into the
fixed image (based on size, origin, spacing, direction from the FixReader
reference).
TIA,
Darren
>
> Regards,
>
>
> Luis
>
>
> -----------------------------------------------------------------
> On Sun, Feb 28, 2010 at 7:10 PM, Richard Beare <richard.beare at gmail.com>
> wrote:
> > Hi,
> >
> > I discovered what was missing:
> >
> > resampler->SetOutputStartIndex (
> input->GetLargestPossibleRegion().GetIndex() );
> >
> >
> >
> > On Fri, Feb 19, 2010 at 10:33 AM, Richard Beare <richard.beare at gmail.com>
> wrote:
> >> OK,
> >> Here's a series of resampling tests:
> >> Test 1 produces the expected result, but tests 2 and 3 produce blank
> images.
> >>
> >> Test 1) Upsampling the original image:
> >>
> >>
> >> Input image:
> >>
> >> Image (0x2f72570)
> >> RTTI typeinfo: itk::Image<short, 3u>
> >> Reference Count: 3
> >> Modified Time: 189
> >> Debug: Off
> >> Observers:
> >> none
> >> Source: (none)
> >> Source output index: 0
> >> Release Data: Off
> >> Data Released: False
> >> Global Release Data: Off
> >> PipelineMTime: 0
> >> UpdateMTime: 182
> >> LargestPossibleRegion:
> >> Dimension: 3
> >> Index: [0, 0, 0]
> >> Size: [256, 176, 20]
> >> BufferedRegion:
> >> Dimension: 3
> >> Index: [0, 0, 0]
> >> Size: [256, 176, 20]
> >> RequestedRegion:
> >> Dimension: 3
> >> Index: [0, 0, 0]
> >> Size: [256, 176, 20]
> >> Spacing: [1.25, 1.25, 6]
> >> Origin: [-165.833, 127.35, 80.3368]
> >> Direction:
> >> 0.989374 0 0.145394
> >> 0.026043 -0.983827 -0.177216
> >> -0.143043 -0.17912 0.973373
> >>
> >> IndexToPointMatrix:
> >> 1.23672 0 0.872366
> >> 0.0325538 -1.22978 -1.0633
> >> -0.178804 -0.2239 5.84024
> >>
> >> PointToIndexMatrix:
> >> 0.791499 0.0208344 -0.114434
> >> 1.17893e-08 -0.787062 -0.143296
> >> 0.0242324 -0.0295361 0.162229
> >>
> >> PixelContainer:
> >> ImportImageContainer (0x2f731b0)
> >> RTTI typeinfo: itk::ImportImageContainer<unsigned long, short>
> >> Reference Count: 1
> >> Modified Time: 179
> >> Debug: Off
> >> Observers:
> >> none
> >> Pointer: 0x3800000
> >> Container manages memory: true
> >> Size: 901120
> >> Capacity: 901120
> >>
> >> Output Image:
> >>
> >> Image (0x2f74750)
> >> RTTI typeinfo: itk::Image<short, 3u>
> >> Reference Count: 2
> >> Modified Time: 245
> >> Debug: Off
> >> Observers:
> >> none
> >> Source: (none)
> >> Source output index: 0
> >> Release Data: Off
> >> Data Released: False
> >> Global Release Data: Off
> >> PipelineMTime: 0
> >> UpdateMTime: 238
> >> LargestPossibleRegion:
> >> Dimension: 3
> >> Index: [0, 0, 0]
> >> Size: [256, 176, 40]
> >> BufferedRegion:
> >> Dimension: 3
> >> Index: [0, 0, 0]
> >> Size: [256, 176, 40]
> >> RequestedRegion:
> >> Dimension: 3
> >> Index: [0, 0, 0]
> >> Size: [256, 176, 40]
> >> Spacing: [1.25, 1.25, 3]
> >> Origin: [-165.833, 127.35, 80.3368]
> >> Direction:
> >> 0.989374 0 0.145394
> >> 0.026043 -0.983827 -0.177216
> >> -0.143043 -0.17912 0.973373
> >>
> >> IndexToPointMatrix:
> >> 1.23672 0 0.436183
> >> 0.0325538 -1.22978 -0.531649
> >> -0.178804 -0.2239 2.92012
> >>
> >> PointToIndexMatrix:
> >> 0.791499 0.0208344 -0.114434
> >> 1.17893e-08 -0.787062 -0.143296
> >> 0.0484648 -0.0590721 0.324458
> >>
> >> PixelContainer:
> >> ImportImageContainer (0x2f74290)
> >> RTTI typeinfo: itk::ImportImageContainer<unsigned long, short>
> >> Reference Count: 1
> >> Modified Time: 236
> >> Debug: Off
> >> Observers:
> >> none
> >> Pointer: 0x39b8000
> >> Container manages memory: true
> >> Size: 1802240
> >> Capacity: 1802240
> >>
> >>
> >> Test 2) Upsampling of the extracted image
> >>
> >> Input Image:Image (0x2f75540)
> >> RTTI typeinfo: itk::Image<short, 3u>
> >> Reference Count: 2
> >> Modified Time: 220
> >> Debug: Off
> >> Observers:
> >> none
> >> Source: (none)
> >> Source output index: 0
> >> Release Data: Off
> >> Data Released: False
> >> Global Release Data: Off
> >> PipelineMTime: 0
> >> UpdateMTime: 213
> >> LargestPossibleRegion:
> >> Dimension: 3
> >> Index: [112, 93, 0]
> >> Size: [40, 40, 20]
> >> BufferedRegion:
> >> Dimension: 3
> >> Index: [112, 93, 0]
> >> Size: [40, 40, 20]
> >> RequestedRegion:
> >> Dimension: 3
> >> Index: [112, 93, 0]
> >> Size: [40, 40, 20]
> >> Spacing: [1.25, 1.25, 6]
> >> Origin: [-165.833, 127.35, 80.3368]
> >> Direction:
> >> 0.989374 0 0.145394
> >> 0.026043 -0.983827 -0.177216
> >> -0.143043 -0.17912 0.973373
> >>
> >> IndexToPointMatrix:
> >> 1.23672 0 0.872366
> >> 0.0325538 -1.22978 -1.0633
> >> -0.178804 -0.2239 5.84024
> >>
> >> PointToIndexMatrix:
> >> 0.791499 0.0208344 -0.114434
> >> 1.17893e-08 -0.787062 -0.143296
> >> 0.0242324 -0.0295361 0.162229
> >>
> >> PixelContainer:
> >> ImportImageContainer (0x2f74330)
> >> RTTI typeinfo: itk::ImportImageContainer<unsigned long, short>
> >> Reference Count: 1
> >> Modified Time: 211
> >> Debug: Off
> >> Observers:
> >> none
> >> Pointer: 0x2eaf000
> >> Container manages memory: true
> >> Size: 32000
> >> Capacity: 32000
> >>
> >> Output Image:
> >>
> >> Image (0x2f74890)
> >> RTTI typeinfo: itk::Image<short, 3u>
> >> Reference Count: 2
> >> Modified Time: 264
> >> Debug: Off
> >> Observers:
> >> none
> >> Source: (none)
> >> Source output index: 0
> >> Release Data: Off
> >> Data Released: False
> >> Global Release Data: Off
> >> PipelineMTime: 0
> >> UpdateMTime: 255
> >> LargestPossibleRegion:
> >> Dimension: 3
> >> Index: [0, 0, 0]
> >> Size: [40, 40, 40]
> >> BufferedRegion:
> >> Dimension: 3
> >> Index: [0, 0, 0]
> >> Size: [40, 40, 40]
> >> RequestedRegion:
> >> Dimension: 3
> >> Index: [0, 0, 0]
> >> Size: [40, 40, 40]
> >> Spacing: [1.25, 1.25, 3]
> >> Origin: [-165.833, 127.35, 80.3368]
> >> Direction:
> >> 0.989374 0 0.145394
> >> 0.026043 -0.983827 -0.177216
> >> -0.143043 -0.17912 0.973373
> >>
> >> IndexToPointMatrix:
> >> 1.23672 0 0.436183
> >> 0.0325538 -1.22978 -0.531649
> >> -0.178804 -0.2239 2.92012
> >>
> >> PointToIndexMatrix:
> >> 0.791499 0.0208344 -0.114434
> >> 1.17893e-08 -0.787062 -0.143296
> >> 0.0484648 -0.0590721 0.324458
> >>
> >> PixelContainer:
> >> ImportImageContainer (0x2f74a60)
> >> RTTI typeinfo: itk::ImportImageContainer<unsigned long, short>
> >> Reference Count: 1
> >> Modified Time: 253
> >> Debug: Off
> >> Observers:
> >> none
> >> Pointer: 0x2ebf000
> >> Container manages memory: true
> >> Size: 64000
> >> Capacity: 64000
> >>
> >> Test 3) Feed extracted image through the same steps but leave spacing
> the same
> >>
> >> Image (0x2f75540)
> >> RTTI typeinfo: itk::Image<short, 3u>
> >> Reference Count: 2
> >> Modified Time: 220
> >> Debug: Off
> >> Observers:
> >> none
> >> Source: (none)
> >> Source output index: 0
> >> Release Data: Off
> >> Data Released: False
> >> Global Release Data: Off
> >> PipelineMTime: 0
> >> UpdateMTime: 213
> >> LargestPossibleRegion:
> >> Dimension: 3
> >> Index: [112, 93, 0]
> >> Size: [40, 40, 20]
> >> BufferedRegion:
> >> Dimension: 3
> >> Index: [112, 93, 0]
> >> Size: [40, 40, 20]
> >> RequestedRegion:
> >> Dimension: 3
> >> Index: [112, 93, 0]
> >> Size: [40, 40, 20]
> >> Spacing: [1.25, 1.25, 6]
> >> Origin: [-165.833, 127.35, 80.3368]
> >> Direction:
> >> 0.989374 0 0.145394
> >> 0.026043 -0.983827 -0.177216
> >> -0.143043 -0.17912 0.973373
> >>
> >> IndexToPointMatrix:
> >> 1.23672 0 0.872366
> >> 0.0325538 -1.22978 -1.0633
> >> -0.178804 -0.2239 5.84024
> >>
> >> PointToIndexMatrix:
> >> 0.791499 0.0208344 -0.114434
> >> 1.17893e-08 -0.787062 -0.143296
> >> 0.0242324 -0.0295361 0.162229
> >>
> >> PixelContainer:
> >> ImportImageContainer (0x2f74330)
> >> RTTI typeinfo: itk::ImportImageContainer<unsigned long, short>
> >> Reference Count: 1
> >> Modified Time: 211
> >> Debug: Off
> >> Observers:
> >> none
> >> Pointer: 0x2eaf000
> >> Container manages memory: true
> >> Size: 32000
> >> Capacity: 32000
> >>
> >> Image (0x2f74890)
> >> RTTI typeinfo: itk::Image<short, 3u>
> >> Reference Count: 2
> >> Modified Time: 262
> >> Debug: Off
> >> Observers:
> >> none
> >> Source: (none)
> >> Source output index: 0
> >> Release Data: Off
> >> Data Released: False
> >> Global Release Data: Off
> >> PipelineMTime: 0
> >> UpdateMTime: 253
> >> LargestPossibleRegion:
> >> Dimension: 3
> >> Index: [0, 0, 0]
> >> Size: [40, 40, 20]
> >> BufferedRegion:
> >> Dimension: 3
> >> Index: [0, 0, 0]
> >> Size: [40, 40, 20]
> >> RequestedRegion:
> >> Dimension: 3
> >> Index: [0, 0, 0]
> >> Size: [40, 40, 20]
> >> Spacing: [1.25, 1.25, 6]
> >> Origin: [-165.833, 127.35, 80.3368]
> >> Direction:
> >> 0.989374 0 0.145394
> >> 0.026043 -0.983827 -0.177216
> >> -0.143043 -0.17912 0.973373
> >>
> >> IndexToPointMatrix:
> >> 1.23672 0 0.872366
> >> 0.0325538 -1.22978 -1.0633
> >> -0.178804 -0.2239 5.84024
> >>
> >> PointToIndexMatrix:
> >> 0.791499 0.0208344 -0.114434
> >> 1.17893e-08 -0.787062 -0.143296
> >> 0.0242324 -0.0295361 0.162229
> >>
> >> PixelContainer:
> >> ImportImageContainer (0x2f74a60)
> >> RTTI typeinfo: itk::ImportImageContainer<unsigned long, short>
> >> Reference Count: 1
> >> Modified Time: 251
> >> Debug: Off
> >> Observers:
> >> none
> >> Pointer: 0x2ebf000
> >> Container manages memory: true
> >> Size: 32000
> >> Capacity: 32000
> >>
> >>
> >> On Wed, Feb 17, 2010 at 2:04 AM, Luis Ibanez <luis.ibanez at kitware.com>
> wrote:
> >>> Hi Richard,
> >>>
> >>> If you set
> >>>
> >>> NewSpacing = inputSpacing,
> >>>
> >>> Do you get as output an image
> >>> that looks like the input image ?
> >>>
> >>>
> >>> What are the values of
> >>>
> >>> * inputSpacing ?
> >>> * inputSize ?
> >>> * inputOrigin ?
> >>> * inputDirection ?
> >>>
> >>>
> >>> Please let us know,
> >>>
> >>>
> >>> Thanks
> >>>
> >>>
> >>> Luis
> >>>
> >>>
> >>> ------------------------------------------
> >>> On Tue, Feb 16, 2010 at 1:21 AM, Richard Beare <
> richard.beare at gmail.com> wrote:
> >>>> Hi,
> >>>> I'm using an obviously buggy resampling procedure to upsample a small
> >>>> image that has been extracted from a larger one, and hence has non
> >>>> zero origin information. My result is blank, so I'm missing a setting
> >>>> somewhere, but don't have a clue as to what. Can anyone spot the
> >>>> problem?
> >>>>
> >>>> template <class RawIm>
> >>>> typename RawIm::Pointer upsampleIm(typename RawIm::Pointer input,
> >>>> typename RawIm::SpacingType NewSpacing, int interp=1)
> >>>> {
> >>>> const int dim = RawIm::ImageDimension;
> >>>> typedef typename RawIm::PixelType PixelType;
> >>>>
> >>>> typedef typename itk::ResampleImageFilter<RawIm, RawIm >
> ResampleFilterType;
> >>>> typedef typename itk::IdentityTransform< double, dim >
> TransformType;
> >>>> typename ResampleFilterType::Pointer resampler =
> ResampleFilterType::New();
> >>>>
> >>>> input->Update();
> >>>>
> >>>> typename TransformType::Pointer transform = TransformType::New();
> >>>> transform->SetIdentity();
> >>>> resampler->SetTransform( transform );
> >>>> typedef typename itk::LinearInterpolateImageFunction<RawIm, double >
> >>>> LInterpolatorType;
> >>>> typedef typename itk::NearestNeighborInterpolateImageFunction<RawIm,
> >>>> double > NNInterpolatorType;
> >>>>
> >>>> typename ResampleFilterType::InterpolatorPointerType interpolator;
> >>>> switch (interp)
> >>>> {
> >>>> case 0:
> >>>> interpolator = NNInterpolatorType::New();
> >>>> break;
> >>>> case 1:
> >>>> interpolator = LInterpolatorType::New();
> >>>> break;
> >>>> default:
> >>>> std::cout << "Unsupported interpolator" << std::endl;
> >>>> }
> >>>>
> >>>> resampler->SetInterpolator( interpolator );
> >>>> resampler->SetDefaultPixelValue( 0 );
> >>>>
> >>>> const typename RawIm::SpacingType& inputSpacing =
> input->GetSpacing();
> >>>> typename RawIm::SpacingType spacing;
> >>>> typename RawIm::SizeType inputSize =
> >>>> input->GetLargestPossibleRegion().GetSize();
> >>>> typename RawIm::SizeType size;
> >>>> typedef typename RawIm::SizeType::SizeValueType SizeValueType;
> >>>>
> >>>>
> >>>> for (int i = 0; i < dim; i++)
> >>>> {
> >>>> float factor = inputSpacing[i]/NewSpacing[i];
> >>>> size[i] = static_cast< SizeValueType >( inputSize[i] * factor );
> >>>> }
> >>>> std::cout << inputSpacing << NewSpacing << std::endl;
> >>>> std::cout << inputSize << size << input->GetOrigin() << std::endl;
> >>>>
> >>>> resampler->SetSize( size );
> >>>> resampler->SetOutputSpacing( NewSpacing );
> >>>> resampler->SetOutputOrigin( input->GetOrigin() );
> >>>> resampler->SetOutputDirection(input->GetDirection());
> >>>> resampler->SetInput(input);
> >>>> typename RawIm::Pointer result = resampler->GetOutput();
> >>>> result->Update();
> >>>> result->DisconnectPipeline();
> >>>> return(result);
> >>>> }
> >>>>
> >>>> //////////////////////////////////////////////////
> >>>> _____________________________________
> >>>> Powered by www.kitware.com
> >>>>
> >>>> Visit other Kitware open-source projects at
> >>>> http://www.kitware.com/opensource/opensource.html
> >>>>
> >>>> Kitware offers ITK Training Courses, for more information visit:
> >>>> http://www.kitware.com/products/protraining.html
> >>>>
> >>>> Please keep messages on-topic and check the ITK FAQ at:
> >>>> http://www.itk.org/Wiki/ITK_FAQ
> >>>>
> >>>> Follow this link to subscribe/unsubscribe:
> >>>> http://www.itk.org/mailman/listinfo/insight-users
> >>>>
> >>>
> >>
> >
> _____________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Kitware offers ITK Training Courses, for more information visit:
> http://www.kitware.com/products/protraining.html
>
> Please keep messages on-topic and check the ITK FAQ at:
> http://www.itk.org/Wiki/ITK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.itk.org/mailman/listinfo/insight-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/pipermail/insight-users/attachments/20100315/7c67df33/attachment-0001.htm>
More information about the Insight-users
mailing list