1 #include <ImageAlgorithms/SkeletonFilter.h>
2 #include <cpInstances/DataObjects/Image.h>
3 #include <cpInstances/DataObjects/Skeleton.h>
8 #include <fpa/Image/SkeletonFilter.h>
9 #include <vtkPolyData.h>
12 // -------------------------------------------------------------------------
13 fpaPluginsImageAlgorithms::SkeletonFilter::
17 typedef cpInstances::DataObjects::Image _TImage;
18 typedef cpInstances::DataObjects::Skeleton _TSkeleton;
19 typedef cpPlugins::Pipeline::DataObject _TData;
21 this->_ConfigureInput< _TImage >( "Input", true, false );
22 this->_ConfigureInput< _TData >( "Seeds", true, false );
23 this->_ConfigureOutput< _TSkeleton >( "Skeleton" );
24 this->_ConfigureOutput< _TImage >( "Marks" );
27 // -------------------------------------------------------------------------
28 fpaPluginsImageAlgorithms::SkeletonFilter::
33 // -------------------------------------------------------------------------
34 void fpaPluginsImageAlgorithms::SkeletonFilter::
37 auto o = this->GetInputData( "Input" );
38 cpPlugins_Demangle_Image_RealPixels_AllDims_1( o, _GD0 )
39 this->_Error( "Invalid input image." );
42 // -------------------------------------------------------------------------
43 template< class _TImage >
44 void fpaPluginsImageAlgorithms::SkeletonFilter::
45 _GD0( _TImage* image )
48 typedef fpa::Image::SkeletonFilter< _TImage > _TFilter;
49 auto filter = this->_CreateITK< _TFilter >( );
50 filter->SetInput( image );
52 auto seeds = this->GetInputData< vtkPolyData >( "Seeds" );
55 typename _TImage::PointType pnt;
56 typename _TImage::IndexType idx;
58 ( _TImage::ImageDimension < 3 )? _TImage::ImageDimension: 3;
60 for( int i = 0; i < seeds->GetNumberOfPoints( ); ++i )
63 seeds->GetPoint( i, buf );
65 for( unsigned int d = 0; d < dim; ++d )
68 if( image->TransformPhysicalPointToIndex( pnt, idx ) )
69 filter->AddSeed( idx, 0 );
76 this->GetOutput( "Skeleton" )->SetITK( filter->GetSkeleton( ) );
77 this->GetOutput( "Marks" )->SetITK( filter->GetMarks( ) );