1 #ifndef __fpa__Image__Functors__SimpleNeighborhood__hxx__
2 #define __fpa__Image__Functors__SimpleNeighborhood__hxx__
4 // -------------------------------------------------------------------------
5 template< class _TImage >
6 typename fpa::Image::Functors::SimpleNeighborhood< _TImage >::
7 TOutput fpa::Image::Functors::SimpleNeighborhood< _TImage >::
8 Evaluate( const TIndex& center ) const
10 if( this->m_Offsets.size( ) == 0 )
12 if( this->m_Order == 1 )
13 this->_1stCombination( );
15 this->_2ndCombination( );
20 typename _TImage::RegionType reg = this->m_Image->GetRequestedRegion( );
21 for( int i = 0; i < this->m_Offsets.size( ); ++i )
23 TIndex idx = center + this->m_Offsets[ i ];
24 if( reg.IsInside( idx ) && idx != center )
31 // -------------------------------------------------------------------------
32 template< class _TImage >
33 fpa::Image::Functors::SimpleNeighborhood< _TImage >::
40 // -------------------------------------------------------------------------
41 template< class _TImage >
42 fpa::Image::Functors::SimpleNeighborhood< _TImage >::
43 ~SimpleNeighborhood( )
47 // -------------------------------------------------------------------------
48 template< class _TImage >
49 void fpa::Image::Functors::SimpleNeighborhood< _TImage >::
50 _1stCombination( ) const
52 for( int d = 0; d < _TImage::ImageDimension; ++d )
54 typename TIndex::OffsetType off;
56 for( int i = -1; i <= 1; i += 2 )
59 this->m_Offsets.push_back( off );
66 // -------------------------------------------------------------------------
67 template< class _TImage >
68 void fpa::Image::Functors::SimpleNeighborhood< _TImage >::
69 _2ndCombination( ) const
71 std::vector< std::vector< std::vector< int > > > M;
72 M.push_back( std::vector< std::vector< int > >( ) );
74 std::vector< int > base;
78 int dim = _TImage::ImageDimension;
80 M.push_back( std::vector< std::vector< int > >( ) );
81 for( int j = 0; j < base.size( ); ++j )
82 M[ 1 ].push_back( std::vector< int >( 1, base[ j ] ) );
84 for( int i = 2; i <= dim; ++i )
86 M.push_back( std::vector< std::vector< int > >( ) );
87 for( int j = 0; j < base.size( ); ++j )
89 for( int k = 0; k < M[ i - 1 ].size( ); ++k )
91 M[ i ].push_back( std::vector< int >( 1, base[ j ] ) );
92 for( int l = 0; l < M[ i - 1 ][ k ].size( ); ++l )
93 M[ i ].back( ).push_back( M[ i - 1 ][ k ][ l ] );
101 for( int i = 0; i < M[ dim ].size( ); ++i )
104 for( int j = 0; j < M[ dim ][ i ].size( ); ++j )
105 off[ j ] = M[ dim ][ i ][ j ];
106 this->m_Offsets.push_back( off );
111 #endif // __fpa__Image__Functors__SimpleNeighborhood__hxx__