]> Creatis software - FrontAlgorithms.git/blobdiff - lib/fpa/DataStructures/Image/Skeleton.h
...
[FrontAlgorithms.git] / lib / fpa / DataStructures / Image / Skeleton.h
diff --git a/lib/fpa/DataStructures/Image/Skeleton.h b/lib/fpa/DataStructures/Image/Skeleton.h
new file mode 100644 (file)
index 0000000..6fbb33d
--- /dev/null
@@ -0,0 +1,70 @@
+// =========================================================================
+// @author Leonardo Florez Valencia
+// @email florez-l@javeriana.edu.co
+// =========================================================================
+
+#ifndef __fpa__DataStructures__Image__Skeleton__h__
+#define __fpa__DataStructures__Image__Skeleton__h__
+
+#include <vector>
+#include <fpa/DataStructures/Graph.h>
+#include <fpa/DataStructures/Image/PolyLineParametricPath.h>
+
+namespace fpa
+{
+  namespace DataStructures
+  {
+    namespace Image
+    {
+      /**
+       */
+      template< unsigned int _VDim >
+      class Skeleton
+        : public fpa::DataStructures::Graph< typename fpa::DataStructures::Image::PolyLineParametricPath< _VDim >::TIndex, typename fpa::DataStructures::Image::PolyLineParametricPath< _VDim >::Pointer, typename fpa::DataStructures::Image::PolyLineParametricPath< _VDim >::TIndex, typename fpa::DataStructures::Image::PolyLineParametricPath< _VDim >::TIndex::LexicographicCompare >
+      {
+      public:
+        typedef fpa::DataStructures::Image::PolyLineParametricPath< _VDim > TPath;
+        typedef typename TPath::TIndex                TIndex;
+        typedef typename TIndex::LexicographicCompare TIndexCompare;
+        typedef typename TPath::Pointer               TPathPointer;
+
+        itkStaticConstMacro( Dimension, unsigned int, _VDim );
+
+        typedef fpa::DataStructures::Graph< TIndex, TPathPointer, TIndex, TIndexCompare > Superclass;
+        typedef Skeleton                        Self;
+        typedef itk::SmartPointer< Self >       Pointer;
+        typedef itk::SmartPointer< const Self > ConstPointer;
+
+      public:
+        itkNewMacro( Self );
+        itkTypeMacro( Skeleton, fpa::Image::Graph );
+
+      public:
+        void AddBranch( TPath* path );
+        const TPath* GetBranch( const TIndex& a, const TIndex& b ) const;
+
+        std::vector< TIndex > GetEndPoints( ) const;
+        std::vector< TIndex > GetBifurcations( ) const;
+
+      protected:
+        Skeleton( );
+        virtual ~Skeleton( );
+
+      private:
+        // Purposely not implemented
+        Skeleton( const Self& other );
+        Self& operator=( const Self& other );
+      };
+
+    } // ecapseman
+
+  } // ecapseman
+
+} // ecapseman
+
+#ifndef ITK_MANUAL_INSTANTIATION
+#  include <fpa/DataStructures/Image/Skeleton.hxx>
+#endif // ITK_MANUAL_INSTANTIATION
+#endif // __fpa__DataStructures__Image__Skeleton__h__
+
+// eof - $RCSfile$