<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:times new roman, new york, times, serif;font-size:12pt"><DIV>
<DIV style="FONT-SIZE: 12pt; FONT-FAMILY: times new roman, new york, times, serif">
<DIV>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-GB>Dear itk users, </SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-GB>I’m new to itk (just in my first week). I have successfully configured itk and also vtk. I am now reading the ItkSoftwareGuide and I trying to&nbsp;run some of the examples provided. I’m little bit confused with the meaning of the Update function (for instance writer-&gt;Update();</SPAN><SPAN lang=EN-GB style="FONT-SIZE: 10pt"> </SPAN><SPAN lang=EN-GB>). According to the book update function triggers the execution of the pipeline. When I change its location in the code, the code still running without end.&nbsp;</SPAN><SPAN lang=EN-GB>For example in the example </SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">FastMarchingImageFilter.c++ <SPAN>&nbsp;</SPAN>if I move writer4-&gt;Update();and put it just after caster4-&gt;SetOutputMaximum( 255 ); ,as with the other writers, the code still running without end !</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier
 New'">&nbsp;</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-GB>I couldn’t understand where exactly this function should be placed in a given code.</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-GB>Is it better to call this function with the last filter (i.e. a writer ) or I can call it after each filter (and even reader and writer) ? &nbsp;What’s the difference between both??</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-GB>Please could you answer me? </SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-GB>Thank you </SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-GB>Martine</SPAN></P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><SPAN>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"></SPAN></SPAN>Please see the code:</P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">&nbsp;</P><FONT color=#008000 size=2>
