#include "ImageDijkstra.h"
#include <cpPlugins/Interface/Image.h>
-#include <cpPlugins/Interface/PointList.h>
#include <fpaPlugins/MinimumSpanningTree.h>
#include <fpa/Image/Dijkstra.h>
-#include <fpa/VTK/Image2DObserver.h>
-#include <fpa/VTK/Image3DObserver.h>
#include <fpa/Base/Functors/InvertCostFunction.h>
-#include <vtkRenderWindow.h>
-#include <vtkRenderWindowInteractor.h>
-
// -------------------------------------------------------------------------
fpaPlugins::ImageDijkstra::
ImageDijkstra( )
: Superclass( )
{
- this->_AddInput( "Input" );
- this->_AddInput( "Seeds" );
- this->_AddOutput< cpPlugins::Interface::Image >( "Output" );
this->_AddOutput< fpaPlugins::MinimumSpanningTree >( "MinimumSpanningTree" );
-
- this->m_Parameters->ConfigureAsBool( "VisualDebug" );
- this->m_Parameters->ConfigureAsBool( "StopAtOneFront" );
- this->m_Parameters->SetBool( "VisualDebug", false );
- this->m_Parameters->SetBool( "StopAtOneFront", false );
-
- std::vector< std::string > orders;
- orders.push_back( "1" );
- orders.push_back( "2" );
- this->m_Parameters->ConfigureAsChoices( "NeighborhoodOrder", orders );
- this->m_Parameters->SetSelectedChoice( "NeighborhoodOrder", "1" );
}
// -------------------------------------------------------------------------
{
auto input =
this->GetInputData< cpPlugins::Interface::Image >( "Input" );
- if( input == NULL )
- return( "fpaPlugins::ImageDijkstra: No input image." );
-
itk::DataObject* image = NULL;
std::string r = "";
cpPlugins_Image_Demangle_AllScalarTypes( 2, input, image, r, _GD0 );
typedef fpa::Image::Dijkstra< I, _TOut > _TFilter;
typedef typename _TFilter::TResult _TCost;
typedef fpa::Base::Functors::InvertCostFunction< _TCost > _TCostFunctor;
- typedef typename I::PointType _TPoint;
typedef typename _TFilter::TMinimumSpanningTree _TMST;
- auto seeds =
- this->GetInputData< cpPlugins::Interface::PointList >( "Seeds" );
- if( seeds == NULL )
- return( "fpaPlugins::ImageRegionGrow: No given seeds." );
- I* image = dynamic_cast< I* >( data );
-
- // Create filter and connect input
- _TFilter* filter = this->_CreateITK< _TFilter >( );
- filter->SetInput( image );
+ // Create filter
+ _TFilter* filter = this->_ConfigureFilter< _TFilter >( );
// Connect cost functor
typename _TCostFunctor::Pointer functor = _TCostFunctor::New( );
filter->SetConversionFunction( functor );
- // Set numeric parameters
- Superclass::TParameters* params = this->m_Parameters;
- std::string order = params->GetSelectedChoice( "NeighborhoodOrder" );
- filter->SetNeighborhoodOrder( order[ 0 ] - '0' );
- filter->SetStopAtOneFront( params->GetBool( "StopAtOneFront" ) );
-
- // Assign seeds
- filter->ClearSeeds( );
- for( unsigned int s = 0; s < seeds->GetNumberOfPoints( ); ++s )
- {
- _TPoint pnt = seeds->GetPoint< _TPoint >( s );
- typename I::IndexType idx;
- if( image->TransformPhysicalPointToIndex( pnt, idx ) )
- filter->AddSeed( idx, 0 );
-
- } // rof
-
// Go!!!
- this->_ConfigureDebugger( filter );
- filter->Update( );
- this->_DeconfigureDebugger( filter );
+ this->_ExecuteFilter( filter );
- // Connect output
- auto out =
- this->GetOutputData< cpPlugins::Interface::Image >( "Output" );
+ // Connect remaining output
auto mst =
this->GetOutputData< fpaPlugins::MinimumSpanningTree >( "MinimumSpanningTree" );
- if( out != NULL )
- out->SetITK< _TOut >( filter->GetOutput( ) );
- else
- return( "fpaPlugins::ImageDijkstra: output not correctly created." );
-
- if( mst != NULL )
- {
- mst->SetITK< _TMST >( filter->GetMinimumSpanningTree( ) );
- return( "" );
- }
- else
- return( "fpaPlugins::ImageDijkstra: minimum spanning tree." );
+ mst->SetITK( filter->GetMinimumSpanningTree( ) );
+ return( "" );
}
// eof - $RCSfile$