<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="Generator" CONTENT="MS Exchange Server version 6.5.7650.28">
<TITLE>Debug error with Fast marching filter! again</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/plain format -->

<P><FONT SIZE=2>Hi all,<BR>
<BR>
I've posted a previous mail on the debug error when doing 3d segmentation using fast marching. I am posting the code here. Can anyone tell me what has gone wrong? I suspect its the way i am providing the 3d coordinates in the command line...need some help here as i've been figuring this for days! Thanks.<BR>
<BR>
i am using the following command line inputs:<BR>
fastmarchingimagefilter &quot;MRI2edit.hdr&quot; &quot;FastMarchingOP.hdr&quot; 140 122 0.5 -0.5 4 420 420 72<BR>
<BR>
so my coordinates are (140,122,72) and my sigma is 0.5, alpha=-0.5, beta=4, timethreshold &amp; stopping value =420.<BR>
<BR>
rgds,<BR>
Zheying<BR>
<BR>
code attached:<BR>
<BR>
<BR>
<BR>
#if defined(_MSC_VER)<BR>
#pragma warning ( disable : 4786 )<BR>
#endif<BR>
<BR>
#ifdef __BORLANDC__<BR>
#define ITK_LEAN_AND_MEAN<BR>
#endif<BR>
<BR>
<BR>
<BR>
#include &quot;itkCurvatureAnisotropicDiffusionImageFilter.h&quot;<BR>
#include &quot;itkGradientMagnitudeRecursiveGaussianImageFilter.h&quot;<BR>
#include &quot;itkSigmoidImageFilter.h&quot;<BR>
#include &quot;itkImage.h&quot;<BR>
#include &quot;itkFastMarchingImageFilter.h&quot;<BR>
#include &quot;itkBinaryThresholdImageFilter.h&quot;<BR>
#include &quot;itkImageFileReader.h&quot;<BR>
#include &quot;itkImageFileWriter.h&quot;<BR>
#include &quot;itkRescaleIntensityImageFilter.h&quot;<BR>
<BR>
<BR>
int main( int argc, char *argv[] )<BR>
{<BR>
&nbsp; if( argc &lt; 11 )<BR>
&nbsp;&nbsp;&nbsp; {<BR>
&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; &quot;Missing Parameters &quot; &lt;&lt; std::endl;<BR>
&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; &quot;Usage: &quot; &lt;&lt; argv[0];<BR>
&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; &quot; inputImage&nbsp; outputImage seedX seedY&quot;;<BR>
&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; &quot; Sigma SigmoidAlpha SigmoidBeta TimeThreshold StoppingValue seedZ&quot; &lt;&lt; std::endl;<BR>
&nbsp;&nbsp;&nbsp; return 1;<BR>
&nbsp;&nbsp;&nbsp; }<BR>
<BR>
&nbsp;<BR>
&nbsp; typedef&nbsp;&nbsp; float&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InternalPixelType;<BR>
&nbsp; const&nbsp;&nbsp;&nbsp;&nbsp; unsigned int&nbsp;&nbsp;&nbsp; Dimension = 3;<BR>
&nbsp; typedef itk::Image&lt; InternalPixelType, Dimension &gt;&nbsp; InternalImageType;<BR>
&nbsp;<BR>
<BR>
&nbsp;<BR>
&nbsp; typedef unsigned char OutputPixelType;<BR>
&nbsp; typedef itk::Image&lt; OutputPixelType, Dimension &gt; OutputImageType;<BR>
<BR>
&nbsp; typedef itk::BinaryThresholdImageFilter&lt; InternalImageType,<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OutputImageType&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp; ThresholdingFilterType;<BR>
&nbsp; ThresholdingFilterType::Pointer thresholder = ThresholdingFilterType::New();<BR>
<BR>
&nbsp; const InternalPixelType&nbsp; timeThreshold = atof( argv[8] );<BR>
&nbsp;<BR>
&nbsp; thresholder-&gt;SetLowerThreshold(&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0&nbsp; );<BR>
&nbsp; thresholder-&gt;SetUpperThreshold( timeThreshold&nbsp; );<BR>
<BR>
&nbsp; thresholder-&gt;SetOutsideValue(&nbsp; 0&nbsp; );<BR>
&nbsp; thresholder-&gt;SetInsideValue(&nbsp; 255 );<BR>
<BR>
&nbsp; typedef&nbsp; itk::ImageFileReader&lt; InternalImageType &gt; ReaderType;<BR>
&nbsp; typedef&nbsp; itk::ImageFileWriter&lt;&nbsp; OutputImageType&nbsp; &gt; WriterType;<BR>
<BR>
&nbsp; ReaderType::Pointer reader = ReaderType::New();<BR>
&nbsp; WriterType::Pointer writer = WriterType::New();<BR>
<BR>
&nbsp; reader-&gt;SetFileName( argv[1] );<BR>
&nbsp; writer-&gt;SetFileName( argv[2] );<BR>
<BR>
&nbsp; typedef itk::RescaleIntensityImageFilter&lt;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InternalImageType,<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OutputImageType &gt;&nbsp;&nbsp; CastFilterType;<BR>
<BR>
&nbsp; typedef&nbsp;&nbsp; itk::CurvatureAnisotropicDiffusionImageFilter&lt;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InternalImageType,<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InternalImageType&gt;&nbsp; SmoothingFilterType;<BR>
&nbsp;<BR>
&nbsp; SmoothingFilterType::Pointer smoothing = SmoothingFilterType::New();<BR>
<BR>
&nbsp; typedef&nbsp;&nbsp; itk::GradientMagnitudeRecursiveGaussianImageFilter&lt;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InternalImageType,<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InternalImageType&gt;&nbsp; GradientFilterType;<BR>
<BR>
&nbsp; typedef&nbsp;&nbsp; itk::SigmoidImageFilter&lt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InternalImageType,<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InternalImageType&gt;&nbsp; SigmoidFilterType;<BR>
<BR>
&nbsp; GradientFilterType::Pointer&nbsp; gradientMagnitude = GradientFilterType::New();<BR>
&nbsp; SigmoidFilterType::Pointer sigmoid = SigmoidFilterType::New();<BR>
<BR>
&nbsp; sigmoid-&gt;SetOutputMinimum(&nbsp; 0.0&nbsp; );<BR>
&nbsp; sigmoid-&gt;SetOutputMaximum(&nbsp; 1.0&nbsp; );<BR>
<BR>
&nbsp; typedef&nbsp; itk::FastMarchingImageFilter&lt; InternalImageType,<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InternalImageType &gt;&nbsp;&nbsp;&nbsp; FastMarchingFilterType;<BR>
<BR>
&nbsp; FastMarchingFilterType::Pointer&nbsp; fastMarching = FastMarchingFilterType::New();<BR>
<BR>
&nbsp; smoothing-&gt;SetInput( reader-&gt;GetOutput() );<BR>
&nbsp; gradientMagnitude-&gt;SetInput( smoothing-&gt;GetOutput() );<BR>
&nbsp; sigmoid-&gt;SetInput( gradientMagnitude-&gt;GetOutput() );<BR>
&nbsp; fastMarching-&gt;SetInput( sigmoid-&gt;GetOutput() );<BR>
&nbsp; thresholder-&gt;SetInput( fastMarching-&gt;GetOutput() );<BR>
&nbsp; writer-&gt;SetInput( thresholder-&gt;GetOutput() );<BR>
<BR>
&nbsp; smoothing-&gt;SetTimeStep( 0.0625 );<BR>
&nbsp; smoothing-&gt;SetNumberOfIterations(&nbsp; 1 );<BR>
&nbsp; smoothing-&gt;SetConductanceParameter( 9.0 );<BR>
<BR>
<BR>
&nbsp; const double sigma = atof( argv[5] );<BR>
<BR>
&nbsp; gradientMagnitude-&gt;SetSigma(&nbsp; sigma&nbsp; );<BR>
<BR>
<BR>
&nbsp; const double alpha =&nbsp; atof( argv[6] );<BR>
&nbsp; const double beta&nbsp; =&nbsp; atof( argv[7] );<BR>
<BR>
&nbsp; sigmoid-&gt;SetAlpha( alpha );<BR>
&nbsp; sigmoid-&gt;SetBeta(&nbsp; beta&nbsp; );<BR>
<BR>
&nbsp; typedef FastMarchingFilterType::NodeContainer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NodeContainer;<BR>
&nbsp; typedef FastMarchingFilterType::NodeType&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NodeType;<BR>
&nbsp; NodeContainer::Pointer seeds = NodeContainer::New();<BR>
&nbsp;<BR>
<BR>
&nbsp; InternalImageType::IndexType&nbsp; seedPosition;<BR>
&nbsp;<BR>
&nbsp; seedPosition[0] = atoi( argv[3] );<BR>
&nbsp; seedPosition[1] = atoi( argv[4] );<BR>
&nbsp; seedPosition[2] = atoi( argv[10] );<BR>
<BR>
&nbsp; NodeType node;<BR>
&nbsp; const double seedValue = 0.0;<BR>
&nbsp;<BR>
&nbsp; node.SetValue( seedValue );<BR>
&nbsp; node.SetIndex( seedPosition );<BR>
<BR>
&nbsp; seeds-&gt;Initialize();<BR>
&nbsp; seeds-&gt;InsertElement( 0, node );<BR>
<BR>
&nbsp; fastMarching-&gt;SetTrialPoints(&nbsp; seeds&nbsp; );<BR>
<BR>
&nbsp; CastFilterType::Pointer caster1 = CastFilterType::New();<BR>
&nbsp; CastFilterType::Pointer caster2 = CastFilterType::New();<BR>
&nbsp; CastFilterType::Pointer caster3 = CastFilterType::New();<BR>
&nbsp; CastFilterType::Pointer caster4 = CastFilterType::New();<BR>
<BR>
&nbsp; WriterType::Pointer writer1 = WriterType::New();<BR>
&nbsp; WriterType::Pointer writer2 = WriterType::New();<BR>
&nbsp; WriterType::Pointer writer3 = WriterType::New();<BR>
&nbsp; WriterType::Pointer writer4 = WriterType::New();<BR>
<BR>
&nbsp; caster1-&gt;SetInput( smoothing-&gt;GetOutput() );<BR>
&nbsp; writer1-&gt;SetInput( caster1-&gt;GetOutput() );<BR>
&nbsp; writer1-&gt;SetFileName(&quot;FastMarchingFilterOutput1.png&quot;);<BR>
&nbsp; caster1-&gt;SetOutputMinimum(&nbsp;&nbsp; 0 );<BR>
&nbsp; caster1-&gt;SetOutputMaximum( 255 );<BR>
&nbsp; writer1-&gt;Update();<BR>
<BR>
&nbsp; caster2-&gt;SetInput( gradientMagnitude-&gt;GetOutput() );<BR>
&nbsp; writer2-&gt;SetInput( caster2-&gt;GetOutput() );<BR>
&nbsp; writer2-&gt;SetFileName(&quot;FastMarchingFilterOutput2.png&quot;);<BR>
&nbsp; caster2-&gt;SetOutputMinimum(&nbsp;&nbsp; 0 );<BR>
&nbsp; caster2-&gt;SetOutputMaximum( 255 );<BR>
&nbsp; writer2-&gt;Update();<BR>
<BR>
&nbsp; caster3-&gt;SetInput( sigmoid-&gt;GetOutput() );<BR>
&nbsp; writer3-&gt;SetInput( caster3-&gt;GetOutput() );<BR>
&nbsp; writer3-&gt;SetFileName(&quot;FastMarchingFilterOutput3.png&quot;);<BR>
&nbsp; caster3-&gt;SetOutputMinimum(&nbsp;&nbsp; 0 );<BR>
&nbsp; caster3-&gt;SetOutputMaximum( 255 );<BR>
&nbsp; writer3-&gt;Update();<BR>
<BR>
&nbsp; caster4-&gt;SetInput( fastMarching-&gt;GetOutput() );<BR>
&nbsp; writer4-&gt;SetInput( caster4-&gt;GetOutput() );<BR>
&nbsp; writer4-&gt;SetFileName(&quot;FastMarchingFilterOutput4.png&quot;);<BR>
&nbsp; caster4-&gt;SetOutputMinimum(&nbsp;&nbsp; 0 );<BR>
&nbsp; caster4-&gt;SetOutputMaximum( 255 );<BR>
<BR>
&nbsp; // Software Guide : BeginCodeSnippet<BR>
&nbsp; fastMarching-&gt;SetOutputSize(<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reader-&gt;GetOutput()-&gt;GetBufferedRegion().GetSize() );<BR>
&nbsp; // Software Guide : EndCodeSnippet<BR>
<BR>
<BR>
&nbsp; const double stoppingTime = atof( argv[9] );<BR>
<BR>
&nbsp; // Software Guide : BeginCodeSnippet<BR>
&nbsp; fastMarching-&gt;SetStoppingValue(&nbsp; stoppingTime&nbsp; );<BR>
&nbsp; // Software Guide : EndCodeSnippet<BR>
<BR>
<BR>
&nbsp; // Software Guide : BeginCodeSnippet<BR>
&nbsp; try<BR>
&nbsp;&nbsp;&nbsp; {<BR>
&nbsp;&nbsp;&nbsp; writer-&gt;Update();<BR>
&nbsp;&nbsp;&nbsp; }<BR>
&nbsp; catch( itk::ExceptionObject &amp; excep )<BR>
&nbsp;&nbsp;&nbsp; {<BR>
&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; &quot;Exception caught !&quot; &lt;&lt; std::endl;<BR>
&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; excep &lt;&lt; std::endl;<BR>
&nbsp;&nbsp;&nbsp; }<BR>
&nbsp; // Software Guide : EndCodeSnippet<BR>
<BR>
<BR>
&nbsp; writer4-&gt;Update();<BR>
<BR>
&nbsp; typedef itk::ImageFileWriter&lt; InternalImageType &gt; InternalWriterType;<BR>
<BR>
&nbsp; InternalWriterType::Pointer mapWriter = InternalWriterType::New();<BR>
&nbsp; mapWriter-&gt;SetInput( fastMarching-&gt;GetOutput() );<BR>
&nbsp; mapWriter-&gt;SetFileName(&quot;FastMarchingFilterOutput4.mha&quot;);<BR>
&nbsp; mapWriter-&gt;Update();<BR>
<BR>
&nbsp; InternalWriterType::Pointer speedWriter = InternalWriterType::New();<BR>
&nbsp; speedWriter-&gt;SetInput( sigmoid-&gt;GetOutput() );<BR>
&nbsp; speedWriter-&gt;SetFileName(&quot;FastMarchingFilterOutput3.mha&quot;);<BR>
&nbsp; speedWriter-&gt;Update();<BR>
<BR>
&nbsp; InternalWriterType::Pointer gradientWriter = InternalWriterType::New();<BR>
&nbsp; gradientWriter-&gt;SetInput( gradientMagnitude-&gt;GetOutput() );<BR>
&nbsp; gradientWriter-&gt;SetFileName(&quot;FastMarchingFilterOutput2.mha&quot;);<BR>
&nbsp; gradientWriter-&gt;Update();<BR>
<BR>
<BR>
&nbsp; return 0;<BR>
}<BR>
<BR>
<BR>
<BR>
<BR>
</FONT>
</P>

</BODY>
</HTML>