1 #include <Plugins/SkeletonFilter.h>
2 #include <cpPlugins/DataObjects/Image.h>
3 #include <cpPlugins/DataObjects/Image_Demanglers.h>
4 #include <cpPlugins/DataObjects/Skeleton.h>
6 #include <fpa/Image/SkeletonFilter.h>
8 #include <vtkPolyData.h>
10 // -------------------------------------------------------------------------
11 fpaPlugins::SkeletonFilter::
15 typedef cpPlugins::DataObjects::Image _TImage;
16 typedef cpPlugins::DataObjects::Skeleton _TSkeleton;
17 typedef cpPlugins::BaseObjects::DataObject _TData;
19 this->_ConfigureInput< _TImage >( "Input", true, false );
20 this->_ConfigureInput< _TData >( "Seeds", true, false );
21 this->_ConfigureOutput< _TSkeleton >( "Skeleton" );
22 this->_ConfigureOutput< _TImage >( "Marks" );
25 // -------------------------------------------------------------------------
26 fpaPlugins::SkeletonFilter::
31 // -------------------------------------------------------------------------
32 void fpaPlugins::SkeletonFilter::
35 auto o = this->GetInputData( "Input" );
36 cpPlugins_Demangle_Image_RealPixels_AllDims_1( o, _GD0 )
37 this->_Error( "Invalid input image." );
40 // -------------------------------------------------------------------------
41 template< class _TImage >
42 void fpaPlugins::SkeletonFilter::
43 _GD0( _TImage* image )
45 typedef fpa::Image::SkeletonFilter< _TImage > _TFilter;
46 auto filter = this->_CreateITK< _TFilter >( );
47 filter->SetInput( image );
49 auto seeds = this->GetInputData< vtkPolyData >( "Seeds" );
52 typename _TImage::PointType pnt;
53 typename _TImage::IndexType idx;
55 ( _TImage::ImageDimension < 3 )? _TImage::ImageDimension: 3;
57 for( int i = 0; i < seeds->GetNumberOfPoints( ); ++i )
60 seeds->GetPoint( i, buf );
62 for( unsigned int d = 0; d < dim; ++d )
65 if( image->TransformPhysicalPointToIndex( pnt, idx ) )
66 filter->AddSeed( idx, 0 );
73 this->GetOutput( "Skeleton" )->SetITK( filter->GetSkeleton( ) );
74 this->GetOutput( "Marks" )->SetITK( filter->GetMarks( ) );