1 // =========================================================================
2 // @author Leonardo Florez Valencia
3 // @email florez-l@javeriana.edu.co
4 // =========================================================================
6 #ifndef __fpa__Image__ExtractAxisFilter__hxx__
7 #define __fpa__Image__ExtractAxisFilter__hxx__
9 #include <fpa/Image/Functors/Dijkstra/Invert.h>
11 // -------------------------------------------------------------------------
12 template< class _TInputImage, class _TScalar, class _TCenterness >
14 fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >::
17 itk::ModifiedTimeType a = this->Superclass::GetMTime( );
18 itk::ModifiedTimeType b = this->m_Centerness->GetMTime( );
19 itk::ModifiedTimeType c = this->m_Dijsktra->GetMTime( );
21 return( ( a < c )? a: c );
24 // -------------------------------------------------------------------------
25 template< class _TInputImage, class _TScalar, class _TCenterness >
26 void fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >::
27 AddSeed( const TVertex& seed )
29 this->m_Dijkstra->AddSeed( seed );
32 // -------------------------------------------------------------------------
33 template< class _TInputImage, class _TScalar, class _TCenterness >
34 void fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >::
35 AddSeed( const TPoint& seed )
37 this->m_Dijkstra->AddSeed( seed );
40 // -------------------------------------------------------------------------
41 template< class _TInputImage, class _TScalar, class _TCenterness >
42 void fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >::
45 this->m_Dijkstra->ClearSeeds( );
48 // -------------------------------------------------------------------------
49 template< class _TInputImage, class _TScalar, class _TCenterness >
50 void fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >::
51 SetInput( TInputImage* input )
53 this->Superclass::SetNthInput( 0, input );
56 // -------------------------------------------------------------------------
57 template< class _TInputImage, class _TScalar, class _TCenterness >
59 fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >::
61 fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >::
64 return( dynamic_cast< TInputImage* >( this->Superclass::GetInput( 0 ) ) );
67 // -------------------------------------------------------------------------
68 template< class _TInputImage, class _TScalar, class _TCenterness >
70 fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >::
72 fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >::
76 dynamic_cast< const TInputImage* >( this->Superclass::GetInput( 0 ) )
80 // -------------------------------------------------------------------------
81 template< class _TInputImage, class _TScalar, class _TCenterness >
83 fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >::
85 fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >::
88 return( dynamic_cast< TPath* >( this->Superclass::GetOutput( 0 ) ) );
91 // -------------------------------------------------------------------------
92 template< class _TInputImage, class _TScalar, class _TCenterness >
94 fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >::
96 fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >::
99 return( dynamic_cast< const TPath* >( this->Superclass::GetOutput( 0 ) ) );
102 // -------------------------------------------------------------------------
103 template< class _TInputImage, class _TScalar, class _TCenterness >
104 fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >::
109 this->SetNumberOfRequiredInputs( 1 );
110 this->SetNumberOfRequiredOutputs( 1 );
111 this->SetNthOutput( 0, TPath::New( ) );
113 // Prepare weight function
114 typedef fpa::Image::Functors::Dijkstra::Invert< TOutputImage, TScalar > _TWeight;
115 typename _TWeight::Pointer weight = _TWeight::New( );
116 weight->SetAlpha( 1 );
117 weight->SetBeta( 1 );
120 this->m_Centerness = TCenterness::New( );
121 this->m_Dijkstra = TDijkstra::New( );
122 this->m_Dijkstra->SetWeightFunction( weight );
123 this->m_Dijkstra->StopAtOneFront( );
126 // -------------------------------------------------------------------------
127 template< class _TInputImage, class _TScalar, class _TCenterness >
128 fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >::
129 ~ExtractAxisFilter( )
133 // -------------------------------------------------------------------------
134 template< class _TInputImage, class _TScalar, class _TCenterness >
135 void fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >::
138 // Execute minipipeline
139 this->m_Centerness->SetInput( this->GetInput( ) );
140 this->m_Dijkstra->SetInput( this->m_Centerness->GetOutput( ) );
141 this->m_Dijkstra->Update( );
144 typename TInputImage::IndexType a = this->m_Dijkstra->GetSeeds( )[ 0 ];
145 typename TInputImage::IndexType b = this->m_Dijkstra->GetSeeds( )[ 1 ];
146 this->m_Dijkstra->GetMinimumSpanningTree( )->GetPolyLineParametricPath( this->GetOutput( ), a, b );
149 #endif // __fpa__Image__ExtractAxisFilter__hxx__