[Insight-users] Simple resampling problem
Richard Beare
richard.beare at gmail.com
Sun Feb 28 19:10:56 EST 2010
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