[Insight-users] Segmenation Error--after set advection image by GVF flow

Baoyun Li baoyun_li123 at yahoo.com
Thu Mar 5 18:00:45 EST 2009


Dear All:

The error message is: Program received signal SIGFPE, Arithmetic exception.

It happens in itkImageHelp.h

index[NLoop] = static_cast<IndexValueType>(offset / offsetTable[NLoop]);



inline static void ComputeIndexInner(const IndexType &bufferedRegionIndex,
                                       OffsetValueType &offset,
                                       const OffsetValueType offsetTable[],
                                       IndexType &index,
                                       const UniqueTypeBoolFalse& )
    {
    index[NLoop] = static_cast<IndexValueType>(offset / offsetTable[NLoop]);
    offset = offset - (index[NLoop] * offsetTable[NLoop]);
    index[NLoop] = index[NLoop] + bufferedRegionIndex[NLoop];
    ImageHelper<NImageDimension, NLoop-1>::
      ComputeIndexInner(bufferedRegionIndex,
                        offset,
                        offsetTable,
                        index,
                        Concept::Detail::UniqueType_bool<(NLoop==1)>());
    }


Does this mean some overflow, or my datatype has some problme.

Thanks

Baoyun

 



________________________________
From: Baoyun Li <baoyun_li123 at yahoo.com>
To: Amardeep Singh <amar.singh at gmx.de>
Cc: insight-users at itk.org
Sent: Thursday, March 5, 2009 4:51:41 PM
Subject: Re: Segmenation Error--after set advection image by GVF flow


Dear Amardeep:


After I called

 geodesicActiveContour->SetAdvectionImage(castflowfilter->GetOutput()); 

Do I need to call GenerateAdvectioniImage() since Atumatic Generate is set off.

After I add : geodesicActiveContour->GenerateAdvectionImage();

I still got error, please give me some suggestions.

Baoyun


________________________________
From: Baoyun Li <baoyun_li123 at yahoo.com>
To: Amardeep Singh <amar.singh at gmx.de>
Cc: insight-users at itk.org
Sent: Thursday, March 5, 2009 3:25:12 PM
Subject: Segmenation Error--after set advection image by GVF flow


Dear Amardeep and All:

Now I can build the program after seting advection image by GVF flow. However, when I run the program, the program shows segmeation error when geodesicActiveContour->Update();

The program stop at: itkSegmentationLevelSetFunction_txx  at  return ( m_AdvectionImage->GetPixel(idx) );


template <class TImageType, class TFeatureImageType>
typename SegmentationLevelSetFunction<TImageType, TFeatureImageType>::VectorType
SegmentationLevelSetFunction<TImageType, TFeatureImageType>
::AdvectionField(const NeighborhoodType &neighborhood,
                 const FloatOffsetType &offset, GlobalDataStruct *)  const
{
  IndexType idx = neighborhood.GetIndex();
  ContinuousIndexType cdx;
  for (unsigned i = 0; i < ImageDimension; ++i)
    {
    cdx[i] = static_cast<double>(idx[i]) - offset[i];
    }
  if ( m_VectorInterpolator->IsInsideBuffer(cdx) )
    {
    return ( m_VectorCast(m_VectorInterpolator->EvaluateAtContinuousIndex(cdx)));
    }
  //Just return the default else
    return ( m_AdvectionImage->GetPixel(idx) );
  
}

Clearly, something is still wrong with SetAdvectionImage. Below is related code.

Can you please help me figure out which setting is wrong? 

Thanks

