[Insight-users] Simple resampling problem
Luis Ibanez
luis.ibanez at kitware.com
Mon Mar 1 18:34:09 EST 2010
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.
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
>>>>
>>>
>>
>
More information about the Insight-users
mailing list