Hi ITK users,<br><br>I am trying to implement CURVES method(Lorigo et. al., 2001). I working with 3D data set and trying to modify the example for 2D. I believe I got the feature image properly. However I can&#39;t get the fast marching method work. So i can&#39;t get an initial curve. What do you suggest? Thank you in advance.<br>
----------------------------------------------------------------------------<br>Here is my code:<br><br>#include &quot;itkImage.h&quot;<br>#include &quot;itkCurvesLevelSetImageFilter.h&quot;<br>#include &quot;itkCurvatureAnisotropicDiffusionImageFilter.h&quot;<br>
#include &quot;itkGradientMagnitudeRecursiveGaussianImageFilter.h&quot;<br>#include &quot;itkSigmoidImageFilter.h&quot;<br>#include &quot;itkFastMarchingImageFilter.h&quot;<br>#include &quot;itkRescaleIntensityImageFilter.h&quot;<br>
#include &quot;itkBinaryThresholdImageFilter.h&quot;<br>#include &quot;itkImageFileReader.h&quot;<br>#include &quot;itkImageFileWriter.h&quot;<br>#include &quot;itkCurvesLevelSetFunction.h&quot;<br>#include &quot;itkCurvesLevelSetImageFilter.h&quot;<br>
#include &lt;math.h&gt;<br>#include &quot;itkExpNegativeImageFilter.h&quot;<br><br>int main (int argc, char *argv[])<br>{<br>  <br>  const unsigned int Dimension = 3;<br>  typedef float InternalPixelType;<br>  typedef itk::Image&lt;InternalPixelType,Dimension&gt; InternalImageType;<br>
  typedef short ExternalPixelType;<br>  typedef itk::Image&lt;ExternalPixelType,Dimension&gt; ExternalImageType;<br>  <br>  typedef itk::ImageFileReader&lt;InternalImageType&gt; ReaderType;<br>  typedef itk::ImageFileWriter&lt;ExternalImageType&gt; WriterType;<br>
  typedef itk::RescaleIntensityImageFilter&lt;InternalImageType, ExternalImageType&gt; CasterType;<br>  typedef itk::RescaleIntensityImageFilter&lt;InternalImageType, InternalImageType&gt; RescaleFilterType;<br>  typedef   itk::GradientMagnitudeRecursiveGaussianImageFilter&lt; <br>
                               InternalImageType, <br>                               InternalImageType &gt;  GradientFilterType;<br>  typedef   itk::CurvatureAnisotropicDiffusionImageFilter&lt; <br>                               InternalImageType, <br>
                               InternalImageType &gt;  SmoothingFilterType;<br>  typedef   itk::SigmoidImageFilter&lt;<br>                               InternalImageType, <br>                               InternalImageType &gt;  SigmoidFilterType;<br>
  typedef   itk::ExpNegativeImageFilter&lt;InternalImageType, InternalImageType&gt; ExponentialType;<br>  typedef   itk::FastMarchingImageFilter&lt;InternalImageType,InternalImageType&gt; FastMarchingType;<br>  <br>  RescaleFilterType::Pointer rescaleFilter = RescaleFilterType::New();  <br>
  ReaderType::Pointer reader = ReaderType::New();<br>  WriterType::Pointer writer = WriterType::New();<br>  CasterType::Pointer caster = CasterType::New();<br>  GradientFilterType::Pointer GradientFilter = GradientFilterType::New();<br>
  ExponentialType::Pointer ExponentialFilter = ExponentialType::New();<br>  FastMarchingType::Pointer fastmarchingfilter = FastMarchingType::New();<br>  <br>  reader-&gt;SetFileName(argv[1]);<br>  GradientFilter-&gt;SetSigma(1.2);<br>
  ExponentialFilter-&gt;SetFactor(1.0);<br>  GradientFilter-&gt;SetInput(reader-&gt;GetOutput());<br>  rescaleFilter-&gt;SetInput(GradientFilter-&gt;GetOutput());<br>  rescaleFilter-&gt;SetOutputMinimum(0);<br>  rescaleFilter-&gt;SetOutputMaximum(255);<br>
//   InternalImageType::Pointer gradientimage = InternalImageType::New(); <br>  InternalImageType::Pointer FeatureImage = InternalImageType::New();<br>  caster-&gt;SetInput(rescaleFilter-&gt;GetOutput());<br>  writer-&gt;SetFileName(&quot;gradientimage.mhd&quot;);<br>
  writer-&gt;SetInput(caster-&gt;GetOutput());<br>  writer-&gt;Update();<br>  ExponentialFilter-&gt;SetInput(rescaleFilter-&gt;GetOutput());<br>  FeatureImage = ExponentialFilter-&gt;GetOutput();<br>  caster-&gt;SetInput(FeatureImage);<br>
  writer-&gt;SetFileName(&quot;featureimage.mhd&quot;);<br>  writer-&gt;SetInput(caster-&gt;GetOutput());<br>  writer-&gt;Update();<br>  <br>//   Obtaining the initial curve<br>  typedef FastMarchingType::NodeContainer  NodeContainer;<br>
  typedef FastMarchingType::NodeType       NodeType;<br><br>  NodeContainer::Pointer seeds = NodeContainer::New();<br><br>  InternalImageType::IndexType  seedPosition;<br>  <br>  seedPosition[0] =  110;<br>  seedPosition[1] =  110;<br>
  seedPosition[2] =  90;<br>//   seedPosition[3] =  80;<br>//   seedPosition[4] =  250;<br>//   seedPosition[5] =  240;<br>  const double initialDistance = 10;<br>  NodeType node;<br>  const double seedValue =  initialDistance;<br>
  node.SetValue( seedValue );<br>  node.SetIndex( seedPosition );<br>  seeds-&gt;Initialize();<br>  seeds-&gt;InsertElement( 0, node );<br>  seeds-&gt;InsertElement( 1, node );<br>  seeds-&gt;InsertElement(2,node);<br>  fastmarching-&gt;SetStoppingValue(  150 );<br>
  fastmarchingfilter-&gt;SetTrialPoints(  seeds  );<br>  fastmarchingfilter-&gt;SetSpeedConstant( 1.0 );<br>  caster-&gt;SetInput(fastmarchingfilter-&gt;GetOutput());<br>  writer-&gt;SetInput( caster-&gt;GetOutput() );<br>
  writer-&gt;SetFileName(&quot;fastmarchingoutput.mhd&quot;);<br>  writer-&gt;Update();<br>  <br>  <br>  <br>  return 0;<br>}<br clear="all"><br>-- <br>Baris KANDEMIR<br><br>Bogazici University<br>Student of  Electrical and Electronics Engineering<br>
<br>