]> Creatis software - FrontAlgorithms.git/commitdiff
...
authorLeonardo Flórez-Valencia <florez-l@javeriana.edu.co>
Fri, 18 Aug 2017 16:49:40 +0000 (11:49 -0500)
committerLeonardo Flórez-Valencia <florez-l@javeriana.edu.co>
Fri, 18 Aug 2017 16:49:40 +0000 (11:49 -0500)
appli/CTBronchi/MoriLabelling.h
appli/CTBronchi/MoriLabelling.hxx
appli/CTBronchi/Process.cxx

index caa96aab98be496910be43883512c1a35ff71ea0..d4eea090eec3e1a9ad02d6229d885ed439afaf77 100644 (file)
@@ -2,7 +2,6 @@
 // @author Leonardo Florez Valencia
 // @email florez-l@javeriana.edu.co
 // =========================================================================
-
 #ifndef __CTBronchi__MoriLabelling__h__
 #define __CTBronchi__MoriLabelling__h__
 
 #include <fpa/Filters/Image/RegionGrow.h>
 #include <fpa/Functors/RegionGrow/BinaryThreshold.h>
 
-/* TODO
-   #include <fpa/Base/RegionGrow.h>
-   #include <fpa/Base/MarksInterface.h>
-   #include <fpa/Base/Functors/RegionGrow/BinaryThreshold.h>
-   #include <fpa/Image/Algorithm.h>
-   #include <fpa/Image/DefaultTraits.h>
-   #include <fpa/Image/LabelledSeedsInterface.h>
-*/
-
 namespace CTBronchi
 {
   /**
@@ -53,7 +43,8 @@ namespace CTBronchi
     typedef CTBronchi::MoriLabellingTraits< TInputImage, TLabelImage > TTraits;
     fpaTraitsMacro( typename, TTraits );
 
-    typedef fpa::Filters::Image::Algorithm< fpa::Filters::RegionGrow< TTraits > > TAlgorithm;
+    typedef fpa::Filters::RegionGrow< TTraits > TBase;
+    typedef fpa::Filters::Image::Algorithm< TBase > TAlgorithm;
     typedef fpa::Filters::Image::LabelsSeedFilter< TAlgorithm, _TLabelImage > Superclass;
     typedef MoriLabelling Self;
     typedef itk::SmartPointer< Self >        Pointer;
@@ -65,6 +56,9 @@ namespace CTBronchi
     itkNewMacro( Self );
     itkTypeMacro( CTBronchi::MoriLabelling, fpa::Filters::Image::RegionGrow );
 
+    itkGetConstMacro( InputInsideValue, TInputValue );
+    itkSetMacro( InputInsideValue, TInputValue );
+
   public:
     TInputValue GetUpperThreshold( ) const;
     void SetUpperThreshold( TInputValue t );
@@ -82,6 +76,7 @@ namespace CTBronchi
 
   protected:
     typename TLabelFunctor::Pointer m_LabelFunctor;
+    TInputValue m_InputInsideValue;
   };
 
 } // ecapseman
index e654b09278e67537e2ac0b25e3e633d7c29237e1..7963416db6fea8d16a5142af48a41834f3a0dc81 100644 (file)
@@ -45,18 +45,17 @@ template< class _TInputImage, class _TLabelImage >
 void CTBronchi::MoriLabelling< _TInputImage, _TLabelImage >::
 _UpdateOutputValue( TNode& n )
 {
-  this->Superclass::_UpdateOutputValue( n );
+  this->TBase::_UpdateOutputValue( n );
   if( n.FrontId != 0 )
   {
     const TLabelImage* input_labels = this->GetInputLabels( );
-    if( input_labels->GetPixel( n.Vertex ) == this->GetInsideValue( ) )
-      n.Value = TOutputValue( 1 ); // this->GetInsideLabel( );
-    else
+    if( input_labels->GetPixel( n.Vertex ) != this->GetInputInsideValue( ) )
       n.Value = TOutputValue( 0 );
-    /* TODO
-       if( input_labels->GetPixel( n.Vertex ) == this->GetInsideValue( ) )
-    */
+    else
+      n.Value = this->GetInsideValue( );
+
   } // fi
