[Insight-users] Problem with itkN3MRIBiasFieldCorrectionImageFilter

Nicholas Tustison ntustison at gmail.com
Wed Oct 14 18:29:36 EDT 2009


Hi Ricardo,

If you're submitting a mask of all zeros, that would explain the error  
message you're getting.  Instead of submitting a mask of all zeros,  
just type a non-existent filename and the otsu mask will be  
calculated.  Let me know if that works out.

Nick




On Oct 14, 2009, at 5:10 PM, Ricardo Ferrari wrote:

>
> Dear itk users,
>
> I am trying to run the itk N3 algorithm implemented by Nicholas J.  
> Tustison and James C. Gee  and I am getting a "segmentation fault"  
> error.
>
> Above I am sending the main part of my code and the error I am  
> getting.
>
> -------------------------------------
>     /// m_inputImage is a minc image - you can download it from the  
> following site: http://www.4shared.com/file/140891877/c11d6f0c/20090808_0_DUAL.html
>
>      int m_shrinkFactor = 2;
>
>     /// m_maskImage is purposely equal to zero so that it can be  
> computed using Otsu threshold
>
>     ///
>     /// Use Otsu threshold to compute a simple mask, if one is not  
> provided
>     ///
>     if( ! m_maskImage )
>     {
>         typedef itk::OtsuThresholdImageFilter< TInputImageType,  
> TMaskImageType > ThresholderType;
>         typename ThresholderType::Pointer otsu = ThresholderType::New 
> ();
>         otsu->SetInput( m_inputImage );
>         otsu->SetNumberOfHistogramBins( 200 );
>         otsu->SetInsideValue( 0 );
>         otsu->SetOutsideValue( 1 );
>         otsu->Update();
>
>         m_maskImage = otsu->GetOutput();
>     }
>
>     ///
>     /// DownSampling the input image to reduce computation time
>     ///
>     typedef itk::ShrinkImageFilter< TInputImageType, TRealImageType  
> > ShrinkerImageType;
>     typename ShrinkerImageType::Pointer shrinker1 =  
> ShrinkerImageType::New();
>     shrinker1->SetInput( m_inputImage );
>     shrinker1->SetShrinkFactors( 1 );
>
>     typedef itk::ShrinkImageFilter< TMaskImageType, TMaskImageType >  
> ShrinkerMaskType;
>     typename ShrinkerMaskType::Pointer shrinker2 =  
> ShrinkerMaskType::New();
>     shrinker2->SetInput( m_maskImage );
>     shrinker2->SetShrinkFactors( 1 );
>
>     if( m_shrinkFactor > 1 )
>     {
>         shrinker1->SetShrinkFactors( m_shrinkFactor );
>         shrinker2->SetShrinkFactors( m_shrinkFactor );
>         shrinker1->Update();
>         shrinker2->Update();
>     }
>
>     typename TRealImageType::Pointer realInputImage = shrinker1- 
> >GetOutput();
>     typename TMaskImageType::Pointer maskShrinked = shrinker2- 
> >GetOutput();
>
>
>     ///
>     /// Run bias field correction
>     ///
>     typedef itk::N3MRIBiasFieldCorrectionImageFilter<  
> TRealImageType, TMaskImageType, TRealImageType > CorrectorType;
>       typename CorrectorType::Pointer corrector = CorrectorType::New 
> ();
>       corrector->SetInput( realInputImage );
>       corrector->SetMaskImage( maskShrinked );
>      corrector->SetMaskLabel( NumericTraits<  
> TMaskImageType::PixelType >::One );
>     corrector->SetMaximumNumberOfIterations( m_maxNumIter );
>     corrector->SetNumberOfFittingLevels( m_numFittingLevels );
>
>     try
>     {
>         corrector->Update();
>     }
>     catch ( itk::ExceptionObject & err )
>     {
>         std::cout << "Caught an exception: " << std::endl;
>         std::cout << err << " " << __FILE__ << " " << __LINE__ <<  
> std::endl;
>         throw err;
>     }
>     catch (... )
>     {
>         std::cout << "Error while applying bias field correction" <<  
> std::endl;
>         throw;
>     }
>
>
> OUTPUT
> --------------------------
> Starting
> [-116.98, -103.715, -34.2648]
> [0.857143, 0.857143, 6]
> [280, 280, 25]
> 0.999208 -0.00996255 -0.0385217
> 0.0108005 0.999708 0.0216062
> 0.0382952 -0.0220051 0.999024
>
> [3, 3, 3]
> 3
> [4, 4, 4]
> Segmentation fault
> --------------------------
>
>
> After spending some time looking for the problem I found out that  
> the it is happening in the following part of the  
> itkN3MRIBiasFieldCorrectionImageFilter.txx file.  The problem does  
> not occur if I use the original image without downsampling it.
>
> I really appreciate any help on this !!!
>
> Thanks,
> Ricardo
>
>
> cout << "Starting" << endl;
>
>   cout << fieldEstimate->GetOrigin() << endl;
>   cout << fieldEstimate->GetSpacing() << endl;
>   cout << fieldEstimate->GetLargestPossibleRegion().GetSize() << endl;
>   cout << fieldEstimate->GetDirection() << endl;
>   cout << this->m_NumberOfFittingLevels << endl;
>   cout << this->m_SplineOrder << endl;
>   cout << this->m_NumberOfControlPoints << endl;
>
>   typename BSplineFilterType::Pointer bspliner =  
> BSplineFilterType::New();
>   bspliner->SetOrigin( fieldEstimate->GetOrigin() );
>   bspliner->SetSpacing( fieldEstimate->GetSpacing() );
>   bspliner->SetSize( fieldEstimate->GetLargestPossibleRegion 
> ().GetSize() );
>   bspliner->SetDirection( fieldEstimate->GetDirection() );
>   bspliner->SetGenerateOutputImage( true );
>   bspliner->SetNumberOfLevels( this->m_NumberOfFittingLevels );
>   bspliner->SetSplineOrder( this->m_SplineOrder );
>   bspliner->SetNumberOfControlPoints( this->m_NumberOfControlPoints );
>   bspliner->SetInput( fieldPoints );
>   bspliner->Update();
>
> cout << "Finished" << endl;
>
>
> _____________________________________
> 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/20091014/faef0cfc/attachment-0001.htm>


More information about the Insight-users mailing list