<P>// The following example implements a fast marching solution to a simple level set evolution problem. </P></FONT><FONT color=#0000ff size=2>
<P>#include</FONT><FONT size=2> </FONT><FONT color=#a31515 size=2>"itkCurvatureAnisotropicDiffusionImageFilter.h"</P></FONT><FONT color=#0000ff size=2>
<P>#include</FONT><FONT size=2> </FONT><FONT color=#a31515 size=2>"itkGradientMagnitudeRecursiveGaussianImageFilter.h"</P></FONT><FONT color=#0000ff size=2>
<P>#include</FONT><FONT size=2> </FONT><FONT color=#a31515 size=2>"itkSigmoidImageFilter.h"</P></FONT><FONT color=#0000ff size=2>
<P>#include</FONT><FONT size=2> </FONT><FONT color=#a31515 size=2>"itkImage.h"</P></FONT><FONT color=#0000ff size=2>
<P>#include</FONT><FONT size=2> </FONT><FONT color=#a31515 size=2>"itkFastMarchingImageFilter.h"</P></FONT><FONT color=#0000ff size=2>
<P>#include</FONT><FONT size=2> </FONT><FONT color=#a31515 size=2>"itkBinaryThresholdImageFilter.h"</P></FONT><FONT color=#0000ff size=2>
<P>#include</FONT><FONT size=2> </FONT><FONT color=#a31515 size=2>"itkImageFileReader.h"</P></FONT><FONT color=#0000ff size=2>
<P>#include</FONT><FONT size=2> </FONT><FONT color=#a31515 size=2>"itkImageFileWriter.h"</P></FONT><FONT color=#0000ff size=2>
<P>#include</FONT><FONT size=2> </FONT><FONT color=#a31515 size=2>"itkRescaleIntensityImageFilter.h"</P>
<P>&nbsp;</P></FONT><FONT color=#0000ff size=2>
<P>int</FONT><FONT size=2> main( )</P>
<P>{ </P>
<P></FONT><FONT color=#0000ff size=2>typedef</FONT><FONT size=2> </FONT><FONT color=#0000ff size=2>float</FONT><FONT size=2> InternalPixelType;</P>
<P></FONT><FONT color=#0000ff size=2>const</FONT><FONT size=2> </FONT><FONT color=#0000ff size=2>unsigned</FONT><FONT size=2> </FONT><FONT color=#0000ff size=2>int</FONT><FONT size=2> Dimension = 2;</P>
<P></FONT><FONT color=#0000ff size=2>typedef</FONT><FONT size=2> itk::Image&lt; InternalPixelType, Dimension &gt; InternalImageType;</P>
<P></P>
<P></FONT><FONT color=#0000ff size=2>typedef</FONT><FONT size=2> </FONT><FONT color=#0000ff size=2>unsigned</FONT><FONT size=2> </FONT><FONT color=#0000ff size=2>char</FONT><FONT size=2> OutputPixelType;</P>
<P></FONT><FONT color=#0000ff size=2>typedef</FONT><FONT size=2> itk::Image&lt; OutputPixelType, Dimension &gt; OutputImageType;</P>
<P></P>
<P></FONT><FONT color=#0000ff size=2>typedef</FONT><FONT size=2> itk::BinaryThresholdImageFilter&lt; InternalImageType, OutputImageType &gt; ThresholdingFilterType;</P>
<P>ThresholdingFilterType::Pointer thresholder = ThresholdingFilterType::New();</P>
<P></P>
<P></FONT><FONT color=#0000ff size=2>const</FONT><FONT size=2> InternalPixelType timeThreshold = atof( </FONT><FONT color=#a31515 size=2>"100"</FONT><FONT size=2> ); </P>
<P></P>
<P>thresholder-&gt;SetLowerThreshold( 0.0 );</P>
<P>thresholder-&gt;SetUpperThreshold( timeThreshold );</P>
<P>thresholder-&gt;SetOutsideValue( 0 );</P>
<P>thresholder-&gt;SetInsideValue( 255 );</P>
<P></P>
<P></FONT><FONT color=#0000ff size=2>typedef</FONT><FONT size=2> itk::ImageFileReader&lt; InternalImageType &gt; ReaderType;</P>
<P></FONT><FONT color=#0000ff size=2>typedef</FONT><FONT size=2> itk::ImageFileWriter&lt; OutputImageType &gt; WriterType;</P>
<P></P>
<P>ReaderType::Pointer reader = ReaderType::New();</P>
<P>WriterType::Pointer writer = WriterType::New();</P>
<P>reader-&gt;SetFileName(</FONT><FONT color=#a31515 size=2>"d:/BrainProtonDensitySlice.png"</FONT><FONT size=2>);</P>
<P>writer-&gt;SetFileName(</FONT><FONT color=#a31515 size=2>"d:/FastMarchingSegmentedImg.png"</FONT><FONT size=2>);</P>
<P></FONT><FONT color=#0000ff size=2>typedef</FONT><FONT size=2> itk::RescaleIntensityImageFilter&lt; InternalImageType, OutputImageType &gt; CastFilterType;</P>
<P></P>
<P></FONT><FONT color=#0000ff size=2>typedef</FONT><FONT size=2> itk::CurvatureAnisotropicDiffusionImageFilter&lt; InternalImageType, InternalImageType &gt; SmoothingFilterType;</P>
<P></P>
<P>SmoothingFilterType::Pointer smoothing = SmoothingFilterType::New();</P>
<P></P>
<P></FONT><FONT color=#0000ff size=2>typedef</FONT><FONT size=2> itk::GradientMagnitudeRecursiveGaussianImageFilter&lt; InternalImageType, InternalImageType &gt; GradientFilterType;</P>
<P></FONT><FONT color=#0000ff size=2>typedef</FONT><FONT size=2> itk::SigmoidImageFilter&lt; InternalImageType, InternalImageType &gt; SigmoidFilterType;</P>
<P></P>
<P>GradientFilterType::Pointer gradientMagnitude = GradientFilterType::New();</P>
<P>SigmoidFilterType::Pointer sigmoid = SigmoidFilterType::New();</P>
<P></P>
<P>sigmoid-&gt;SetOutputMinimum( 0.0 );</P>
<P>sigmoid-&gt;SetOutputMaximum( 1.0 );</P>
<P></P>
<P></FONT><FONT color=#0000ff size=2>typedef</FONT><FONT size=2> itk::FastMarchingImageFilter&lt; InternalImageType, InternalImageType &gt; FastMarchingFilterType;</P>
<P></P>
<P>FastMarchingFilterType::Pointer fastMarching = FastMarchingFilterType::New();</P>
<P></P>
<P>smoothing-&gt;SetInput( reader-&gt;GetOutput() );</P>
<P>gradientMagnitude-&gt;SetInput( smoothing-&gt;GetOutput() );</P>
<P>sigmoid-&gt;SetInput( gradientMagnitude-&gt;GetOutput() );</P>
<P>fastMarching-&gt;SetInput( sigmoid-&gt;GetOutput() );</P>
<P>thresholder-&gt;SetInput( fastMarching-&gt;GetOutput() );</P>
<P>writer-&gt;SetInput( thresholder-&gt;GetOutput() );</P>
<P></P>
<P>smoothing-&gt;SetTimeStep( 0.125 );</P>
<P>smoothing-&gt;SetNumberOfIterations( 5 );</P>
<P>smoothing-&gt;SetConductanceParameter( 9.0 );</P>
<P></P>
<P></FONT><FONT color=#0000ff size=2>const</FONT><FONT size=2> </FONT><FONT color=#0000ff size=2>double</FONT><FONT size=2> sigma = atof( </FONT><FONT color=#a31515 size=2>"1.0"</FONT><FONT size=2> );</P>
<P></P>
<P>gradientMagnitude-&gt;SetSigma( sigma );</P>
<P></P>
<P></FONT><FONT color=#0000ff size=2>const</FONT><FONT size=2> </FONT><FONT color=#0000ff size=2>double</FONT><FONT size=2> alpha = atof( </FONT><FONT color=#a31515 size=2>"-0.5"</FONT><FONT size=2> );</P>
<P></FONT><FONT color=#0000ff size=2>const</FONT><FONT size=2> </FONT><FONT color=#0000ff size=2>double</FONT><FONT size=2> beta = atof( </FONT><FONT color=#a31515 size=2>"3.0"</FONT><FONT size=2> );</P>
<P>&nbsp;</P>
<P>sigmoid-&gt;SetAlpha( alpha );</P>
<P>sigmoid-&gt;SetBeta( beta );</P>
<P></P>
<P></FONT><FONT color=#0000ff size=2>typedef</FONT><FONT size=2> FastMarchingFilterType::NodeContainer NodeContainer;</P>
<P></FONT><FONT color=#0000ff size=2>typedef</FONT><FONT size=2> FastMarchingFilterType::NodeType NodeType;</P>
<P>NodeContainer::Pointer seeds = NodeContainer::New();</P>
<P></P>
<P>InternalImageType::IndexType seedPosition;</P>
<P></P>
<P>seedPosition[0] = atoi( </FONT><FONT color=#a31515 size=2>"81"</FONT><FONT size=2> );</P>
<P>seedPosition[1] = atoi( </FONT><FONT color=#a31515 size=2>"114"</FONT><FONT size=2> );</P>
<P>NodeType node;</P>
<P></FONT><FONT color=#0000ff size=2>const</FONT><FONT size=2> </FONT><FONT color=#0000ff size=2>double</FONT><FONT size=2> seedValue = 0.0;</P>
<P></P>
<P>node.SetValue( seedValue );</P>
<P>node.SetIndex( seedPosition );</P>
<P></P>
<P>seeds-&gt;Initialize();</P>
<P>seeds-&gt;InsertElement( 0, node );</P>
<P></P>
<P>fastMarching-&gt;SetTrialPoints( seeds );</P>
<P></P>
<P>CastFilterType::Pointer caster1 = CastFilterType::New();</P>
<P>CastFilterType::Pointer caster2 = CastFilterType::New();</P>
<P>CastFilterType::Pointer caster3 = CastFilterType::New();</P>
<P>CastFilterType::Pointer caster4 = CastFilterType::New();</P>
<P>WriterType::Pointer writer1 = WriterType::New();</P>
<P>WriterType::Pointer writer2 = WriterType::New();</P>
<P>WriterType::Pointer writer3 = WriterType::New();</P>
<P>WriterType::Pointer writer4 = WriterType::New();</P>
<P>caster1-&gt;SetInput( smoothing-&gt;GetOutput() );</P>
<P>writer1-&gt;SetInput( caster1-&gt;GetOutput() );</P>
<P>writer1-&gt;SetFileName(</FONT><FONT color=#a31515 size=2>"d:/FastMarchingFilterOutput1.png"</FONT><FONT size=2>);</P>
<P>caster1-&gt;SetOutputMinimum( 0 );</P>
<P>caster1-&gt;SetOutputMaximum( 255 );</P>
<P>writer1-&gt;Update();</P>
<P>caster2-&gt;SetInput( gradientMagnitude-&gt;GetOutput() );</P>
<P>writer2-&gt;SetInput( caster2-&gt;GetOutput() );</P>
<P>writer2-&gt;SetFileName(</FONT><FONT color=#a31515 size=2>"d:/FastMarchingFilterOutput2.png"</FONT><FONT size=2>);</P>
<P>caster2-&gt;SetOutputMinimum( 0 );</P>
<P>caster2-&gt;SetOutputMaximum( 255 );</P>
<P>writer2-&gt;Update();</P>
<P>caster3-&gt;SetInput( sigmoid-&gt;GetOutput() );</P>
<P>writer3-&gt;SetInput( caster3-&gt;GetOutput() );</P>
<P>writer3-&gt;SetFileName(</FONT><FONT color=#a31515 size=2>"d:/FastMarchingFilterOutput3.png"</FONT><FONT size=2>);</P>
<P>caster3-&gt;SetOutputMinimum( 0 );</P>
<P>caster3-&gt;SetOutputMaximum( 255 );</P>
<P>writer3-&gt;Update();</P>
<P>caster4-&gt;SetInput( fastMarching-&gt;GetOutput() );</P>
<P>writer4-&gt;SetInput( caster4-&gt;GetOutput() );</P>
<P>writer4-&gt;SetFileName(</FONT><FONT color=#a31515 size=2>"d:/FastMarchingFilterOutput4.png"</FONT><FONT size=2>);</P>
<P>caster4-&gt;SetOutputMinimum( 0 );</P>
<P>caster4-&gt;SetOutputMaximum( 255 );</P>
<P>writer4-&gt;Update(); </FONT><FONT color=#008000 size=2>// here where I have moved writer4-&gt;Update();</P></FONT><FONT size=2>
<P></P>
<P>fastMarching-&gt;SetOutputSize( reader-&gt;GetOutput()-&gt;GetBufferedRegion().GetSize() );</P>
<P></P>
<P></FONT><FONT color=#0000ff size=2>const</FONT><FONT size=2> </FONT><FONT color=#0000ff size=2>double</FONT><FONT size=2> stoppingTime = atof( </FONT><FONT color=#a31515 size=2>"100"</FONT><FONT size=2> );</P>
<P>fastMarching-&gt;SetStoppingValue( stoppingTime );</P>
<P></P>
<P></FONT><FONT color=#0000ff size=2>try</P></FONT><FONT size=2>
<P>{</P>
<P>writer-&gt;Update();</P>
<P>}</P>
<P></FONT><FONT color=#0000ff size=2>catch</FONT><FONT size=2>( itk::ExceptionObject &amp; excep )</P>
<P>{</P>
<P>std::cerr &lt;&lt; </FONT><FONT color=#a31515 size=2>"Exception caught !"</FONT><FONT size=2> &lt;&lt; std::endl;</P>
<P>std::cerr &lt;&lt; excep &lt;&lt; std::endl;</P>
<P>}</P>
<P></P>
<P></FONT><FONT color=#008000 size=2>//writer4-&gt;Update();</P></FONT><FONT size=2>
<P></P>
<P></FONT><FONT color=#0000ff size=2>typedef</FONT><FONT size=2> itk::ImageFileWriter&lt; InternalImageType &gt; InternalWriterType;</P>
<P>InternalWriterType::Pointer mapWriter = InternalWriterType::New();</P>
<P>mapWriter-&gt;SetInput( fastMarching-&gt;GetOutput() );</P>
<P>mapWriter-&gt;SetFileName(</FONT><FONT color=#a31515 size=2>"d:/FastMarchingFilterOutput4.mha"</FONT><FONT size=2>);</P>
<P>mapWriter-&gt;Update();</P>
<P>InternalWriterType::Pointer speedWriter = InternalWriterType::New();</P>
<P>speedWriter-&gt;SetInput( sigmoid-&gt;GetOutput() );</P>
<P>speedWriter-&gt;SetFileName(</FONT><FONT color=#a31515 size=2>"d:/FastMarchingFilterOutput3.mha"</FONT><FONT size=2>);</P>
<P>speedWriter-&gt;Update();</P>
<P>InternalWriterType::Pointer gradientWriter = InternalWriterType::New();</P>
<P>gradientWriter-&gt;SetInput( gradientMagnitude-&gt;GetOutput() );</P>
<P>gradientWriter-&gt;SetFileName(</FONT><FONT color=#a31515 size=2>"d:/FastMarchingFilterOutput2.mha"</FONT><FONT size=2>);</P>
<P>gradientWriter-&gt;Update();</P>
<P>std::cout &lt;&lt; </FONT><FONT color=#a31515 size=2>"Code end !"</FONT><FONT size=2> &lt;&lt; std::endl;</P>
<P>std::cin.get();</P>
<P></FONT><FONT color=#0000ff size=2>return</FONT><FONT size=2> 0;</P>
<P>}</P></FONT></DIV></DIV><BR></DIV></div><br>


      <hr size="1"> 
Envoyé avec <a href="http://us.rd.yahoo.com/mailuk/taglines/isp/control/*http://us.rd.yahoo.com/evt=52423/*http://fr.docs.yahoo.com/mail/overview/index.html">Yahoo! Mail</a>.<br>Une boite mail plus intelligente. </a></body></html>