]> Creatis software - FrontAlgorithms.git/blobdiff - appli/CTBronchi/MoriLabelling.h
...
[FrontAlgorithms.git] / appli / CTBronchi / MoriLabelling.h
index caa96aab98be496910be43883512c1a35ff71ea0..b5993105a70bf691cbae243d109f84b7272896c7 100644 (file)
@@ -2,69 +2,64 @@
 // @author Leonardo Florez Valencia
 // @email florez-l@javeriana.edu.co
 // =========================================================================
-
 #ifndef __CTBronchi__MoriLabelling__h__
 #define __CTBronchi__MoriLabelling__h__
 
+#include <map>
+#include <fpa/Filters/BaseMarksInterface.h>
+#include <fpa/Filters/Image/SeedsFromLabelsInterface.h>
 #include <fpa/Filters/Image/DefaultTraits.h>
-#include <fpa/Filters/MarksInterface.h>
-#include <fpa/Filters/Image/LabelsSeedFilter.h>
-#include <fpa/Filters/Image/LabelsSeedInterface.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
 {
   /**
    */
   template< class _TInputImage, class _TLabelImage >
   class MoriLabellingTraits
-        : public fpa::Filters::Image::DefaultTraits< _TInputImage, _TLabelImage, typename _TLabelImage::PixelType >
+    : public fpa::Filters::Image::DefaultTraits< _TInputImage, _TLabelImage, typename _TLabelImage::PixelType >
   {
   public:
     typedef _TInputImage TInputImage;
     typedef _TLabelImage TLabelImage;
-    typedef fpa::Filters::Image::DefaultTraits< TInputImage, TLabelImage, typename TLabelImage::PixelType > Superclass;
-
-    typedef typename Superclass::TInternalTraits TInternalTraits;
-    typedef typename Superclass::TFilter TFilter;
-    typedef fpa::Filters::MarksInterface< TInternalTraits >  TMarksInterface;
-    typedef fpa::Filters::Image::LabelsSeedInterface< TInternalTraits > TSeedsInterface;
+    typedef typename TLabelImage::PixelType TLabel;
+    typedef fpa::Filters::Image::DefaultTraits< TInputImage, TLabelImage, TLabel > Superclass;
+    typedef typename Superclass::TInternalTraits  TInternalTraits;
+    typedef typename Superclass::TMarksImage      TMarksImage;
+    typedef typename Superclass::TFilterInterface TFilterInterface;
+
+    typedef fpa::Filters::BaseMarksInterface< TInternalTraits >  TMarksInterface;
+    typedef fpa::Filters::Image::SeedsFromLabelsInterface< TInternalTraits > TSeedsInterface;
   };
 
   /**
    */
   template< class _TInputImage, class _TLabelImage >
   class MoriLabelling
-    : public fpa::Filters::Image::LabelsSeedFilter< fpa::Filters::Image::Algorithm< fpa::Filters::RegionGrow< CTBronchi::MoriLabellingTraits< _TInputImage, _TLabelImage > > >, _TLabelImage >
+    : public fpa::Filters::Image::RegionGrow< _TInputImage, _TLabelImage, typename _TLabelImage::PixelType, CTBronchi::MoriLabellingTraits< _TInputImage, _TLabelImage > >
   {
   public:
     typedef _TInputImage TInputImage;
     typedef _TLabelImage TLabelImage;
     typedef CTBronchi::MoriLabellingTraits< TInputImage, TLabelImage > TTraits;
-    fpaTraitsMacro( typename, TTraits );
+    fpaTraitsMacro( typename TTraits );
 
-    typedef fpa::Filters::Image::Algorithm< fpa::Filters::RegionGrow< TTraits > > TAlgorithm;
-    typedef fpa::Filters::Image::LabelsSeedFilter< TAlgorithm, _TLabelImage > Superclass;
-    typedef MoriLabelling Self;
-    typedef itk::SmartPointer< Self >        Pointer;
-    typedef itk::SmartPointer< const Self >  ConstPointer;
-
-    typedef fpa::Functors::RegionGrow::BinaryThreshold< TInputValue > TLabelFunctor;
+    typedef fpa::Filters::Image::RegionGrow< TInputImage, TLabelImage, TMark, TTraits > Superclass;
+    typedef MoriLabelling                   Self;
+    typedef itk::SmartPointer< Self >       Pointer;
+    typedef itk::SmartPointer< const Self > ConstPointer;
+    typedef fpa::Functors::RegionGrow::BinaryThreshold< TInputValue > TFunctor;
 
   public:
     itkNewMacro( Self );
     itkTypeMacro( CTBronchi::MoriLabelling, fpa::Filters::Image::RegionGrow );
 
+    itkGetConstMacro( LastThreshold, TInputValue );
+    itkSetMacro( LastThreshold, TInputValue );
+
+    fpaFilterInputMacro( InputLabels, TLabelImage );
+
   public:
     TInputValue GetUpperThreshold( ) const;
     void SetUpperThreshold( TInputValue t );
@@ -73,7 +68,8 @@ namespace CTBronchi
     MoriLabelling( );
     virtual ~MoriLabelling( );
 
-    virtual void _UpdateOutputValue( TNode& n ) override;
+    virtual const itk::DataObject* _GetReferenceInput( ) const override;
+    virtual void _PostComputeOutputValue( TNode& n ) override;
 
   private:
     // Purposely not implemented.
@@ -81,7 +77,8 @@ namespace CTBronchi
     Self& operator=( const Self& other );
 
   protected:
-    typename TLabelFunctor::Pointer m_LabelFunctor;
+    typename TFunctor::Pointer m_Functor;
+    TInputValue m_LastThreshold;
   };
 
 } // ecapseman