[Insight-users] Segmenation Error--after set advection image by GVF flow
Amardeep Singh
amar.singh at gmx.de
Fri Mar 6 05:36:35 EST 2009
Dear Baoyun
Unfortunately, I have not yet encountered your error message, so I am
not sure, if I can help you.
I would try to save the gradient vector field as a *.vtk file, not in
Analyze format, as the gradient vector flow output is a vector field.
Can Analyze deal with that? (I don't know.)
Furthermore, I would suggest that you encapsulate every Update() call in
a try-catch block:
try
{
...->Update();
}
catch( itk::ExceptionObject & excep )
{
std::cerr << "Exception caught !" << std::endl;
std::cerr << excep << std::endl;
}
This might give you more meaningful error messages.
Best regards
Amardeep
Baoyun Li wrote:
> 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();
>
>
>
>
More information about the Insight-users
mailing list