]> Creatis software - FrontAlgorithms.git/blobdiff - plugins/ImageAlgorithms/MoriRegionGrow.cxx
...
[FrontAlgorithms.git] / plugins / ImageAlgorithms / MoriRegionGrow.cxx
index 4d23ecfd51bec979e51729eebaf8547d9516eece..f8e323c1509b5b437d479af86af7559975f4ef9c 100644 (file)
@@ -9,13 +9,18 @@ MoriRegionGrow( )
   : Superclass( )
 {
   typedef cpPlugins::Pipeline::DataObject _TData;
+  typedef cpInstances::DataObjects::Image _TImage;
+
+  this->_ConfigureInput< _TImage >( "Input", true, false );
+  this->_ConfigureInput< _TData >( "Seed", true, false );
+  this->_ConfigureOutput< _TImage >( "Output" );
+  this->_ConfigureOutput< _TImage >( "AuxiliaryOutput" );
 
   this->m_Parameters.ConfigureAsInt( "InsideValue", 1 );
   this->m_Parameters.ConfigureAsInt( "OutsideValue", 0 );
   this->m_Parameters.ConfigureAsReal( "Step", 1 );
   this->m_Parameters.ConfigureAsReal( "Lower", 0 );
   this->m_Parameters.ConfigureAsReal( "Upper", 1 );
-  this->m_Parameters.ConfigureAsReal( "Sensitivity", 1 );
   this->m_Parameters.ConfigureAsIntTypesChoices( "ResultType" );
 }
 
@@ -62,15 +67,41 @@ _GD1( _TInputImage* image )
   typedef fpa::Image::MoriRegionGrow< _TInputImage, _TOutputImage > _TFilter;
 
   auto filter = this->_CreateITK< _TFilter >( );
-  this->_ConfigureFilter( filter, image );
+  filter->SetInput( image );
   filter->SetInsideValue( this->m_Parameters.GetInt( "InsideValue" ) );
   filter->SetOutsideValue( this->m_Parameters.GetInt( "OutsideValue" ) );
   filter->SetStep( this->m_Parameters.GetReal( "Step" ) );
   filter->SetLower( this->m_Parameters.GetReal( "Lower" ) );
   filter->SetUpper( this->m_Parameters.GetReal( "Upper" ) );
-  filter->SetSensitivity( this->m_Parameters.GetReal( "Sensitivity" ) );
+
+  // Assign seed
+  auto seeds = this->GetInputData< vtkPolyData >( "Seed" );
+  if( seeds != NULL )
+  {
+    typename _TInputImage::PointType pnt;
+    typename _TInputImage::IndexType idx;
+    unsigned int dim =
+      ( _TInputImage::ImageDimension < 3 )? _TInputImage::ImageDimension: 3;
+    if( seeds->GetNumberOfPoints( ) > 0 )
+    {
+      double buf[ 3 ];
+      seeds->GetPoint( 0, buf );
+      pnt.Fill( 0 );
+      for( unsigned int d = 0; d < dim; ++d )
+        pnt[ d ] = buf[ d ];
+
+      if( image->TransformPhysicalPointToIndex( pnt, idx ) )
+        filter->SetSeed( idx );
+    }
+    else
+      this->_Error( "No given seeds." );
+  }
+  else
+    this->_Error( "No given seeds." );
+
   filter->Update( );
   this->GetOutput( "Output" )->SetITK( filter->GetOutput( ) );
+  this->GetOutput( "AuxiliaryOutput" )->SetITK( filter->GetAuxiliaryImage( ) );
 }
 
 // eof - $RCSfile$