]> Creatis software - FrontAlgorithms.git/commitdiff
Almost...
authorLeonardo Florez-Valencia <florez-l@javeriana.edu.co>
Wed, 8 Apr 2015 03:24:50 +0000 (22:24 -0500)
committerLeonardo Florez-Valencia <florez-l@javeriana.edu.co>
Wed, 8 Apr 2015 03:24:50 +0000 (22:24 -0500)
appli/examples/example_Image_Dijkstra_EndPointDetection.cxx
lib/fpa/Image/DijkstraWithEndPointDetection.h
lib/fpa/Image/DijkstraWithEndPointDetection.hxx

index 070a3e832daa6814e6ea84e1421067224e5f740d..47585ad30327975306210ad1eb51fe2a5cd912c8 100644 (file)
@@ -139,12 +139,13 @@ int main( int argc, char* argv[] )
   filter->ThrowEventsOn( );
 
   // Go!
-  std::clock_t start = std::clock( );
+  std::time_t start, end;
+  std::time( &start );
   filter->Update( );
-  std::clock_t end = std::clock( );
+  std::time( &end );
   std::cout
     << "Extraction time = "
-    << ( double( end - start ) / double( CLOCKS_PER_SEC ) )
+    << std::difftime( end, start )
     << " s." << std::endl;
 
   /* TODO
@@ -210,12 +211,13 @@ void DistanceMap(
   dmap->SquaredDistanceOn( );
   dmap->UseImageSpacingOn( );
 
-  std::clock_t start = std::clock( );
+  std::time_t start, end;
+  std::time( &start );
   dmap->Update( );
-  std::clock_t end = std::clock( );
+  std::time( &end );
   std::cout
     << "Distance map time = "
-    << ( double( end - start ) / double( CLOCKS_PER_SEC ) )
+    << std::difftime( end, start )
     << " s." << std::endl;
 
   output = dmap->GetOutput( );
index ecf197d94be5acd803ab41196f4ef848f884e73e..881b8f8e56fb4bfd8824fa9e02a96fd4cea828a4 100644 (file)
@@ -25,6 +25,7 @@ namespace fpa
       typedef typename Superclass::TInputImage         TInputImage;
       typedef typename Superclass::TOutputImage        TOutputImage;
       typedef typename Superclass::TVertex             TVertex;
+      typedef typename Superclass::TVertexCompare      TVertexCompare;
       typedef typename Superclass::TValue              TValue;
       typedef typename Superclass::TResult             TResult;
       typedef typename Superclass::TCostFunction       TCostFunction;
index 2055cc416a5f0141ca924ddc96f394bed316f876..d8e344a26da44ca93c3c2f64d5bcb1516cdabde7 100644 (file)
@@ -2,6 +2,7 @@
 #define __FPA__IMAGE__DIJKSTRAWITHENDPOINTDETECTION__HXX__
 
 #include <vector>
+#include <set>
 #include <itkImageRegionConstIteratorWithIndex.h>
 
 // -------------------------------------------------------------------------
@@ -130,6 +131,7 @@ _AfterGenerateData( )
   label->FillBuffer( 0 );
 
   // Prepare an object to hold marks
+  std::set< TVertex, TVertexCompare > tree_marks;
   /* TODO
      typename TMarkImage::Pointer marks = this->GetOutputMarkImage( );
      marks->FillBuffer( 0 );
@@ -143,7 +145,7 @@ _AfterGenerateData( )
   std::map< TLabel, std::pair< TVertex, TVertex > > branches;
   for( ; cIt != this->m_Candidates.rend( ); ++cIt )
   {
-    // If pixel hasn't been visited, continue
+    // If pixel has been already labelled, pass
     TVertex v = cIt->second;
     if( label->GetPixel( v ) != 0 )
       continue;
@@ -166,7 +168,7 @@ _AfterGenerateData( )
 
     } // rof
 
-    // Keep endpoint
+    // Re-check labelling
     if( label->GetPixel( max_vertex ) != 0 )
       continue;
     this->m_EndPoints.push_back( max_vertex );
@@ -188,34 +190,29 @@ _AfterGenerateData( )
         );
       if( start )
       {
-        TLabel lbl = label->GetPixel( *pIt );
-        if( lbl == 0 || lbl == this->m_NumberOfBranches )
+        if( tree_marks.find( *pIt ) == tree_marks.end( ) )
         {
+          tree_marks.insert( *pIt );
+
           // Mark a sphere around current point as visited
           double dist = std::sqrt( double( input->GetPixel( *pIt ) ) );
-          region = this->_Region( max_vertex, dist * double( 1.1 ) );
+          region = this->_Region( max_vertex, dist * double( 1.5 ) );
           itk::ImageRegionIteratorWithIndex< TLabelImage >
             lIt( label, region );
           for( lIt.GoToBegin( ); !lIt.IsAtEnd( ); ++lIt )
-          {
-            if( lIt.Get( ) == 0 )
-              lIt.Set( this->m_NumberOfBranches );
-
-          } // rof
+            lIt.Set( this->m_NumberOfBranches );
 
           // Next vertex in current path
           // TODO: this->InvokeEvent( TBacktrackingEvent( max_vertex, this->m_NumberOfBranches ) );
           /*
             this->m_FullTree[ max_vertex ] =
             TTreeNode( this->_Parent( max_vertex ), this->m_NumberOfBranches );
-            std::cout << "New: " << this->m_NumberOfBranches << std::endl;
           */
         }
         else
         {
           // A bifurcation point has been reached!
           branches[ this->m_NumberOfBranches ] = std::pair< TVertex, TVertex >( last_start, *pIt );
-          std::cout << "bif " << this->m_NumberOfBranches << std::endl;
           last_start = *pIt;
           this->m_BifurcationPoints.push_back( *pIt );
           this->m_NumberOfBranches++;
@@ -235,7 +232,7 @@ _AfterGenerateData( )
         {
           // Mark a sphere around current point as visited
           double dist = std::sqrt( double( input->GetPixel( max_vertex ) ) );
-          region = this->_Region( max_vertex, dist * double( 1.1 ) );
+          region = this->_Region( max_vertex, dist * double( 1.5 ) );
           itk::ImageRegionIteratorWithIndex< TLabelImage >
             lIt( label, region );
           for( lIt.GoToBegin( ); !lIt.IsAtEnd( ); ++lIt )
@@ -248,14 +245,12 @@ _AfterGenerateData( )
              TTreeNode( this->_Parent( max_vertex ), this->m_NumberOfBranches );
           */
           change = true;
-          // std::cout << "Change: " << this->m_NumberOfBranches << std::endl;
         }
         else
         {
           // A bifurcation point has been reached!
           // TODO: this->m_BifurcationPoints.push_back( max_vertex );
           branches[ this->m_NumberOfBranches ] = std::pair< TVertex, TVertex >( last_start, *pIt );
-          std::cout << "change " << this->m_NumberOfBranches << std::endl;
 
           last_start = *pIt;
           this->m_NumberOfBranches++;
@@ -263,7 +258,6 @@ _AfterGenerateData( )
              this->m_FullTree[ max_vertex ] =
              TTreeNode( this->_Parent( max_vertex ), this->m_NumberOfBranches );
           */
-          // std::cout << "Change bifurcation: " << this->m_NumberOfBranches << std::endl;
 
         } // fi
 
@@ -282,20 +276,23 @@ _AfterGenerateData( )
 
   } // rof
 
-  std::cout << this->m_NumberOfBranches << " " << branches.size( ) << std::endl;
-  std::cout << this->m_EndPoints.size( ) << " " << this->m_BifurcationPoints.size( ) << std::endl;
-
-
   // Re-enumerate labels
-  /*
   std::map< TLabel, unsigned long > histo;
   for(
-    typename TTree::iterator treeIt = this->m_FullTree.begin( );
-    treeIt != this->m_FullTree.end( );
+    typename std::set< TVertex, TVertexCompare >::iterator treeIt = tree_marks.begin( );
+    treeIt != tree_marks.end( );
     ++treeIt
     )
-    histo[ treeIt->second.second ]++;
+    histo[ label->GetPixel( *treeIt ) ]++;
+
+  for(
+    typename std::map< TLabel, unsigned long >::iterator hIt = histo.begin( );
+    hIt != histo.end( );
+    ++hIt
+    )
+    std::cout << hIt->first << " " << hIt->second << std::endl;
 
+  /*
   std::map< TMark, TMark > changes;
   TMark last_change = 1;
   for( TMark i = 1; i <= this->m_NumberOfBranches; ++i )