Baoyun

 
  typedef itk::CovariantVector<double, Dim> myGradientType;
  typedef itk::Image<myGradientType, Dim>   myGradientImageType;
  typedef itk::GradientVectorFlowImageFilter<myGradientImageType, myGradientImageType>
                                              myGVFFilterType;
  typedef itk::GradientImageFilter<DoublelImageType, double,double>
                                              myGFilterType;
  typedef itk::GradientToMagnitudeImageFilter<myGradientImageType, DoublelImageType>
                                              myGToMFilterType;

  typedef itk::GradientRecursiveGaussianImageFilter<
                                            DoublelImageType,
                                            myGradientImageType
                                                  >  myFilterType;
  typedef typename GeodesicActiveContourFilterType::VectorImageType   AdvectionImageType; 
  typedef itk::CastImageFilter<myGradientImageType,AdvectionImageType> 
   CastFlowFilterType;
  typedef itk::LaplacianImageFilter<DoublelImageType, DoublelImageType> myLaplacianFilterType;
  typename myFilterType::Pointer filter = myFilterType::New();
  typename myGFilterType::Pointer gfilter = myGFilterType::New();
  typename myGToMFilterType::Pointer gtomfilter = myGToMFilterType::New();
  typename myLaplacianFilterType::Pointer m_LFilter = myLaplacianFilterType::New();
  typename myGVFFilterType::Pointer m_GVFFilter = myGVFFilterType::New();
  typename CastFlowFilterType::Pointer castflowfilter = CastFlowFilterType::New(); 
  typedef itk::ImageFileWriter< myGradientImageType >  WriterType2;
  typename WriterType2::Pointer writer21=WriterType2::New(); 
  

  typename WriterType1::Pointer writer4=WriterType1::New();
  writer4->SetInput(caster11->GetOutput());
  writer4->SetFileName("../data/intial_contour.hdr");
  writer4->Update();

  sigmoid->SetOutputMinimum(  0.0  );
  sigmoid->SetOutputMaximum(  1.0  );
  caster12->SetInput(inputfilter);
  smoothing->SetInput(caster12->GetOutput() );
  gradientMagnitude->SetInput( smoothing->GetOutput() );
  sigmoid->SetInput( gradientMagnitude->GetOutput() );
  caster31->SetInput(inputfilter);
  filter->SetInput( caster31->GetOutput() ); //caster short to double
  filter->SetSigma( 1.0);
  filter->Update();
  gtomfilter->SetInput(filter->GetOutput());
  gtomfilter->Update();
  gfilter->SetInput(gtomfilter->GetOutput());
  gfilter->Update();
  m_GVFFilter->SetInput(gfilter->GetOutput());
  m_GVFFilter->SetLaplacianFilter(m_LFilter);
  m_GVFFilter->SetNoiseLevel(500);
  m_GVFFilter->SetTimeStep(0.05);
  m_GVFFilter->SetIterationNum(5);
  m_GVFFilter->Update();
  writer21->SetInput(m_GVFFilter->GetOutput());
  writer21->SetFileName("../data/GVF_flow.hdr");
  writer21->Update();
//to get gradient manitude of GVF low
 
  geodesicActiveContour->SetAutoGenerateSpeedAdvection(false);
  //typename myGradientImageType::Pointer m_GVFField; 
  //m_GVFField = m_GVFFilter->GetOutput();
  castflowfilter->SetInput(m_GVFFilter->GetOutput()); 
  geodesicActiveContour->SetAdvectionImage(castflowfilter->GetOutput()); 
 // geodesicActiveContour->GenerateSpeedImage(); 
  //geodesicActiveContour->SetAdvectionImage(m_GVFFilter->GetOutput()); 
 
  
   
   
  
  geodesicActiveContour->SetInput( caster11->GetOutput() );
  geodesicActiveContour->SetFeatureImage( sigmoid->GetOutput() );
  geodesicActiveContour->GenerateSpeedImage(); 
  geodesicActiveContour->Update();
  thresholder->SetInput( geodesicActiveContour->GetOutput() );
  thresholder->Update();
  outputfilter=thresholder->GetOutput();


      
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/pipermail/insight-users/attachments/20090305/24f73a84/attachment.htm>


More information about the Insight-users mailing list