]> Creatis software - FrontAlgorithms.git/blobdiff - plugins/RegionGrowFunctors/BinaryThreshold.cxx
...
[FrontAlgorithms.git] / plugins / RegionGrowFunctors / BinaryThreshold.cxx
index 05010ab4974efd39bdf28d082e29b491dcbe711e..3a4da319d5356fec385fcabb4857ed9fbbcdd200 100644 (file)
@@ -1,7 +1,7 @@
 #include <RegionGrowFunctors/BinaryThreshold.h>
-#include <cpInstances/Image.h>
+#include <cpInstances/DataObjects/Image.h>
 
-#include <fpa/Image/Functors/RegionGrowBinaryThreshold.h>
+#include <fpa/Image/Functors/RegionGrow/BinaryThreshold.h>
 #include <itkConstNeighborhoodIterator.h>
 #include <vtkPolyData.h>
 
@@ -10,16 +10,16 @@ fpaPluginsRegionGrowFunctors::BinaryThreshold::
 BinaryThreshold( )
   : Superclass( )
 {
-  typedef cpPlugins::BaseObjects::DataObject _TData;
-  typedef cpInstances::Image _TImage;
+  typedef cpPlugins::Pipeline::DataObject _TData;
+  typedef cpInstances::DataObjects::Image _TImage;
 
   this->_ConfigureInput< _TImage >( "Input", true, false );
   this->_ConfigureInput< _TData >( "Seeds", false, false );
   this->_ConfigureOutput< _TData >( "Output" );
 
   this->m_Parameters.ConfigureAsUint( "Radius", 1 );
-  this->m_Parameters.ConfigureAsReal( "LowerThreshold", 0 );
-  this->m_Parameters.ConfigureAsReal( "UpperThreshold", 0 );
+  this->m_Parameters.ConfigureAsReal( "Lower", 0 );
+  this->m_Parameters.ConfigureAsReal( "Upper", 0 );
 }
 
 // -------------------------------------------------------------------------
