Hello,<br><br>I am having a similar problem with the geodesicactivecontourfilter.<br><br>I am using ITK 3.0.0 with cygwin.&nbsp; I modified the program to handle 3D images, but the rest is the same. and I can monitor the outputs of each stage (smoothing, gradient, sigmoid, fastmarching).&nbsp; They are all correct.
<br><br>However, the speed image seems to have no effect on the segmentation- the surface propagates right through the regions of low values. It is as if the level set function is ignoring the speed image completely- has anyone else run into this? I am able to correctly return the speed image back from the geodesicActiveContour with GetfeatureImage(), so I know its at least getting there correctly.
<br><br>Thanks for any help!<br><br><div><span class="gmail_quote">On 3/23/07, <b class="gmail_sendername">Luis Ibanez</b> &lt;<a href="mailto:luis.ibanez@kitware.com">luis.ibanez@kitware.com</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hi Oliver,<br><br>The first place to look is at the Speed image that you are feeding<br>into the GeodesicActive contour filter.<br><br>You must make sure that this image is as close as possible to a<br>binary image, with zero values in the edges where you want the
<br>level set to stop.<br><br>You may find convenient to split your program in two.<br><br>The first half just to compute the speed image as the output<br>of the sigmoid filter.<br><br>The second half reading the speed image from a file and
<br>continuig from there.<br><br>The fact that your contours are not stopping at the edges of the<br>image is an indication that your speed image doesn&#39;t have a strong<br>enough contrast.<br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;Regards,<br><br>
<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Luis<br><br><br><br>---------------------<br>Oliver Gloger wrote:<br>&gt; Hello Luis,<br>&gt;<br>&gt; I send 2 e-mails to the insight-users mailing list, but got no response for my questions for the GeodesicActiveContourImageFilter. Perhaps you could give an answer for my questions?
<br>&gt;<br>&gt; 1.) My segments are growing too large (see attachment)! It seems that this filter does not notice the edge potential. Is it necessary to use the sigmoidfilter? After using my sigmoidfilter my output is a white picture!!! But I don&#39;t know why!!! Could that be a problem? Isn&#39;t it enough to use the GradientMagnitude directly for the edge potential? So I made the following change in the Code in your Examples: geodesicActiveContour-&gt;SetFeatureImage( gradientMagnitude-&gt;GetOutput() );
<br>&gt; The OutputImage of the gardientMagnitude is okay!!! But my segments are again too large! Can you notice what is wrong?<br>&gt;<br>&gt; 2.) I do not know my initialdistance for the contours before! Is it really necessary? I thought this filter orientates at the edge potential?
<br>&gt;<br>&gt; I would be very thankful, if you will answer me!<br>&gt;<br>&gt; Best regards,<br>&gt; Oliver!<br>&gt;<br>&gt; Here is the code:<br>&gt;<br>&gt; #include &quot;itkImage.h&quot;<br>&gt; #include &quot;itkGeodesicActiveContourLevelSetImageFilter.h
&quot;<br>&gt; #include &quot;itkCurvatureAnisotropicDiffusionImageFilter.h&quot;<br>&gt; #include &quot;itkGradientMagnitudeRecursiveGaussianImageFilter.h&quot;<br>&gt; #include &quot;itkSigmoidImageFilter.h&quot;<br>&gt; #include &quot;
itkFastMarchingImageFilter.h&quot;<br>&gt; #include &quot;itkRescaleIntensityImageFilter.h&quot;<br>&gt; #include &quot;itkBinaryThresholdImageFilter.h&quot;<br>&gt; #include &quot;itkImageFileReader.h&quot;<br>&gt; #include &quot;
itkImageFileWriter.h&quot;<br>&gt;<br>&gt;<br>&gt; int main( int argc, char *argv[] )<br>&gt; {<br>&gt;&nbsp;&nbsp; if( argc &lt; 9 )<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; &quot;Missing Parameters &quot; &lt;&lt; std::endl;<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; &quot;Usage: &quot; &lt;&lt; argv[0];<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; &quot; inputImageName&nbsp;&nbsp;boundaryImageName outputImageName&quot;;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; &quot; SigmoidAlpha SigmoidBeta initialdistance&quot;;
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; &quot; pairwise seedpoints (x1) (y1) (x2) (y2) ...&quot;&nbsp;&nbsp;&lt;&lt; std::endl;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; return 1;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&gt;<br>&gt;&nbsp;&nbsp; typedef&nbsp;&nbsp; float&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InternalPixelType;<br>&gt;&nbsp;&nbsp; const&nbsp;&nbsp;&nbsp;&nbsp; unsigned int&nbsp;&nbsp;&nbsp;&nbsp;Dimension = 2;
<br>&gt;&nbsp;&nbsp; typedef itk::Image&lt; InternalPixelType, Dimension &gt;&nbsp;&nbsp;InternalImageType;<br>&gt;<br>&gt;&nbsp;&nbsp; typedef unsigned char OutputPixelType;<br>&gt;&nbsp;&nbsp; typedef itk::Image&lt; OutputPixelType, Dimension &gt; OutputImageType;
<br>&gt;&nbsp;&nbsp; typedef itk::BinaryThresholdImageFilter&lt;<br>&gt;&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>&gt;&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&nbsp;&nbsp;&nbsp;&nbsp;&gt;&nbsp;&nbsp;&nbsp;&nbsp;ThresholdingFilterType;<br>&gt;<br>&gt;&nbsp;&nbsp; ThresholdingFilterType::Pointer thresholder = ThresholdingFilterType::New();
<br>&gt;<br>&gt;&nbsp;&nbsp; thresholder-&gt;SetLowerThreshold( -1000.0 );<br>&gt;&nbsp;&nbsp; thresholder-&gt;SetUpperThreshold(&nbsp;&nbsp;&nbsp;&nbsp; 0.0 );<br>&gt;<br>&gt;&nbsp;&nbsp; thresholder-&gt;SetOutsideValue(&nbsp;&nbsp;0&nbsp;&nbsp;);<br>&gt;&nbsp;&nbsp; thresholder-&gt;SetInsideValue(&nbsp;&nbsp;255 );
<br>&gt;<br>&gt;&nbsp;&nbsp; typedef&nbsp;&nbsp;itk::ImageFileReader&lt; InternalImageType &gt; ReaderType;<br>&gt;&nbsp;&nbsp; typedef&nbsp;&nbsp;itk::ImageFileWriter&lt;&nbsp;&nbsp;OutputImageType&nbsp;&nbsp;&gt; WriterType;<br>&gt;<br>&gt;&nbsp;&nbsp; ReaderType::Pointer reader = ReaderType::New();
<br>&gt;&nbsp;&nbsp; WriterType::Pointer writer = WriterType::New();<br>&gt;<br>&gt;&nbsp;&nbsp; reader-&gt;SetFileName( argv[1] );<br>&gt;&nbsp;&nbsp; writer-&gt;SetFileName( argv[3] );<br>&gt;<br>&gt;&nbsp;&nbsp; typedef itk::RescaleIntensityImageFilter&lt;<br>
&gt;&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;&nbsp;&nbsp;InternalImageType,<br>&gt;&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;&nbsp;&nbsp;OutputImageType &gt;&nbsp;&nbsp; CastFilterType;<br>&gt;<br>&gt;<br>&gt;<br>&gt;&nbsp;&nbsp; typedef&nbsp;&nbsp; itk::GradientMagnitudeRecursiveGaussianImageFilter&lt;
<br>&gt;&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;&nbsp;&nbsp;InternalImageType,<br>&gt;&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;&nbsp;&nbsp;InternalImageType &gt;&nbsp;&nbsp;GradientFilterType;<br>&gt;<br>&gt;&nbsp;&nbsp; typedef&nbsp;&nbsp; itk::SigmoidImageFilter&lt;<br>&gt;&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;&nbsp;&nbsp;InternalImageType,
<br>&gt;&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;&nbsp;&nbsp;InternalImageType &gt;&nbsp;&nbsp;SigmoidFilterType;<br>&gt;<br>&gt;&nbsp;&nbsp; GradientFilterType::Pointer&nbsp;&nbsp;gradientMagnitude = GradientFilterType::New();<br>&gt;<br>&gt;&nbsp;&nbsp; SigmoidFilterType::Pointer sigmoid = SigmoidFilterType::New();
<br>&gt;<br>&gt;&nbsp;&nbsp; sigmoid-&gt;SetOutputMinimum(&nbsp;&nbsp;0.0&nbsp;&nbsp;);<br>&gt;&nbsp;&nbsp; sigmoid-&gt;SetOutputMaximum(&nbsp;&nbsp;1.0&nbsp;&nbsp;);<br>&gt;&nbsp;&nbsp; typedef&nbsp;&nbsp;itk::FastMarchingImageFilter&lt;<br>&gt;&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>&gt;&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;&nbsp;&nbsp;&nbsp;FastMarchingFilterType;
<br>&gt;<br>&gt;&nbsp;&nbsp; FastMarchingFilterType::Pointer&nbsp;&nbsp;fastMarching = FastMarchingFilterType::New();<br>&gt;<br>&gt;&nbsp;&nbsp; typedef&nbsp;&nbsp;itk::GeodesicActiveContourLevelSetImageFilter&lt; InternalImageType,<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InternalImageType &gt;&nbsp;&nbsp;&nbsp;&nbsp;GeodesicActiveContourFilterType;
<br>&gt;&nbsp;&nbsp; GeodesicActiveContourFilterType::Pointer geodesicActiveContour =<br>&gt;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GeodesicActiveContourFilterType::New();<br>&gt;<br>&gt;&nbsp;&nbsp; const double propagationScaling = 2.0;<br>
&gt;&nbsp;&nbsp; geodesicActiveContour-&gt;SetPropagationScaling( propagationScaling );<br>&gt;&nbsp;&nbsp; geodesicActiveContour-&gt;SetCurvatureScaling( 1.0 );<br>&gt;&nbsp;&nbsp; geodesicActiveContour-&gt;SetAdvectionScaling( 2.0 );<br>&gt;&nbsp;&nbsp; geodesicActiveContour-&gt;SetMaximumRMSError( 
0.02 );<br>&gt;&nbsp;&nbsp; geodesicActiveContour-&gt;SetNumberOfIterations( 50 );<br>&gt;<br>&gt;&nbsp;&nbsp; gradientMagnitude-&gt;SetInput( reader-&gt;GetOutput() );<br>&gt;&nbsp;&nbsp; sigmoid-&gt;SetInput( gradientMagnitude-&gt;GetOutput() );<br>
&gt;<br>&gt;&nbsp;&nbsp; geodesicActiveContour-&gt;SetInput(&nbsp;&nbsp;fastMarching-&gt;GetOutput() );<br>&gt;&nbsp;&nbsp; geodesicActiveContour-&gt;SetFeatureImage( gradientMagnitude-&gt;GetOutput() );<br>&gt;<br>&gt;&nbsp;&nbsp; thresholder-&gt;SetInput( geodesicActiveContour-&gt;GetOutput() );
<br>&gt;&nbsp;&nbsp; writer-&gt;SetInput( thresholder-&gt;GetOutput() );<br>&gt;<br>&gt;&nbsp;&nbsp; const double sigma = 0.75;<br>&gt;&nbsp;&nbsp; gradientMagnitude-&gt;SetSigma(&nbsp;&nbsp;sigma&nbsp;&nbsp;);<br>&gt;&nbsp;&nbsp; sigmoid-&gt;SetAlpha( atof(argv[4]) );<br>&gt;&nbsp;&nbsp; sigmoid-&gt;SetBeta(&nbsp;&nbsp;atof(argv[5]) );
<br>&gt;<br>&gt;&nbsp;&nbsp; typedef FastMarchingFilterType::NodeContainer&nbsp;&nbsp;NodeContainer;<br>&gt;&nbsp;&nbsp; typedef FastMarchingFilterType::NodeType&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NodeType;<br>&gt;<br>&gt;&nbsp;&nbsp; NodeContainer::Pointer seeds = NodeContainer::New();<br>
&gt;<br>&gt;&nbsp;&nbsp; InternalImageType::IndexType&nbsp;&nbsp;seedPosition;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NodeType node;<br>&gt;&nbsp;&nbsp; const double initialDistance = atof(argv[6]);<br>&gt;&nbsp;&nbsp; const double seedValue = - initialDistance;<br>&gt;<br>&gt;&nbsp;&nbsp; //I use a boundaryImage too visualize my boundaries I use from Matlab for //every segment
<br>&gt;&nbsp;&nbsp; OutputImageType::Pointer boundaryimage = OutputImageType::New();<br>&gt;&nbsp;&nbsp; OutputImageType::IndexType start;<br>&gt;&nbsp;&nbsp; start[0] = 0; // first index on X<br>&gt;&nbsp;&nbsp; start[1] = 0; // first index on Y<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OutputImageType::SizeType size;
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; size[0] = 256; // size along X<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; size[1] = 256; // size along Y<br>&gt;<br>&gt;&nbsp;&nbsp; OutputImageType::RegionType region;<br>&gt;&nbsp;&nbsp; region.SetSize( size );<br>&gt;&nbsp;&nbsp; region.SetIndex( start );<br>&gt; boundaryimage-&gt;SetRegions( region );
<br>&gt; boundaryimage-&gt;Allocate();<br>&gt;<br>&gt; OutputImageType::IndexType pixelIndex;<br>&gt; //pixelIndex[0] = 27; // x position<br>&gt; //pixelIndex[1] = 29; // y position<br>&gt;&nbsp;&nbsp; //node.SetValue( seedValue );
<br>&gt;&nbsp;&nbsp; //node.SetIndex( seedPosition );<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; seeds-&gt;Initialize();<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int saatpaare=7;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int nodeindex=0;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (saatpaare&lt;argc){<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; seedPosition[0] = atoi(argv[saatpaare]);
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; seedPosition[1] = atoi(argv[saatpaare+1]);<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pixelIndex[0] = atoi(argv[saatpaare]);<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pixelIndex[1] = atoi(argv[saatpaare+1]);<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boundaryimage-&gt;SetPixel( pixelIndex , 100 );
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; node.SetValue( seedValue );<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; node.SetIndex( seedPosition );<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; seeds-&gt;InsertElement( nodeindex, node );<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; saatpaare=saatpaare+2;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nodeindex++;
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&gt;<br>&gt; typedef itk::ImageFileWriter&lt;OutputImageType&gt; BoundaryWriterType;<br>&gt;&nbsp;&nbsp; BoundaryWriterType::Pointer boundaryWriter = BoundaryWriterType::New();<br>&gt;&nbsp;&nbsp; boundaryWriter-&gt;SetFileName(argv[2]);
<br>&gt;&nbsp;&nbsp; boundaryWriter-&gt;SetInput(boundaryimage);<br>&gt;&nbsp;&nbsp; try<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; boundaryWriter-&gt;Update();<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&gt;&nbsp;&nbsp; catch( itk::ExceptionObject &amp; excep )<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; &quot;Exception caught at boundayrWriter!&quot; &lt;&lt; std::endl;
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; excep &lt;&lt; std::endl;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&gt;<br>&gt;&nbsp;&nbsp; fastMarching-&gt;SetTrialPoints(&nbsp;&nbsp;seeds&nbsp;&nbsp;);<br>&gt;<br>&gt;&nbsp;&nbsp; fastMarching-&gt;SetSpeedConstant( 1.0 );<br>&gt;&nbsp;&nbsp; CastFilterType::Pointer caster2 = CastFilterType::New();
<br>&gt;&nbsp;&nbsp; CastFilterType::Pointer caster3 = CastFilterType::New();<br>&gt;&nbsp;&nbsp; CastFilterType::Pointer caster4 = CastFilterType::New();<br>&gt;<br>&gt;&nbsp;&nbsp; WriterType::Pointer writer2 = WriterType::New();<br>&gt;&nbsp;&nbsp; WriterType::Pointer writer3 = WriterType::New();
<br>&gt;&nbsp;&nbsp; WriterType::Pointer writer4 = WriterType::New();<br>&gt;<br>&gt;&nbsp;&nbsp; caster2-&gt;SetInput( gradientMagnitude-&gt;GetOutput() );<br>&gt;&nbsp;&nbsp; writer2-&gt;SetInput( caster2-&gt;GetOutput() );<br>&gt;&nbsp;&nbsp; writer2-&gt;SetFileName(&quot;
GeodesicActiveContourImageFilterOutput2.png&quot;);<br>&gt;&nbsp;&nbsp; caster2-&gt;SetOutputMinimum(&nbsp;&nbsp; 0 );<br>&gt;&nbsp;&nbsp; caster2-&gt;SetOutputMaximum( 255 );<br>&gt;&nbsp;&nbsp; writer2-&gt;Update();<br>&gt;<br>&gt; // This Output is always empty!!!!!!! But why????
<br>&gt;&nbsp;&nbsp; caster3-&gt;SetInput( sigmoid-&gt;GetOutput() );<br>&gt;&nbsp;&nbsp; writer3-&gt;SetInput( caster3-&gt;GetOutput() );<br>&gt;&nbsp;&nbsp; writer3-&gt;SetFileName(&quot;GeodesicActiveContourImageFilterOutput3.png&quot;);<br>&gt;&nbsp;&nbsp; caster3-&gt;SetOutputMinimum(&nbsp;&nbsp; 0 );
<br>&gt;&nbsp;&nbsp; caster3-&gt;SetOutputMaximum( 255 );<br>&gt;&nbsp;&nbsp; writer3-&gt;Update();<br>&gt;<br>&gt;&nbsp;&nbsp; caster4-&gt;SetInput( fastMarching-&gt;GetOutput() );<br>&gt;&nbsp;&nbsp; writer4-&gt;SetInput( caster4-&gt;GetOutput() );<br>&gt;&nbsp;&nbsp; writer4-&gt;SetFileName(&quot;
GeodesicActiveContourImageFilterOutput4.png&quot;);<br>&gt;&nbsp;&nbsp; caster4-&gt;SetOutputMinimum(&nbsp;&nbsp; 0 );<br>&gt;&nbsp;&nbsp; caster4-&gt;SetOutputMaximum( 255 );<br>&gt;&nbsp;&nbsp; fastMarching-&gt;SetOutputSize(<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reader-&gt;GetOutput()-&gt;GetBufferedRegion().GetSize() );
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;try<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; writer-&gt;Update();<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&gt;&nbsp;&nbsp; catch( itk::ExceptionObject &amp; excep )<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; &quot;Exception caught !&quot; &lt;&lt; std::endl;
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; excep &lt;&lt; std::endl;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&gt;<br>&gt;&nbsp;&nbsp; writer4-&gt;Update();<br>&gt;<br>&gt;&nbsp;&nbsp; return 0;<br>&gt; }<br>&gt;<br>&gt;<br>&gt;<br>&gt;<br>&gt;<br>&gt; ------------------------------------------------------------------------
<br>&gt;<br>_______________________________________________<br>Insight-users mailing list<br><a href="mailto:Insight-users@itk.org">Insight-users@itk.org</a><br><a href="http://www.itk.org/mailman/listinfo/insight-users">
http://www.itk.org/mailman/listinfo/insight-users</a><br></blockquote></div><br>