[Insight-users] Possible bug in GaussianSpatialObject
Julien Jomier
julien.jomier at kitware.com
Fri Jun 20 09:50:29 EDT 2008
Ali,
The vtkImageWriter is a superclass for the other file formats, I don't
know what you want me to try.
Julien
Ali - wrote:
> Julien,
>
> Thanks for trying this, the Update() of SpatialObjectToImageFilter
> method is called was called during the test. Could you give it a try
> with vtkImageWriter instead of vtkJPEGWriter The minimal pipeline could
> produce the bug for Gaetan and I when it was ended with that filter.
>
>
> -Ali
>
> Julien Jomier wrote:
> > Ali,
> >
> > I just tried adding ItkVtk and having vtkJPEGWriter at the end of the
> > pipeline and it works fine.
> >
> > Are you calling Update() explicitly on the SpatialObjectToImageFilter?
> > That might be the source of the problem.
> >
> > Julien
> >
> > Ali - wrote:
> >> Julien,
> >>
> >> This seems to be one of those hard-to-detect bugs, now we know that it
> >> is very unlikely that wrapping causes the problem. This is a minimal
> >> pipeline which can generate the bug:
> >>
> >> [itk::GaussianSpatialObject] -> [itk::SpatialObjectToImageFilter] ->
> >> [itkImageToVTKImageFilter] -> [vtkWriter]
> >>
> >> The reason that you have never encountered this problem in ITK is that
> >> the pipelines normally end with an ITK writer. However, after passing
> >> the image buffer to a VTK writer, the output file is broken.
> >>
> >> One may argue that this is an ItkVtkGlue bug, but the fact that we have
> >> not observed anything similar in all other image filters suggests that
> >> there is something different in SpatialObjectToImageFilter. Is it
> >> possible that some, possibly optional, step is not performed in
> >> SpatialObjectToImageFilter? If you can try this with ItkVtkGlue, it'd be
> >> a big help to us.
> >>
> >>
> >> -Ali
> >>
> >>
> >> Julien Jomier wrote:
> >> > Hi Ali,
> >> >
> >> > Couple of things:
> >> >
> >> > 1) Change the
> >> gaus.GetIndexToObjectTransform().SetTranslation(offset) to
> >> > gaus.GetObjectToParentTransform().SetTranslation(offset)
> >> >
> >> > 2) Add gaus.ComputeObjectToWorldTransform(); after setting the
> >> > translation. This forces the recomputation of the world transform for
> >> > the object.
> >> >
> >> > 3) Don't forget to set the size of your image for the
> >> > SpatialObjectToImageFilter using SetSize().
> >> >
> >> > Here's the code I've been using (C++ version)
> >> >
> >> > typedef itk::GaussianSpatialObject<2> GSType;
> >> > GSType::Pointer gsp = GSType::New();
> >> >
> >> > gsp->SetMaximum(255);
> >> > gsp->SetRadius(7);
> >> > typedef itk::Vector VectorType;
> >> > VectorType v;
> >> > v[0] = 10;
> >> > v[1] = 10;
> >> > gsp->GetObjectToParentTransform()->SetTranslation(v);
> >> > gsp->ComputeObjectToWorldTransform();
> >> >
> >> > typedef itk::Image ImageType;
> >> > typedef itk::SpatialObjectToImageFilter FilterType;
> >> > FilterType::Pointer filter = FilterType::New();
> >> > filter->SetInput(gsp);
> >> > FilterType::SizeType size;
> >> > size[0]=20;
> >> > size[1]=20;
> >> > filter->SetSize(size);
> >> > filter->Update();
> >> >
> >> > typedef itk::ImageFileWriter WriterType;
> >> > WriterType::Pointer writer= WriterType::New();
> >> > writer->SetFileName("test.jpg");
> >> > writer->SetInput(filter->GetOutput());
> >> > writer->Update();
> >> >
> >> > Let me know if that works or not,
> >> >
> >> > Julien
> >> >
> >> > Ali - wrote:
> >> >> Hi Julien,
> >> >>
> >> >> It seems there is this bug in GaussianSpatialObject which causes
> >> to mess
> >> >> up the whole spatial object image when the translation transform is
> >> >> applied. Here is an example:
> >> >>
> >> >> itkGaussianSpatialObject2 gaus = new itkGaussianSpatialObject2();
> >> >> gaus.SetMaximum(255);
> >> >> gaus.SetRadius(7);
> >> >> itkVectorD2 offset = new itkVectorD2();
> >> >> offset.SetElement(0, 0.0);
> >> >> offset.SetElement(1, 0.0);
> >> >> gaus.GetIndexToObjectTransform().SetTranslation(offset);
> >> >>
> >> >> (The above code is in java, but can be used as a pseudo code).
> >> Notice
> >> >> that whether the offset is zero or not, setting the translation
> >> value
> >> >> messes up the gaussian object. Here are the results:
> >> >>
> >> >> Without calling translation: http://i26.tinypic.com/2j4u7pd.jpg
> >> >> With calling translation: http://i31.tinypic.com/iwrd5y.jpg
> >> >>
> >> >> All I wanted to do was to have a gaussian object at the centre of
> >> the
> >> >> image. Is there a better way of doing this?
> >> >>
> >> >>
> >> >> -Ali
> >> >>
> >> >>
> >> >>
> >> >>
> >> >>
> >> ------------------------------------------------------------------------
> >> >> Miss your Messenger buddies when on-the-go? Get Messenger on your
> >> >> Mobile!
> >> >
> >> >
> >>
> >>
> >>
> >> ------------------------------------------------------------------------
> >> Messenger's gone Mobile! Get it now!
> >>
> >
> >
>
>
>
> ------------------------------------------------------------------------
> Miss your Messenger buddies when on-the-go? Get Messenger on your
> Mobile! <http://clk.atdmt.com/UKM/go/msnnkmgl0010000001ukm/direct/01/>
More information about the Insight-users
mailing list