[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
>