[Insight-users] ResampleImageFilter crashes in release mode

Luis Ibanez luis.ibanez at kitware.com
Tue Jun 30 12:49:21 EDT 2009


Hi Michael,


       This looks like a bug in your code      :-(



Typical suspects are:


A) The fixed image is not available yet at
     the time you call GetLargestPossibleRegion(),
     GetOrigin(), GetSpacing().

      You should call

                    fixedIm->Update()

        before you call any of the above methods.


We will learn a lot about other possible causes if
you add to your code the following:

        fixedIm->Print( std::cout );
        movingIm->Print( std::cout );
        resampler->Print( std::cout );

before the line

         resampler->Update();

and if you post the resulting output text to the
mailing list.


      Please let us know what you find.


           Thanks


                 Luis


----------------------------------------------------------------
On Fri, Jun 26, 2009 at 6:42 AM, Michael Schildt <
michael.schildt at ifn-magdeburg.de> wrote:

> Hello!
>
> I have some trouble with ResampleImageFilter. I'm not sure if it is a
> bug in my program or in ITK. It works as expected in Debug configuration
> but crashes in Release mode. I traced to the source line in ITK were it
> appear in RelWithDebMode configuration. I attach some information and
> source.
>
> Best reguards,
>   Michael Schildt
>
> The method based on the example in the itkSoftwareGuide:
>
> ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
> template <typename dataT, typename TrfType>
> typename itk::Image<dataT,3>::Pointer transformImage(typename
> itk::Image<dataT,3>::Pointer fixedIm,
>                                                    typename
> itk::Image<dataT,3>::Pointer movingIm,
>                                                    typename
> TrfType::ConstPointer transform)
> {
>  typedef itk::Image<dataT, 3> ImageType;
>  typedef TrfType TransformType;
>  typedef itk::LinearInterpolateImageFunction<ImageType,double>
> InterpolatorType;
>  //typedef itk::WindowedSincInterpolateImageFunction<ImageType,3>
> InterpolatorType;
>
>  typedef itk::ResampleImageFilter<ImageType,ImageType> ResamplerType;
>
>  typename InterpolatorType::Pointer interpolator = InterpolatorType::New();
>
>  typename ResamplerType::Pointer resampler = ResamplerType::New();
>  resampler->SetInput( movingIm );
>
>  resampler->SetTransform( transform.GetPointer() );
>  resampler->SetInterpolator( interpolator.GetPointer() );
>  resampler->SetSize( fixedIm->GetLargestPossibleRegion().GetSize() );
>  resampler->SetOutputOrigin( fixedIm->GetOrigin() );
>  resampler->SetOutputSpacing( fixedIm->GetSpacing() );
>  resampler->SetDefaultPixelValue( 0 );
>
>  // resample the moving image
>  resampler->Update();
>
>  return resampler->GetOutput();
> }
>
> ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
>
> It appears in the Update() method of the resampler. While debugging it
> seems like a problem in itkDataObject.cxx at line marked with **
>
>
> //----------------------------------------------------------------------------
> void
> DataObject
> ::UpdateOutputData()
> {
>  // If we need to update due to PipelineMTime, or the fact that our
>  // data was released, then propagate the UpdateOutputData to the source
>  // if there is one.
>  if ( m_UpdateMTime < m_PipelineMTime || m_DataReleased ||
>      this->RequestedRegionIsOutsideOfTheBufferedRegion() )
>   {
>   if ( m_Source )      // <---m_Source is valid, but when i step over
> here, it gets an invalid pointer
>     {
> **      m_Source->UpdateOutputData(this);      // maybe call on invalid
> pointer?
>     }
>   }
> }
>
> //----------------------------------------------------------------------------
>
> Stack backtrace:
>
>    BrainGUI.exe!std::_Vector_iterator<unsigned
> int,std::allocator<unsigned int> >::operator+()  + 0x17 Bytes    C++
>
>>   BrainGUI.exe!std::vector<unsigned int,std::allocator<unsigned int>
>> ::resize(unsigned int _Newsize=1, unsigned int _Val=0)  Zeile 721 +
>>
> 0x36 Bytes    C++
>    BrainGUI.exe!std::vector<bool,std::allocator<bool>
>
>> ::_Insert_x(std::_Vb_const_iterator<unsigned
>>
> int,int,std::vector<bool,std::allocator<bool> > > _Where=..., unsigned
> int _Count=1)  Zeile 2312    C++
>    BrainGUI.exe!std::vector<bool,std::allocator<bool>
>
>> ::_Insert_n(std::_Vb_const_iterator<unsigned
>>
> int,int,std::vector<bool,std::allocator<bool> > > _Where=..., unsigned
> int _Count=1, bool _Val=false)  Zeile 2292    C++
>    BrainGUI.exe!std::vector<bool,std::allocator<bool>
>
>> ::resize(unsigned int _Newsize=1, bool _Val=false)  Zeile 2044    C++
>>
>    BrainGUI.exe!itk::ProcessObject::CacheInputReleaseDataFlags()
> Zeile 1055    C++
>    BrainGUI.exe!itk::ProcessObject::UpdateOutputData(itk::DataObject *
> __formal=0x02079270)  Zeile 964    C++
>    BrainGUI.exe!itk::DataObject::UpdateOutputData()  Zeile 420 + 0x8
> Bytes    C++
>
> BrainGUI.exe!transformImage<float,itk::VersorRigid3DTransform<double>
>
>> (itk::SmartPointer<itk::Image<float,3> > fixedIm={...},
>>
> itk::SmartPointer<itk::Image<float,3> > movingIm={...},
> itk::SmartPointer<itk::VersorRigid3DTransform<double> const >
> transform={...})  Zeile 123    C++
>    BrainGUI.exe!VersorRigid3DRegistration::doRegistration(bool
> newVolume=true, void (const double &, const
> std::basic_string<char,std::char_traits<char>,std::allocator<char> > &)*
> progress=0x004029e1)  Zeile 254 + 0x81 Bytes    C++
>    BrainGUI.exe!RegThread::Entry()  Zeile 273 + 0xf Bytes    C++
>    BrainGUI.exe!wxThreadInternal::DoThreadStart()  + 0xa5 Bytes    C++
>    BrainGUI.exe!wxThreadInternal::WinThreadStart()  + 0x6a Bytes    C++
>    BrainGUI.exe!_callthreadstartex()  Zeile 348 + 0x6 Bytes    C
>    BrainGUI.exe!_threadstartex(void * ptd=0x04ef1118)  Zeile 326 + 0x5
> Bytes    C
>
> System:
>   - Windows XP Prof SP3
>   - Visual Studio 2008 Express Edition
>   - ITK 3.14
>   - CMake 2.6.4
>   - wxWidgets 2.8.9 (wxPack Installer)
>   - Pentium 4
>   - 2GB Ram
>
>
> _____________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/pipermail/insight-users/attachments/20090630/a9cb196b/attachment.htm>


More information about the Insight-users mailing list