+  this->GetOutput( )->SetPixel( n.Vertex, n.Value );
 }
 
 #endif // __CTBronchi__MoriLabelling__hxx__
index 848a1f03673b51cd16602e377621bb891bbed3af..e169148bb790c8441d6ba1314731a8fdd970acf0 100644 (file)
 #include <itkImageFileReader.h>
 #include <itkImageFileWriter.h>
 #include <fpa/Filters/Image/Mori.h>
+#include <fpa/Filters/Image/RandomWalker.h>
+#include <fpa/Functors/Dijkstra/Image/Gaussian.h>
 #include <CTBronchi/MoriLabelling.h>
 
 // -------------------------------------------------------------------------
 const unsigned int Dim = 3;
 typedef short         TInputPixel;
 typedef unsigned char TLabelPixel;
+typedef float         TScalar;
 typedef itk::Image< TInputPixel, Dim > TInputImage;
 typedef itk::Image< TLabelPixel, Dim > TLabelImage;
+typedef itk::Image< TScalar, Dim >     TScalarImage;
 typedef std::map< std::string, std::string > TMap;
 
 // -------------------------------------------------------------------------
 TMap Args;
 TInputImage::PointType global_seed;
-TLabelPixel inside_value = std::numeric_limits< TLabelPixel >::max( );
+TLabelPixel inside_value = TLabelPixel( 1 );
 TLabelPixel outside_value = TLabelPixel( 0 );
+TLabelPixel inside_label = TLabelPixel( 1 );
+TLabelPixel outside_label = TLabelPixel( 2 );
 
 // -------------------------------------------------------------------------
 double MeasureTime( itk::ProcessObject* f )
@@ -142,9 +148,12 @@ void Label( _TOutputPtr& output, const _TInputPtr& input, const _TOutputPtr& lab
   typename _TLabelling::Pointer labelling = _TLabelling::New( );
   labelling->SetInput( input );
   labelling->SetInputLabels( labels );
-  // TODO: labelling->SetOutsideValue( ); // out label
-  // TODO: labelling->SetInsideValue( ); // inside label
-  // TODO: labelling->SetUpperThreshold( );
+  labelling->SetOutsideValue( outside_label );
+  labelling->SetInsideValue( inside_label );
+  labelling->SetInputInsideValue( inside_value );
+  labelling->SetUpperThreshold(
+    TInputPixel( std::atof( Args[ "labelling_upper_threshold" ].c_str( ) ) )
+    );
   double t = MeasureTime( labelling );
   std::cout << "Labelling executed in " << t << " s" << std::endl;
   output = labelling->GetOutput( );
@@ -154,6 +163,14 @@ void Label( _TOutputPtr& output, const _TInputPtr& input, const _TOutputPtr& lab
   output->DisconnectPipeline( );
 }
 
+// -------------------------------------------------------------------------
+template< class _TRawPtr, class _TLabelPtr >
+void RandomWalker( _TLabelPtr& output, const _TRawPtr& raw, const _TLabelPtr& labels )
+{
+  typedef typename _TRawPtr::ObjectType  _TRaw;
+  typedef typename _TLabelPtr::ObjectType _TLabel;
+}
+
 // -------------------------------------------------------------------------
 bool ParseArgs( int argc, char* argv[] )
 {
@@ -171,6 +188,8 @@ bool ParseArgs( int argc, char* argv[] )
   Args[ "mori_lower_threshold" ] = "-1024";
   Args[ "mori_upper_threshold" ] = "0";
   Args[ "mori_delta_threshold" ] = "1";
+  Args[ "labelling_upper_threshold" ] = "-400";
+
   for( int i = 1; i < argc; i += 2 )
     Args[ argv[ i ] + 1 ] = argv[ i + 1 ];
 
@@ -194,7 +213,8 @@ bool ParseArgs( int argc, char* argv[] )
       << "\t[-mori_signal_influence value]" << std::endl
       << "\t[-mori_lower_threshold value]" << std::endl
       << "\t[-mori_upper_threshold value]" << std::endl
-      << "\t[-mori_delta_threshold value]" << std::endl;
+      << "\t[-mori_delta_threshold value]" << std::endl
+      << "\t[-labelling_upper_threshold value]" << std::endl;
     return( false );
 
   } // fi