]> Creatis software - FrontAlgorithms.git/blobdiff - appli/CTBronchi/FastRandomWalker.cxx
...
[FrontAlgorithms.git] / appli / CTBronchi / FastRandomWalker.cxx
index b2c901baf8fd06f980b2eec9142cad55bc16290c..7342562f3f80ce58c6460867bcdd8d762f9ff0f8 100644 (file)
@@ -6,7 +6,8 @@
 #include <string>
 #include <tclap/CmdLine.h>
 #include <itkImage.h>
-#include "MoriLabelling.h"
+#include <fpa/Filters/Image/RandomWalker.h>
+#include <fpa/Functors/Dijkstra/Image/Gaussian.h>
 #include "Functions.h"
 
 // -------------------------------------------------------------------------
@@ -16,29 +17,25 @@ typedef unsigned char                          TLabel;
 typedef itk::NumericTraits< TPixel >::RealType TScalar;
 typedef itk::Image< TPixel, Dim >              TImage;
 typedef itk::Image< TLabel, Dim >              TLabels;
-typedef itk::Image< TScalar, Dim >             TScalarImage;
 
 // -------------------------------------------------------------------------
 int main( int argc, char* argv[] )
 {
   typedef TCLAP::ValueArg< std::string > _TStringArg;
-  typedef TCLAP::ValueArg< double > _TRealArg;
-  typedef TCLAP::ValueArg< TPixel > _TPixelArg;
+  typedef TCLAP::ValueArg< TScalar > _TRealArg;
 
   // Parse input line
   _TStringArg in( "i", "input", "Input image", true, "", "file" );
   _TStringArg labels( "l", "labels", "Input labels", true, "", "file" );
-  _TStringArg vesselness( "v", "vesselness", "Input vesselness", true, "", "file" );
   _TStringArg out( "o", "output", "Output image", true, "", "file" );
-  _TRealArg vThr( "a", "vesselness_thr", "Vesselness threshold", false, 0.05, "value (0.05)" );
-  _TPixelArg uThr( "u", "upper_thr", "Upper threshold", false, -400, "value (-400)" );
+  _TRealArg beta( "b", "beta", "Beta", false, 2.5, "value (2.5)" );
+  _TRealArg eps( "e", "epsilon", "Epsilon", false, 1e-5, "value (1e-5)" );
   try
   {
-    TCLAP::CmdLine cmd( "Labelling", ' ', "1.0.0" );
-    cmd.add( uThr );
-    cmd.add( vThr );
+    TCLAP::CmdLine cmd( "FastRandomWalker", ' ', "1.0.0" );
+    cmd.add( eps );
+    cmd.add( beta );
     cmd.add( out );
-    cmd.add( vesselness );
     cmd.add( labels );
     cmd.add( in );
     cmd.parse( argc, argv );
@@ -65,26 +62,23 @@ int main( int argc, char* argv[] )
     TLabels::Pointer input_labels;
     CTBronchi::ReadImage( input_labels, labels.getValue( ) );
 
-    // Read input vesselness
-    TScalarImage::Pointer input_vesselness;
-    CTBronchi::ReadImage( input_vesselness, vesselness.getValue( ) );
+    // Prepare weight functor
+    typedef fpa::Functors::Dijkstra::Image::Gaussian< TImage, TScalar > TWeight;
+    TWeight::Pointer weight = TWeight::New( );
+    weight->SetBeta( beta.getValue( ) );
+    weight->SetEpsilon( eps.getValue( ) );
 
-    // Create labels
-    typedef CTBronchi::MoriLabelling< TImage, TLabels, TScalarImage > _TLabelling;
-    _TLabelling::Pointer labelling = _TLabelling::New( );
-    labelling->SetInput( input_image );
-    labelling->SetInputLabels( input_labels );
-    labelling->SetInputVesselness( input_vesselness );
-    labelling->SetVesselnessThreshold( vThr.getValue( ) );
-    labelling->SetUpperThreshold( uThr.getValue( ) );
-    labelling->SetInsideValue( 1 );
-    labelling->SetOutsideValue( 2 );
-    labelling->SetFillValue( 2 );
-    double t = CTBronchi::MeasureTime( labelling );
-    std::cout << "Labelling executed in " << t << " s" << std::endl;
+    // Random walk
+    typedef fpa::Filters::Image::RandomWalker< TImage, TLabels, TScalar > TFilter;
+    TFilter::Pointer filter = TFilter::New( );
+    filter->SetInputImage( input_image );
+    filter->SetInputLabels( input_labels );
+    filter->SetWeightFunction( weight );
+    double t = CTBronchi::MeasureTime( filter );
+    std::cout << "FastRandomWalk executed in " << t << " s" << std::endl;
 
     // Write result
-    CTBronchi::WriteImage( labelling->GetOutput( ), out.getValue( ) );
+    CTBronchi::WriteImage( filter->GetOutputLabels( ), out.getValue( ) );
   }
   catch( std::exception& err )
   {