[Insight-users] Problem with ShiftScaleImageFilter

Miller, James V (Research) millerjv@crd.ge.com
Wed, 13 Nov 2002 14:01:37 -0500


Looking at your code, I think you need to call SetRegion() on the ImportImageFilter
to inform the filter how many rows, columns, slices, etc. are in the image.

Regions are defined by a start Index and a Size. The start Index can be
zero.

(Gotta run to a meeting, otherwise I'd write out the code for you....)

Jim



> -----Original Message-----
> From: Harri Tapio Jaalinoja [mailto:hajaalin@cc.helsinki.fi]
> Sent: Tuesday, November 12, 2002 8:21 AM
> To: insight-users@public.kitware.com
> Subject: [Insight-users] Problem with ShiftScaleImageFilter
> 
> 
> 
> Hi folks,
> 
> this is related to the ImportImageFilter issue I had earlier.
> Some kind of an update problem seems to bother me also with 
> this filter,
> which I want to place in the pipeline next to the ImportImageFilter.
> 
> In short, the purpose of my excercise is to try and make a 
> little command
> line tool of a single ITK filter. Read the image in using BSoft tools,
> process, write output with a different name. As an example I chose the
> ShiftScaleImageFilter, see attached bitkShiftScaleImageFilter.cxx.
> 
> Now, thanks to Bill Lorensen, my import is ok:
>   itk::ImportImageFilter<PixelType, 3>::Pointer breader =
>     itk::ImportImageFilter<PixelType, 3>::New();
>   breader->SetImportPointer(data ,num, false);
>   breader->Update();
> 
>   std::cerr << "Try to print a pixel from reader output..." 
> << std::endl;
>   itk::Image<PixelType, 3>::Pointer image = breader->GetOutput();
>   std::cerr << image->GetPixel(index) << std::endl;
>   std::cerr << "OK" << std::endl;
> 
> There are values in the breader->GetOutput() image.
> ---
> Try to print a pixel from reader output...
> -0.160718
> OK
> ---
> 
> The next step does not work:
>   // Set up the filter
>   itk::ShiftScaleImageFilter<ImageType, ImageType>::Pointer ssfilter
>     = itk::ShiftScaleImageFilter<ImageType, ImageType>::New();
>   ssfilter->SetInput(breader->GetOutput());
>   ssfilter->SetShift(100);
>   ssfilter->SetScale(-5);
>   ssfilter->Update();
> //   ssfilter->SetInput(img);
> 
>   std::cerr << "Try to print a pixel from filter output..." 
> << std::endl;
>   itk::Image<PixelType, 3>::Pointer image2 = ssfilter->GetOutput();
>   std::cerr << image2->GetPixel(index) << std::endl;
>   std::cerr << "OK" << std::endl;
> 
> The output looks like this:
> ---
> Try to print a pixel from filter output...
> 0
> OK
> ---
> 
> so neither the shift nor the scale seems to have done its 
> job, despite the
> Update(). If I remove the Update(), I get a segmentation fault.
> 
> And as I mentioned earlier today, the third step, printing 
> out the data
> does not work either, I just get an empty file.
> 
> All the IO stuff in the code is basically copied from ITK 
> examples, via
> my previous tests, which at least were able to output 
> something, so I'm at
> loss as to what I might have missed here. Maybe you can spot 
> something?
> 
> Thanks,
> 
> Harri
>