1 // =========================================================================
2 // @author Leonardo Florez Valencia
3 // @email florez-l@javeriana.edu.co
4 // =========================================================================
5 #ifndef __fpa__Filters__Image__ExtractAxis__hxx__
6 #define __fpa__Filters__Image__ExtractAxis__hxx__
8 #include <itkSignedMaurerDistanceMapImageFilter.h>
9 #include <fpa/Functors/Dijkstra/Invert.h>
11 // -------------------------------------------------------------------------
12 template< class _TInputImage, class _TScalar >
14 fpa::Filters::Image::ExtractAxis< _TInputImage, _TScalar >::
17 itk::ModifiedTimeType a = this->Superclass::GetMTime( );
18 itk::ModifiedTimeType b = this->m_Centerness->GetMTime( );
19 itk::ModifiedTimeType c = this->m_Dijkstra->GetMTime( );
21 return( ( a < c )? a: c );
24 // -------------------------------------------------------------------------
25 template< class _TInputImage, class _TScalar >
26 void fpa::Filters::Image::ExtractAxis< _TInputImage, _TScalar >::
27 AddSeed( const TIndex& seed )
29 this->m_Dijkstra->AddSeed( seed );
32 // -------------------------------------------------------------------------
33 template< class _TInputImage, class _TScalar >
34 void fpa::Filters::Image::ExtractAxis< _TInputImage, _TScalar >::
35 AddSeed( const TPoint& seed )
37 this->m_Dijkstra->AddSeed( seed );
40 // -------------------------------------------------------------------------
41 template< class _TInputImage, class _TScalar >
42 void fpa::Filters::Image::ExtractAxis< _TInputImage, _TScalar >::
45 this->m_Dijkstra->ClearSeeds( );
48 // -------------------------------------------------------------------------
49 template< class _TInputImage, class _TScalar >
50 void fpa::Filters::Image::ExtractAxis< _TInputImage, _TScalar >::
51 SetInput( TInputImage* input )
53 this->Superclass::SetNthInput( 0, input );
56 // -------------------------------------------------------------------------
57 template< class _TInputImage, class _TScalar >
58 typename fpa::Filters::Image::ExtractAxis< _TInputImage, _TScalar >::
59 TInputImage* fpa::Filters::Image::ExtractAxis< _TInputImage, _TScalar >::
62 return( dynamic_cast< TInputImage* >( this->Superclass::GetInput( 0 ) ) );
65 // -------------------------------------------------------------------------
66 template< class _TInputImage, class _TScalar >
67 const typename fpa::Filters::Image::ExtractAxis< _TInputImage, _TScalar >::
68 TInputImage* fpa::Filters::Image::ExtractAxis< _TInputImage, _TScalar >::
72 dynamic_cast< const TInputImage* >( this->Superclass::GetInput( 0 ) )
76 // -------------------------------------------------------------------------
77 template< class _TInputImage, class _TScalar >
78 typename fpa::Filters::Image::ExtractAxis< _TInputImage, _TScalar >::
79 TPath* fpa::Filters::Image::ExtractAxis< _TInputImage, _TScalar >::
82 return( dynamic_cast< TPath* >( this->Superclass::GetOutput( 0 ) ) );
85 // -------------------------------------------------------------------------
86 template< class _TInputImage, class _TScalar >
87 const typename fpa::Filters::Image::ExtractAxis< _TInputImage, _TScalar >::
88 TPath* fpa::Filters::Image::ExtractAxis< _TInputImage, _TScalar >::
91 return( dynamic_cast< const TPath* >( this->Superclass::GetOutput( 0 ) ) );
94 // -------------------------------------------------------------------------
95 template< class _TInputImage, class _TScalar >
96 fpa::Filters::Image::ExtractAxis< _TInputImage, _TScalar >::
101 this->SetNumberOfRequiredInputs( 1 );
102 this->SetNumberOfRequiredOutputs( 1 );
103 this->SetNthOutput( 0, TPath::New( ) );
105 // Prepare weight function
106 typedef fpa::Functors::Dijkstra::Invert< TScalar > _TWeight;
107 typename _TWeight::Pointer weight = _TWeight::New( );
108 weight->SetAlpha( 1 );
109 weight->SetBeta( 1 );
112 typedef itk::SignedMaurerDistanceMapImageFilter< TInputImage, TScalarImage > _TDefaultCenterness;
113 typename _TDefaultCenterness::Pointer dc = _TDefaultCenterness::New( );
114 dc->InsideIsPositiveOn( );
115 dc->SquaredDistanceOn( );
116 dc->UseImageSpacingOn( );
117 this->m_Centerness = dc;
120 this->m_Dijkstra = TDijkstra::New( );
121 this->m_Dijkstra->SetWeightFunction( weight );
122 this->m_Dijkstra->StopAtOneFront( );
125 // -------------------------------------------------------------------------
126 template< class _TInputImage, class _TScalar >
127 fpa::Filters::Image::ExtractAxis< _TInputImage, _TScalar >::
132 // -------------------------------------------------------------------------
133 template< class _TInputImage, class _TScalar >
134 void fpa::Filters::Image::ExtractAxis< _TInputImage, _TScalar >::
137 // Execute minipipeline
138 this->m_Centerness->SetInput( this->GetInput( ) );
139 this->m_Dijkstra->SetInput( this->m_Centerness->GetOutput( ) );
140 this->m_Dijkstra->Update( );
143 typename TPath::Pointer out = this->GetOutput( );
144 this->m_Dijkstra->GetMinimumSpanningTree( )->GetPath(
145 out, this->m_StartIndex, this->m_EndIndex
149 #endif // __fpa__Filters__Image__ExtractAxis__hxx__