-#include <ImageAlgorithms/SkeletonFilter.h>
-#include <cpInstances/Image.h>
-#include <cpInstances/Skeleton.h>
-
-#include <fpa/Image/SkeletonFilter.h>
-#include <itkImage.h>
-#include <vtkPolyData.h>
+#include "SkeletonFilter.h"
+#include <cpInstances/DataObjects/Image.h>
+#include <cpInstances/DataObjects/Skeleton.h>
// -------------------------------------------------------------------------
-fpaPluginsImageAlgorithms::SkeletonFilter::
+fpaPlugins_ImageAlgorithms::SkeletonFilter::
SkeletonFilter( )
: Superclass( )
{
- typedef cpInstances::Image _TImage;
- typedef cpInstances::Skeleton _TSkeleton;
- typedef cpPlugins::BaseObjects::DataObject _TData;
+ typedef cpPlugins::Pipeline::DataObject _TData;
+ typedef cpInstances::DataObjects::Image _TImage;
+ typedef cpInstances::DataObjects::Skeleton _TSkeleton;
this->_ConfigureInput< _TImage >( "Input", true, false );
this->_ConfigureInput< _TData >( "Seeds", true, false );
- this->_ConfigureOutput< _TSkeleton >( "Skeleton" );
- this->_ConfigureOutput< _TImage >( "Marks" );
+ this->_ConfigureOutput< _TSkeleton >( "Output" );
}
// -------------------------------------------------------------------------
-fpaPluginsImageAlgorithms::SkeletonFilter::
+fpaPlugins_ImageAlgorithms::SkeletonFilter::
~SkeletonFilter( )
{
}
// -------------------------------------------------------------------------
-void fpaPluginsImageAlgorithms::SkeletonFilter::
+void fpaPlugins_ImageAlgorithms::SkeletonFilter::
_GenerateData( )
{
- auto o = this->GetInputData( "Input" );
- cpPlugins_Demangle_Image_RealPixels_AllDims_1( o, _GD0 )
- this->_Error( "Invalid input image." );
+ /* TODO
+ typedef fpa::Image::MinimumSpanningTree< 2 > _TMST2;
+ typedef fpa::Image::MinimumSpanningTree< 3 > _TMST3;
+
+ auto mst2 = this->GetInputData< _TMST2 >( "MST" );
+ auto mst3 = this->GetInputData< _TMST3 >( "MST" );
+ if ( mst2 != NULL ) this->_GD0( mst2 );
+ else if( mst3 != NULL ) this->_GD0( mst3 );
+ else this->_Error( "Invalid input spanning tree." );
+ */
}
// -------------------------------------------------------------------------
template< class _TImage >
-void fpaPluginsImageAlgorithms::SkeletonFilter::
+void fpaPlugins_ImageAlgorithms::SkeletonFilter::
_GD0( _TImage* image )
{
- typedef fpa::Image::SkeletonFilter< _TImage > _TFilter;
- auto filter = this->_CreateITK< _TFilter >( );
- filter->SetInput( image );
-
- auto seeds = this->GetInputData< vtkPolyData >( "Seeds" );
- if( seeds != NULL )
- {
- typename _TImage::PointType pnt;
- typename _TImage::IndexType idx;
- unsigned int dim =
- ( _TImage::ImageDimension < 3 )? _TImage::ImageDimension: 3;
+ /* TODO
+ typedef typename _TMST::IndexType _TIndex;
+ typedef typename _TMST::TPath _TPath;
- 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 ];
+ // Get seeds
+ std::vector< _TIndex > seeds;
+ auto points = this->GetInputData< vtkPolyData >( "Seeds" );
+ if( points != NULL )
+ {
+ if( points->GetNumberOfPoints( ) < 2 )
+ this->_Error( "Not enough seeds (<2)." );
- if( image->TransformPhysicalPointToIndex( pnt, idx ) )
- filter->AddSeed( idx, 0 );
+ typename _TMST::PointType pnt;
+ typename _TMST::IndexType idx;
+ unsigned int dim =
+ ( _TMST::ImageDimension < 3 )? _TMST::ImageDimension: 3;
+ for( unsigned int i = 0; i < 2; ++i )
+ {
+ double buf[ 3 ];
+ points->GetPoint( i, buf );
+ pnt.Fill( 0 );
+ for( unsigned int d = 0; d < dim; ++d )
+ pnt[ d ] = buf[ d ];
+ if( mst->TransformPhysicalPointToIndex( pnt, idx ) )
+ seeds.push_back( idx );
- } // rof
+ } // rof
- } // fi
+ } // fi
- filter->Update( );
- this->GetOutput( "Skeleton" )->SetITK( filter->GetSkeleton( ) );
- this->GetOutput( "Marks" )->SetITK( filter->GetMarks( ) );
+ typename _TPath::Pointer path;
+ mst->GetPath( path, seeds[ 0 ], seeds[ 1 ] );
+ this->GetOutput( "Output" )->SetITK( path );
+ */
}
// eof - $RCSfile$