[Insight-users] Filter re-use problems

Karthik Krishnan Karthik.Krishnan at kitware.com
Sat Feb 5 21:01:14 EST 2005


Hi Zach,

Could you insert the line
    mask->Update();
right before the
      m_Resampler->SetInput(mask);
line in Function 2

and see if it works.

Could you also please print out
    std::cout << mask->GetMTime() << std::endl;
    std::cout << m_Resampler->GetMTime() << std::endl;
at a bunch of positions, to help debug the problem.

But I think the first solution may work.

Thanks
kk

Zachary Pincus wrote:

> Hello,
>
> I'm trying to re-use a ResampleImageFilter in a tight loop of a 
> program. Unfortunately, I get corrupted output from the second use of 
> the same filter each iteration. Only if I make a new resampler each 
> time can I get valid output.
>
> Here's the story: each iteration, I call two functions that use the 
> same ResamleImageFilter to perform two transforms on an image that's 
> being cached as m_CurrentPosition.Value(). (Yes, this is terrible 
> design -- I should be able to compose the transforms, and/or I should 
> be using a pipeline of two resample filters. However, I've got my 
> reasons for doing things this way.)
>
> Here's what it looks like:
>
> Function 1:
>   mask = m_CurrentPosition.Value(); // fetch the cached mask
>   [...compute transform...]
>   m_Resampler->SetTransform(affineReverseTransform);
>   m_Resampler->SetSize(size);
>   m_Resampler->SetOutputOrigin(lowerLeft);
>   m_Resampler->SetInput(mask);
>   m_Resampler->Update();       
>   m_CurrentPosition.Value() = m_Resampler->GetOutput(); // cache the 
> newly-transformed mask
>
> Function 2:
>   mask = m_CurrentPosition.Value(); // fetch the cached mask, which 
> was transformed by function 1
>   [...compute transform...]
>   m_Resampler->SetTransform(translate);
>   m_Resampler->SetSize(newSize);
>   m_Resampler->SetOutputOrigin(newOriginPoint);
>   m_Resampler->SetInput(mask);
>   m_Resampler->Update();
>   m_CurrentPosition.Value() = m_Resampler->GetOutput(); // cache the 
> doubly-transformed mask
>
>
> Now, unless I make a new resampler filter before function 2 is called, 
> I get very corrupted output from function 2. (The image is wisted and 
> torn, with an incorrect origin.) Note that if I do not make a new 
> resampler, then in the next iteration (with a new image in 
> m_CurrentPosition), function 1 again computes good output, and 
> function 2 again fails. So it's not like the resampler is permanently 
> broken. It seems to be something I'm doing in function 2.
>
> Does anyone have any ideas here? I would be most grateful!
>
> Thanks,
>
> Zach Pincus
>
> Department of Biochemistry and Program in Biomedical Informatics
> Stanford University School of Medicine
>
> _______________________________________________
> Insight-users mailing list
> Insight-users at itk.org
> http://www.itk.org/mailman/listinfo/insight-users
>



More information about the Insight-users mailing list