@@ -42,76 +42,84 @@ template< class _TImage >
 void fpaPluginsRegionGrowFunctors::BinaryThreshold::
 _GD0( _TImage* image )
 {
-  typedef itk::ConstNeighborhoodIterator< _TImage > _TInIt;
-  typedef
-    fpa::Image::Functors::RegionGrowBinaryThreshold< _TImage >
-    _TFunctor;
-  auto out = this->GetOutput( "Output" );
-  auto f = out->GetITK< _TFunctor >( );
-  if( f == NULL )
-  {
-    typename _TFunctor::Pointer ptr_f = _TFunctor::New( );
-    f = ptr_f.GetPointer( );
-    out->SetITK( f );
-
-  } // fi
-
-  // Compute thresholds from seeds
-  auto seeds = this->GetInputData< vtkPolyData >( "Seeds" );
-  if( seeds != NULL )
-  {
-    std::vector< typename _TImage::IndexType > indices;
-    typename _TImage::PointType pnt;
-    typename _TImage::IndexType idx;
-    unsigned int dim =
-      ( _TImage::ImageDimension < 3 )? _TImage::ImageDimension: 3;
-
-    for( int i = 0; i < seeds->GetNumberOfPoints( ); ++i )
-    {
-      double buf[ 3 ];
-      seeds->GetPoint( i, buf );
-      pnt.Fill( 0 );
-      for( unsigned int d = 0; d < dim; ++d )
-        pnt[ d ] = buf[ d ];
-      if( image->TransformPhysicalPointToIndex( pnt, idx ) )
-        indices.push_back( idx );
-
-    } // rof
-
-    typename _TImage::SizeType r;
-    r.Fill( this->m_Parameters.GetUint( "Radius" ) );
-    _TInIt iIt( r, image, image->GetRequestedRegion( ) );
-    double v_s1 = double( 0 );
-    double v_s2 = double( 0 );
-    double v_n = double( 0 );
-    double v_min = std::numeric_limits< double >::max( );
-    double v_max = -v_min;
-    for( auto idxIt = indices.begin( ); idxIt != indices.end( ); ++idxIt )
-    {
-      iIt.SetLocation( *idxIt );
-      for( unsigned int i = 0; i < iIt.Size( ); ++i )
-      {
-        double v = double( iIt.GetPixel( i ) );
-        v_s1 += v;
-        v_s2 += v * v;
-        v_n += double( 1 );
-        v_min = ( v < v_min )? v: v_min;
-        v_max = ( v_max < v )? v: v_max;
-
-      } // rof
-
-    } // rof
-    double s = ( v_s2 - ( ( v_s1 * v_s1 ) / v_n ) ) / ( v_n - double( 1 ) );
-    s = std::sqrt( s ) / double( 2 );
-    f->SetLowerThreshold( v_min );
-    f->SetUpperThreshold( v_max );
-  }
-  else
-  {
-    f->SetLowerThreshold( this->m_Parameters.GetReal( "LowerThreshold" ) );
-    f->SetUpperThreshold( this->m_Parameters.GetReal( "UpperThreshold" ) );
-
-  } // fi
+  /* TODO
+     typedef itk::ConstNeighborhoodIterator< _TImage > _TInIt;
+     typedef
+     fpa::Image::Functors::RegionGrow::BinaryThreshold< _TImage >
+     _TFunctor;
+     auto out = this->GetOutput( "Output" );
+     auto f = out->GetITK< _TFunctor >( );
+     if( f == NULL )
+     {
+     typename _TFunctor::Pointer ptr_f = _TFunctor::New( );
+     f = ptr_f.GetPointer( );
+     out->SetITK( f );
+
+     } // fi
+
+     // Compute thresholds from seeds
+     auto seeds = this->GetInputData< vtkPolyData >( "Seeds" );
+     if( seeds != NULL )
+     {
+     std::vector< typename _TImage::IndexType > indices;
+     typename _TImage::PointType pnt;
+     typename _TImage::IndexType idx;
+     unsigned int dim =
+     ( _TImage::ImageDimension < 3 )? _TImage::ImageDimension: 3;
+
+     for( int i = 0; i < seeds->GetNumberOfPoints( ); ++i )
+     {
+     double buf[ 3 ];
+     seeds->GetPoint( i, buf );
+     pnt.Fill( 0 );
+     for( unsigned int d = 0; d < dim; ++d )
+     pnt[ d ] = buf[ d ];
+     if( image->TransformPhysicalPointToIndex( pnt, idx ) )
+     indices.push_back( idx );
+
+     } // rof
+
+     typename _TImage::SizeType r;
+     r.Fill( this->m_Parameters.GetUint( "Radius" ) );
+
+     _TInIt iIt( r, image, image->GetRequestedRegion( ) );
+     double v_s1 = double( 0 );
+     double v_s2 = double( 0 );
+     double v_n = double( 0 );
+     double v_min = std::numeric_limits< double >::max( );
+     double v_max = -v_min;
+     for( auto idxIt = indices.begin( ); idxIt != indices.end( ); ++idxIt )
+     {
+     iIt.SetLocation( *idxIt );
+     for( unsigned int i = 0; i < iIt.Size( ); ++i )
+     {
+     double v = double( iIt.GetPixel( i ) );
+     v_s1 += v;
+     v_s2 += v * v;
+     v_n += double( 1 );
+     v_min = ( v < v_min )? v: v_min;
+     v_max = ( v_max < v )? v: v_max;
+
+     } // rof
+
+     } // rof
+     double m = v_s1 / v_n;
+     double s = ( v_s2 - ( ( v_s1 * v_s1 ) / v_n ) ) / ( v_n - double( 1 ) );
+     s = std::sqrt( s );
+     v_min = m - s;
+     v_max = m + s;
+     f->SetLower( v_min );
+     f->SetUpper( v_max );
+     this->m_Parameters.SetReal( "Lower", f->GetLower( ) );
+     this->m_Parameters.SetReal( "Upper", f->GetUpper( ) );
+     }
+     else
+     {
+     f->SetLower( this->m_Parameters.GetReal( "Lower" ) );
+     f->SetUpper( this->m_Parameters.GetReal( "Upper" ) );
+
+     } // fi
+  */
 }
 
 // eof - $RCSfile$