]> Creatis software - FrontAlgorithms.git/blob - lib/fpa/Image/ExtractAxisFilter.hxx
...
[FrontAlgorithms.git] / lib / fpa / Image / ExtractAxisFilter.hxx
1 // =========================================================================
2 // @author Leonardo Florez Valencia
3 // @email florez-l@javeriana.edu.co
4 // =========================================================================
5
6 #ifndef __fpa__Image__ExtractAxisFilter__hxx__
7 #define __fpa__Image__ExtractAxisFilter__hxx__
8
9 #include <fpa/Image/Functors/Dijkstra/Invert.h>
10
11 // -------------------------------------------------------------------------
12 template< class _TInputImage, class _TScalar, class _TCenterness >
13 itk::ModifiedTimeType 
14 fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >::
15 GetMTime( ) const
16 {
17   itk::ModifiedTimeType a = this->Superclass::GetMTime( );
18   itk::ModifiedTimeType b = this->m_Centerness->GetMTime( );
19   itk::ModifiedTimeType c = this->m_Dijsktra->GetMTime( );
20   a = ( a < b )? a: b;
21   return( ( a < c )? a: c );
22 }
23
24 // -------------------------------------------------------------------------
25 template< class _TInputImage, class _TScalar, class _TCenterness >
26 void fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >::
27 AddSeed( const TVertex& seed )
28 {
29   this->m_Dijkstra->AddSeed( seed );
30 }
31
32 // -------------------------------------------------------------------------
33 template< class _TInputImage, class _TScalar, class _TCenterness >
34 void fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >::
35 AddSeed( const TPoint& seed )
36 {
37   this->m_Dijkstra->AddSeed( seed );
38 }
39
40 // -------------------------------------------------------------------------
41 template< class _TInputImage, class _TScalar, class _TCenterness >
42 void fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >::
43 ClearSeeds( )
44 {
45   this->m_Dijkstra->ClearSeeds( );
46 }
47
48 // -------------------------------------------------------------------------
49 template< class _TInputImage, class _TScalar, class _TCenterness >
50 void fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >::
51 SetInput( TInputImage* input )
52 {
53   this->Superclass::SetNthInput( 0, input );
54 }
55
56 // -------------------------------------------------------------------------
57 template< class _TInputImage, class _TScalar, class _TCenterness >
58 typename
59 fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >::
60 TInputImage*
61 fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >::
62 GetInput( )
63 {
64   return( dynamic_cast< TInputImage* >( this->Superclass::GetInput( 0 ) ) );
65 }
66
67 // -------------------------------------------------------------------------
68 template< class _TInputImage, class _TScalar, class _TCenterness >
69 const typename
70 fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >::
71 TInputImage*
72 fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >::
73 GetInput( ) const
74 {
75   return(
76     dynamic_cast< const TInputImage* >( this->Superclass::GetInput( 0 ) )
77     );
78 }
79
80 // -------------------------------------------------------------------------
81 template< class _TInputImage, class _TScalar, class _TCenterness >
82 typename
83 fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >::
84 TPath*
85 fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >::
86 GetOutput( )
87 {
88   return( dynamic_cast< TPath* >( this->Superclass::GetOutput( 0 ) ) );
89 }
90
91 // -------------------------------------------------------------------------
92 template< class _TInputImage, class _TScalar, class _TCenterness >
93 const typename
94 fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >::
95 TPath* 
96 fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >::
97 GetOutput( ) const
98 {
99   return( dynamic_cast< const TPath* >( this->Superclass::GetOutput( 0 ) ) );
100 }
101
102 // -------------------------------------------------------------------------
103 template< class _TInputImage, class _TScalar, class _TCenterness >
104 fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >::
105 ExtractAxisFilter( )
106   : Superclass( )
107 {
108   // I/O configuration
109   this->SetNumberOfRequiredInputs( 1 );
110   this->SetNumberOfRequiredOutputs( 1 );
111   this->SetNthOutput( 0, TPath::New( ) );
112
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 );
118
119   // Filters
120   this->m_Centerness = TCenterness::New( );
121   this->m_Dijkstra = TDijkstra::New( );
122   this->m_Dijkstra->SetWeightFunction( weight );
123   this->m_Dijkstra->StopAtOneFront( );
124 }
125
126 // -------------------------------------------------------------------------
127 template< class _TInputImage, class _TScalar, class _TCenterness >
128 fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >::
129 ~ExtractAxisFilter( )
130 {
131 }
132
133 // -------------------------------------------------------------------------
134 template< class _TInputImage, class _TScalar, class _TCenterness >
135 void fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >::
136 GenerateData( )
137 {
138   // Execute minipipeline
139   this->m_Centerness->SetInput( this->GetInput( ) );
140   this->m_Dijkstra->SetInput( this->m_Centerness->GetOutput( ) );
141   this->m_Dijkstra->Update( );
142
143   // Extract axis
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 );
147 }
148
149 #endif // __fpa__Image__ExtractAxisFilter__hxx__
150
151 // eof - $RCSfile$