]> Creatis software - FrontAlgorithms.git/blob - lib/fpa/Image/Algorithm.hxx
...
[FrontAlgorithms.git] / lib / fpa / Image / Algorithm.hxx
1 // =========================================================================
2 // @author Leonardo Florez Valencia
3 // @email florez-l@javeriana.edu.co
4 // =========================================================================
5
6 #ifndef __fpa__Image__Algorithm__hxx__
7 #define __fpa__Image__Algorithm__hxx__
8
9 // -------------------------------------------------------------------------
10 template< class _TInputImage, class _TOutputImage, class _TMarksInterface, class _TSeedsInterface >
11 typename
12 fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInterface >::
13 TMarks*
14 fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInterface >::
15 GetMarks( )
16 {
17   dynamic_cast< TMarks* >(
18     this->itk::ProcessObject::GetOutput( this->m_MarksIdx )
19     );
20 }
21
22 // -------------------------------------------------------------------------
23 template< class _TInputImage, class _TOutputImage, class _TMarksInterface, class _TSeedsInterface >
24 const typename
25 fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInterface >::
26 TMarks*
27 fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInterface >::
28 GetMarks( ) const
29 {
30   dynamic_cast< const TMarks* >(
31     this->itk::ProcessObject::GetOutput( this->m_MarksIdx )
32     );
33 }
34
35 // -------------------------------------------------------------------------
36 template< class _TInputImage, class _TOutputImage, class _TMarksInterface, class _TSeedsInterface >
37 fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInterface >::
38 Algorithm( )
39   : Superclass( ),
40     m_NeigborhoodOrder( 1 )
41 {
42   this->m_MarksIdx = this->GetNumberOfRequiredOutputs( );
43   this->itk::ProcessObject::SetNumberOfRequiredOutputs( this->m_MarksIdx + 1 );
44   this->SetNthOutput( this->m_MarksIdx, TMarks::New( ) );
45 }
46
47 // -------------------------------------------------------------------------
48 template< class _TInputImage, class _TOutputImage, class _TMarksInterface, class _TSeedsInterface >
49 fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInterface >::
50 ~Algorithm( )
51 {
52 }
53
54 // -------------------------------------------------------------------------
55 template< class _TInputImage, class _TOutputImage, class _TMarksInterface, class _TSeedsInterface >
56 void
57 fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInterface >::
58 _ConfigureOutput( const TOutputValue& v )
59 {
60   const TInputImage* in = this->GetInput( );
61
62   TOutputImage* out = this->GetOutput( );
63   out->SetLargestPossibleRegion( in->GetLargestPossibleRegion( ) );
64   out->SetRequestedRegion( in->GetRequestedRegion( ) );
65   out->SetBufferedRegion( in->GetBufferedRegion( ) );
66   out->SetSpacing( in->GetSpacing( ) );
67   out->SetOrigin( in->GetOrigin( ) );
68   out->SetDirection( in->GetDirection( ) );
69   out->Allocate( );
70   out->FillBuffer( v );
71
72   TMarks* marks = this->GetMarks( );
73   marks->SetLargestPossibleRegion( in->GetLargestPossibleRegion( ) );
74   marks->SetRequestedRegion( in->GetRequestedRegion( ) );
75   marks->SetBufferedRegion( in->GetBufferedRegion( ) );
76   marks->SetSpacing( in->GetSpacing( ) );
77   marks->SetOrigin( in->GetOrigin( ) );
78   marks->SetDirection( in->GetDirection( ) );
79   marks->Allocate( );
80   marks->FillBuffer( TFrontId( 0 ) );
81 }
82
83 // -------------------------------------------------------------------------
84 template< class _TInputImage, class _TOutputImage, class _TMarksInterface, class _TSeedsInterface >
85 typename
86 fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInterface >::
87 TNeighborhood fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInterface >::
88 _GetNeighbors( const TVertex& v ) const
89 {
90   typename TInputImage::RegionType region =
91     this->GetInput( )->GetRequestedRegion( );
92   TNeighborhood neighborhood;
93   if( this->m_NeigborhoodOrder != 1 )
94   {
95     // TODO
96   }
97   else
98   {
99     for( unsigned int d = 0; d < TInputImage::ImageDimension; ++d )
100     {
101       for( int s = -1; s <= 1; s += 2 )
102       {
103         TVertex n = v;
104         n[ d ] += s;
105         if( region.IsInside( n ) )
106           neighborhood.push_back( n );
107
108       } // rof
109
110     } // rof
111
112   } // fi
113   return( neighborhood );
114 }
115
116 // -------------------------------------------------------------------------
117 template< class _TInputImage, class _TOutputImage, class _TMarksInterface, class _TSeedsInterface >
118 typename
119 fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInterface >::
120 TInputValue
121 fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInterface >::
122 _GetInputValue( const TVertex& v ) const
123 {
124   return( this->GetInput( )->GetPixel( v ) );
125 }
126
127 // -------------------------------------------------------------------------
128 template< class _TInputImage, class _TOutputImage, class _TMarksInterface, class _TSeedsInterface >
129 typename
130 fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInterface >::
131 TOutputValue fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInterface >::
132 _GetOutputValue( const TVertex& v ) const
133 {
134   return( this->GetOutput( )->GetPixel( v ) );
135 }
136
137 // -------------------------------------------------------------------------
138 template< class _TInputImage, class _TOutputImage, class _TMarksInterface, class _TSeedsInterface >
139 void
140 fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInterface >::
141 _UpdateOutputValue( const TNode& n )
142 {
143   this->GetOutput( )->SetPixel( n.Vertex, n.Value );
144 }
145
146 // -------------------------------------------------------------------------
147 template< class _TInputImage, class _TOutputImage, class _TMarksInterface, class _TSeedsInterface >
148 bool
149 fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInterface >::
150 _IsMarked( const TVertex& v ) const
151 {
152   return( this->GetMarks( )->GetPixel( v ) > 0 );
153 }
154
155 // -------------------------------------------------------------------------
156 template< class _TInputImage, class _TOutputImage, class _TMarksInterface, class _TSeedsInterface >
157 unsigned long
158 fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInterface >::
159 _GetMark( const TVertex& v ) const
160 {
161   return( ( unsigned long )( this->GetMarks( )->GetPixel( v ) ) );
162 }
163
164 // -------------------------------------------------------------------------
165 template< class _TInputImage, class _TOutputImage, class _TMarksInterface, class _TSeedsInterface >
166 bool
167 fpa::Image::Algorithm< _TInputImage, _TOutputImage, _TMarksInterface, _TSeedsInterface >::
168 _Mark( const TVertex& v, unsigned long frontId )
169 {
170   this->GetMarks( )->SetPixel( v, TFrontId( frontId ) );
171   return( true );
172 }
173
174 #endif // __fpa__Image__Algorithm__hxx__
175
176 // eof - $RCSfile$