1 #ifndef __fpa__Image__MoriRegionGrow__hxx__
2 #define __fpa__Image__MoriRegionGrow__hxx__
4 // -------------------------------------------------------------------------
5 template< class _TInputImage, class _TOutputImage >
6 fpa::Image::MoriRegionGrow< _TInputImage, _TOutputImage >::
10 m_Sensitivity( double( 1 ) )
12 this->m_Upper = std::numeric_limits< TPixel >::max( );
13 if( std::numeric_limits< TPixel >::is_integer )
14 this->m_Lower = std::numeric_limits< TPixel >::min( );
16 this->m_Lower = -this->m_Upper;
17 typename TBinThresholdFunction::Pointer functor =
18 TBinThresholdFunction::New( );
19 this->SetGrowFunction( functor );
22 // -------------------------------------------------------------------------
23 template< class _TInputImage, class _TOutputImage >
24 fpa::Image::MoriRegionGrow< _TInputImage, _TOutputImage >::
29 // -------------------------------------------------------------------------
30 template< class _TInputImage, class _TOutputImage >
31 bool fpa::Image::MoriRegionGrow< _TInputImage, _TOutputImage >::
32 _ContinueGenerateData( )
34 TBinThresholdFunction* functor =
35 dynamic_cast< TBinThresholdFunction* >( this->GetGrowFunction( ) );
36 TPixel u = functor->GetUpper( );
40 if( this->m_N > double( 1 ) )
42 double Q = double( this->m_PrevCount );
43 Q += ( this->m_STD * this->m_Sensitivity );
44 if( double( this->m_ActualCount ) > Q )
49 if( this->m_PrevCount > 0 )
50 v = double( this->m_ActualCount ) - double( this->m_PrevCount );
53 this->m_PrevCount = this->m_ActualCount;
54 this->m_N += double( 1 );
57 if( this->m_N > double( 1 ) )
59 ( this->m_S2 - ( ( this->m_S1 * this->m_S1 ) / this->m_N ) ) /
60 ( this->m_N - double( 1 ) );
62 this->m_STD = double( 0 );
63 this->m_STD = std::sqrt( this->m_STD );
65 if( u < this->m_Upper )
68 if( u > this->m_Upper )
70 functor->SetUpper( u );
71 this->m_Queue = this->m_NextQueue;
72 while( this->m_NextQueue.size( ) > 0 )
73 this->m_NextQueue.pop( );
80 // -------------------------------------------------------------------------
81 template< class _TInputImage, class _TOutputImage >
82 void fpa::Image::MoriRegionGrow< _TInputImage, _TOutputImage >::
83 _BeforeGenerateData( )
85 this->Superclass::_BeforeGenerateData( );
87 while( this->m_NextQueue.size( ) > 0 )
88 this->m_NextQueue.pop( );
89 this->m_ActualCount = 0;
90 this->m_PrevCount = 0;
91 this->m_N = double( 0 );
92 this->m_S1 = double( 0 );
93 this->m_S2 = double( 0 );
94 this->m_STD = double( 0 );
95 TBinThresholdFunction* functor =
96 dynamic_cast< TBinThresholdFunction* >( this->GetGrowFunction( ) );
97 functor->SetLower( this->m_Lower );
98 functor->SetUpper( this->m_Lower + this->m_Step );
101 // -------------------------------------------------------------------------
102 template< class _TInputImage, class _TOutputImage >
103 void fpa::Image::MoriRegionGrow< _TInputImage, _TOutputImage >::
104 _AfterGenerateData( )
106 this->Superclass::_AfterGenerateData( );
107 while( this->m_NextQueue.size( ) > 0 )
108 this->m_NextQueue.pop( );
111 // -------------------------------------------------------------------------
112 template< class _TInputImage, class _TOutputImage >
113 void fpa::Image::MoriRegionGrow< _TInputImage, _TOutputImage >::
116 this->Superclass::_BeforeLoop( );
119 // -------------------------------------------------------------------------
120 template< class _TInputImage, class _TOutputImage >
121 void fpa::Image::MoriRegionGrow< _TInputImage, _TOutputImage >::
124 this->Superclass::_AfterLoop( );
127 // -------------------------------------------------------------------------
128 template< class _TInputImage, class _TOutputImage >
129 bool fpa::Image::MoriRegionGrow< _TInputImage, _TOutputImage >::
130 _UpdateValue( _TQueueNode& v, const _TQueueNode& p )
132 bool ret = this->Superclass::_UpdateValue( v, p );
135 v.Result = this->m_InsideValue;
136 this->m_NextQueue.push( v );
142 // -------------------------------------------------------------------------
143 template< class _TInputImage, class _TOutputImage >
144 void fpa::Image::MoriRegionGrow< _TInputImage, _TOutputImage >::
145 _UpdateResult( const _TQueueNode& n )
147 this->Superclass::_UpdateResult( n );
148 this->m_ActualCount += 1;
151 #endif // __fpa__Image__MoriRegionGrow__hxx__