<div dir="ltr">Be sure to build ITK and your example Release and not Debug.<div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Sun, Aug 11, 2013 at 4:40 AM, zhq <span dir="ltr">&lt;<a href="mailto:15891495523@126.com" target="_blank">15891495523@126.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="line-height:1.7;font-size:14px;font-family:arial"><div><span style="line-height:1.7">Hello , Dear:</span><div style="line-height:1.7;font-size:14px;font-family:arial">
&nbsp; &nbsp; &nbsp;I am learning&nbsp;itkGeodesicActiveContourLevelSetImageFilter , and I can segment a 2 dimension picture . And , now , I am trying to segment a 3 dimension data . But , when I segment a 2 dimension picture , it costs me about one minute . But , it costs me more than 20 minutes to segment a 3 dimension data , the data consists in 4 two-dimensional pictures &nbsp;. Is my code wrong ?&nbsp;</div>
<div><div>#include &quot;itkGeodesicActiveContourLevelSetImageFilter.h&quot;</div><div>#include &quot;itkCurvatureAnisotropicDiffusionImageFilter.h&quot;</div><div>#include &quot;itkGradientMagnitudeRecursiveGaussianImageFilter.h&quot;</div>
<div>#include &quot;itkSigmoidImageFilter.h&quot;</div><div>#include &quot;itkFastMarchingImageFilter.h&quot;</div><div>#include &quot;itkRescaleIntensityImageFilter.h&quot;</div><div>#include &quot;itkBinaryThresholdImageFilter.h&quot;</div>
<div>#include &quot;itkImageFileReader.h&quot;</div><div>#include &quot;itkImageFileWriter.h&quot;</div><div>#include &quot;itkGDCMImageIO.h&quot;</div><div>#include &quot;itkJPEGImageIO.h&quot;</div><div>#include &quot;itkChangeInformationImageFilter.h&quot;</div>
<div>#include &quot;itkImage.h&quot;</div><div>#include &quot;itkImageSeriesReader.h&quot;</div><div>#include &quot;itkNumericSeriesFileNames.h&quot;</div><div>#include &quot;itkImageFileWriter.h&quot;</div><div>int main()</div>
<div>{</div><div>&nbsp; typedef &nbsp; float &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; InternalPixelType;</div><div>&nbsp; const &nbsp; &nbsp; unsigned int &nbsp; &nbsp;Dimension = 3;</div><div>&nbsp; typedef itk::Image&lt; InternalPixelType, Dimension &gt; &nbsp;InternalImageType;</div><div><br></div>
<div>&nbsp; typedef unsigned char &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;OutputPixelType;</div><div>&nbsp; typedef itk::Image&lt; OutputPixelType, Dimension &gt; OutputImageType;</div><div>&nbsp; typedef itk::BinaryThresholdImageFilter&lt;</div><div>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; InternalImageType,</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; OutputImageType &nbsp; &nbsp;&gt; &nbsp; &nbsp; &nbsp; ThresholdingFilterType;</div><div><br></div><div>&nbsp; ThresholdingFilterType::Pointer thresholder = ThresholdingFilterType::New();</div>
<div><br></div><div>&nbsp; thresholder-&gt;SetLowerThreshold( -80.0 );</div><div>&nbsp; thresholder-&gt;SetUpperThreshold( &nbsp; &nbsp; 2 );</div><div><br></div><div>&nbsp; thresholder-&gt;SetOutsideValue( &nbsp;0 &nbsp;);</div><div>&nbsp; thresholder-&gt;SetInsideValue( &nbsp;255 );</div>
<div>// &nbsp;************* &nbsp;reader &nbsp; ****************************** &nbsp;//</div><div><br></div><div>// &nbsp;typedef &nbsp;itk::ImageFileReader&lt; InternalImageType &gt; ReaderType;</div><div>// &nbsp;ReaderType::Pointer reader = ReaderType::New();</div>
<div>// &nbsp;reader-&gt;SetFileName(&quot;C:\\Users\\zhq\\Desktop\\VolumeData.vtk&quot;);</div><div>// &nbsp;reader-&gt;SetFileName(&quot;C:\\Users\\zhq\\Desktop\\BrainProtonDensitySlice.png&quot;);</div><div>// &nbsp;reader-&gt;SetImageIO(itk::GDCMImageIO::New());</div>
<div>// &nbsp;reader-&gt;SetFileName(&quot;C:\\Users\\zhq\\Desktop\\data\\SNAP_CR\\E403434298\\E403434298S1901I301.dcm&quot;);</div><div>// &nbsp;reader-&gt;SetImageIO(itk::JPEGImageIO::New());</div><div>// &nbsp;reader-&gt;SetFileName(&quot;C:\\Users\\zhq\\Desktop\\data\\picture8\\1.jpeg&quot;);</div>
<div>// &nbsp;reader-&gt;SetFileName(&quot;C:\\Users\\zhq\\Desktop\\\\1.jpg&quot;);</div><div><br></div><div>&nbsp; typedef itk::ImageSeriesReader&lt;InternalImageType&gt; ReaderType ;</div><div>&nbsp; ReaderType::Pointer reader = ReaderType::New();</div>
<div>&nbsp; typedef itk::NumericSeriesFileNames NameGeneratorType ;&nbsp;</div><div>&nbsp; NameGeneratorType::Pointer nameGenerator = NameGeneratorType::New();</div><div><br></div><div>&nbsp; nameGenerator-&gt;SetSeriesFormat(&quot;C:\\Users\\zhq\\Desktop\\data\\SNAP_CR\\E403434298\\E403434298S1901I%3d.dcm&quot;);</div>
<div>&nbsp; nameGenerator-&gt;SetStartIndex(301);</div><div>&nbsp; nameGenerator-&gt;SetEndIndex(304);</div><div>&nbsp; nameGenerator-&gt;SetIncrementIndex(1);</div><div><br></div><div>&nbsp; reader-&gt;SetImageIO(itk::GDCMImageIO::New());</div>
<div>&nbsp; reader-&gt;SetFileNames(nameGenerator-&gt;GetFileNames());</div><div>&nbsp; reader-&gt;Update();</div><div>&nbsp; std::cout&lt;&lt;&quot;reader update&quot;&lt;&lt;std::endl;</div><div>// ************* &nbsp;finish reader &nbsp;********************** &nbsp; &nbsp;//&nbsp;</div>
<div><br></div><div><br></div><div>// ************* &nbsp;writer &nbsp;******************************* &nbsp;//&nbsp;</div><div>&nbsp; typedef &nbsp;itk::ImageFileWriter&lt; &nbsp;OutputImageType &nbsp;&gt; WriterType;</div><div>&nbsp; WriterType::Pointer writer = WriterType::New();</div>
<div>&nbsp; writer-&gt;SetFileName(&quot;C:\\Users\\zhq\\Desktop\\ActiveContour.vtk&quot;);</div><div><br></div><div><br></div><div>// ************* &nbsp;finish &nbsp;writer &nbsp; ********************** //</div><div><br></div><div>&nbsp; typedef itk::RescaleIntensityImageFilter&lt;</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;InternalImageType,</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;OutputImageType &gt; &nbsp; CastFilterType;</div><div><br></div><div>&nbsp; typedef &nbsp; itk::GradientMagnitudeRecursiveGaussianImageFilter&lt;</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;InternalImageType,</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;InternalImageType &gt; &nbsp;GradientFilterType;</div><div>&nbsp; typedef &nbsp; itk::SigmoidImageFilter&lt;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;InternalImageType,</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;InternalImageType &gt; &nbsp;SigmoidFilterType;</div><div><br></div><div>&nbsp; GradientFilterType::Pointer &nbsp;gradientMagnitude = GradientFilterType::New();</div><div><br></div><div>&nbsp; SigmoidFilterType::Pointer sigmoid = SigmoidFilterType::New();</div>
<div><br></div><div>&nbsp; sigmoid-&gt;SetOutputMinimum( &nbsp;0.0 &nbsp;);</div><div>&nbsp; sigmoid-&gt;SetOutputMaximum( &nbsp;1.0 &nbsp;);</div><div><br></div><div>&nbsp; typedef &nbsp;itk::FastMarchingImageFilter&lt;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; InternalImageType,</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; InternalImageType &gt; &nbsp; &nbsp;FastMarchingFilterType;</div><div><br></div><div>&nbsp; FastMarchingFilterType::Pointer &nbsp;fastMarching = FastMarchingFilterType::New();</div><div><br></div><div>&nbsp; typedef itk::ChangeInformationImageFilter&lt;InternalImageType&gt; ChangeInformationFilterType ;&nbsp;</div>
<div>&nbsp; ChangeInformationFilterType::Pointer changeInformationFilter = ChangeInformationFilterType::New();</div><div>&nbsp; changeInformationFilter-&gt;ChangeSpacingOn();</div><div>&nbsp; changeInformationFilter-&gt;ChangeOriginOn();</div>
<div>&nbsp; changeInformationFilter-&gt;ChangeDirectionOn();</div><div><br></div><div>&nbsp; typedef &nbsp;itk::GeodesicActiveContourLevelSetImageFilter&lt; InternalImageType,</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; InternalImageType &gt; &nbsp; &nbsp;GeodesicActiveContourFilterType;</div>
<div>&nbsp; GeodesicActiveContourFilterType::Pointer geodesicActiveContour =</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;GeodesicActiveContourFilterType::New();</div><div><br></div><div>&nbsp; const double propagationScaling = 0.25;</div>
<div><br></div><div>&nbsp; geodesicActiveContour-&gt;SetPropagationScaling( propagationScaling );</div><div>&nbsp; geodesicActiveContour-&gt;SetCurvatureScaling( 1 );</div><div>&nbsp; geodesicActiveContour-&gt;SetAdvectionScaling( 0.5 );</div>
<div><br></div><div>&nbsp; geodesicActiveContour-&gt;SetMaximumRMSError( 0.02 );</div><div>&nbsp; geodesicActiveContour-&gt;SetNumberOfIterations( 800 );</div><div><br></div><div><br></div><div>&nbsp; changeInformationFilter-&gt;SetInput(reader-&gt;GetOutput());</div>
<div>&nbsp; gradientMagnitude-&gt;SetInput( changeInformationFilter-&gt;GetOutput() );</div><div>&nbsp; sigmoid-&gt;SetInput( gradientMagnitude-&gt;GetOutput() );</div><div><br></div><div>&nbsp; geodesicActiveContour-&gt;SetInput( &nbsp;fastMarching-&gt;GetOutput() );</div>
<div>&nbsp; geodesicActiveContour-&gt;SetFeatureImage( sigmoid-&gt;GetOutput() );</div><div><br></div><div>&nbsp; thresholder-&gt;SetInput( geodesicActiveContour-&gt;GetOutput() );</div><div>&nbsp; writer-&gt;SetInput( thresholder-&gt;GetOutput() );</div>
<div><br></div><div>&nbsp; const double sigma = 0.55 ;</div><div>&nbsp; gradientMagnitude-&gt;SetSigma( &nbsp;sigma &nbsp;);</div><div><br></div><div>&nbsp; const double alpha = &nbsp;-0.1;</div><div>&nbsp; const double beta &nbsp;= &nbsp;100;</div><div><br></div><div>
&nbsp; sigmoid-&gt;SetAlpha( alpha );</div><div>&nbsp; sigmoid-&gt;SetBeta( &nbsp;beta &nbsp;);</div><div><br></div><div>&nbsp; typedef FastMarchingFilterType::NodeContainer &nbsp;NodeContainer;</div><div>&nbsp; typedef FastMarchingFilterType::NodeType &nbsp; &nbsp; &nbsp; NodeType;</div>
<div><br></div><div>&nbsp; NodeContainer::Pointer seeds = NodeContainer::New();</div><div><br></div><div>&nbsp; InternalImageType::IndexType &nbsp;seedPosition;</div><div><br></div><div>&nbsp; seedPosition[0] = 370;//661 ; //370 ; // 81;</div>
<div>&nbsp; seedPosition[1] = 443;//559 ; //443 ; // 114;</div><div>&nbsp; seedPosition[2] = 1;</div><div><br></div><div>&nbsp; const double initialDistance = 5;</div><div><br></div><div>&nbsp; NodeType node;</div><div><br></div><div>&nbsp; const double seedValue = - initialDistance;</div>
<div><br></div><div>&nbsp; node.SetValue( seedValue );</div><div>&nbsp; node.SetIndex( seedPosition );</div><div><br></div><div>&nbsp; seeds-&gt;Initialize();</div><div>&nbsp; seeds-&gt;InsertElement( 0, node );</div><div><br></div><div>&nbsp; fastMarching-&gt;SetTrialPoints( &nbsp;seeds &nbsp;);</div>
<div><br></div><div>&nbsp; fastMarching-&gt;SetSpeedConstant( 1.0 );</div><div><br></div><div>&nbsp; fastMarching-&gt;SetOutputSize(</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;changeInformationFilter-&gt;GetOutput()-&gt;GetBufferedRegion().GetSize() );</div>
<div>&nbsp; try</div><div>&nbsp; {</div><div><span style="white-space:pre-wrap">        </span> &nbsp;gradientMagnitude-&gt;Update();</div><div><span style="white-space:pre-wrap">        </span> &nbsp;std::cout&lt;&lt;&quot;gradientMagnitude update&quot;&lt;&lt;std::endl;</div>
<div>&nbsp; }</div><div>&nbsp; catch( itk::ExceptionObject &amp; excep )</div><div>&nbsp; {</div><div>&nbsp; &nbsp; std::cerr &lt;&lt; &quot;Exception caught !&quot; &lt;&lt; std::endl;</div><div>&nbsp; &nbsp; std::cerr &lt;&lt; excep &lt;&lt; std::endl;</div>
<div>&nbsp; }</div><div><br></div><div>&nbsp; sigmoid-&gt;Update();</div><div>&nbsp; std::cout&lt;&lt;&quot;sigmoid update&quot;&lt;&lt;std::endl;</div><div><br></div><div>&nbsp; fastMarching-&gt;SetOutputSize(</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;reader-&gt;GetOutput()-&gt;GetBufferedRegion().GetSize() );</div>
<div><br></div><div>&nbsp; fastMarching-&gt;Update();</div><div>&nbsp; std::cout&lt;&lt;&quot;fastMarching update&quot;&lt;&lt;std::endl;</div><div>&nbsp; try</div><div>&nbsp; {</div><div><span style="white-space:pre-wrap">        </span> &nbsp;geodesicActiveContour-&gt;Update();</div>
<div><span style="white-space:pre-wrap">        </span> &nbsp;std::cout&lt;&lt;&quot;geodesicActiveContour update&quot;&lt;&lt;std::endl;</div><div>&nbsp; }</div><div>&nbsp; catch( itk::ExceptionObject &amp; excep )</div><div>&nbsp; {</div><div>&nbsp; &nbsp; std::cerr &lt;&lt; &quot;Exception caught !&quot; &lt;&lt; std::endl;</div>
<div>&nbsp; &nbsp; std::cerr &lt;&lt; excep &lt;&lt; std::endl;</div><div>&nbsp; }</div><div><br></div><div>&nbsp; writer-&gt;Update();</div><div>&nbsp; std::cout&lt;&lt;&quot;writer update&quot;&lt;&lt;std::endl;</div><div><br></div><div><br></div>
<div><br></div><div>&nbsp; std::cout &lt;&lt; std::endl;</div><div>&nbsp; std::cout &lt;&lt; &quot;Max. no. iterations: &quot; &lt;&lt; geodesicActiveContour-&gt;GetNumberOfIterations() &lt;&lt; std::endl;</div><div>&nbsp; std::cout &lt;&lt; &quot;Max. RMS error: &quot; &lt;&lt; geodesicActiveContour-&gt;GetMaximumRMSError() &lt;&lt; std::endl;</div>
<div>&nbsp; std::cout &lt;&lt; std::endl;</div><div>&nbsp; std::cout &lt;&lt; &quot;No. elpased iterations: &quot; &lt;&lt; geodesicActiveContour-&gt;GetElapsedIterations() &lt;&lt; std::endl;</div><div>&nbsp; std::cout &lt;&lt; &quot;RMS change: &quot; &lt;&lt; geodesicActiveContour-&gt;GetRMSChange() &lt;&lt; std::endl;</div>
<div><br></div><div>&nbsp; return 0;</div><div>}</div></div><div style="line-height:1.7;font-size:14px;font-family:arial"><br></div><div style="line-height:1.7;font-size:14px;font-family:arial">&nbsp; &nbsp;&nbsp;</div></div></div><br><br><span title="neteasefooter"><span><div>
<div style="border-top:#cccccc 1px solid;padding:10px 5px;font-size:12px;color:#666;line-height:22px">来自网易手机号码邮箱<a href="http://shouji.163.com" style="color:#0000ff" target="_blank">了解更多</a></div></div>
</span></span><br>_____________________________________<br>
Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
<br>
Visit other Kitware open-source projects at<br>
<a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
<br>
Kitware offers ITK Training Courses, for more information visit:<br>
<a href="http://www.kitware.com/products/protraining.php" target="_blank">http://www.kitware.com/products/protraining.php</a><br>
<br>
Please keep messages on-topic and check the ITK FAQ at:<br>
<a href="http://www.itk.org/Wiki/ITK_FAQ" target="_blank">http://www.itk.org/Wiki/ITK_FAQ</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://www.itk.org/mailman/listinfo/insight-users" target="_blank">http://www.itk.org/mailman/listinfo/insight-users</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br>Unpaid intern in BillsBasement at noware dot com<br>
</div>