1 /* =======================================================================
2 * @author: Leonardo Florez-Valencia
3 * @email: florez-l@javeriana.edu.co
4 * =======================================================================
7 #ifndef __ivq__ITK__ImageROIFromFunction__hxx__
8 #define __ivq__ITK__ImageROIFromFunction__hxx__
10 #include <itkImageRegionConstIteratorWithIndex.h>
12 // -------------------------------------------------------------------------
13 template< class _TImage >
14 void ivq::ITK::ImageROIFromFunction< _TImage >::
17 this->Superclass::Modified( );
18 this->m_ROIUpdated = false;
21 // -------------------------------------------------------------------------
22 template< class _TImage >
23 void ivq::ITK::ImageROIFromFunction< _TImage >::
26 if( this->m_ROIUpdated || this->m_Image.IsNull( ) )
28 if( this->m_Function.IsNotNull( ) )
31 TRegion in_region = this->m_Image->GetRequestedRegion( );
32 TIndex iMin = in_region.GetIndex( );
33 TIndex iMax = iMin + in_region.GetSize( );
34 for( unsigned int d = 0; d < TImage::ImageDimension; ++d )
38 typedef itk::ImageRegionConstIteratorWithIndex< TImage > _TIt;
39 _TIt it( this->m_Image, in_region );
42 for( it.GoToBegin( ); !it.IsAtEnd( ); ++it )
44 if( this->m_Function->Evaluate( it.Get( ) ) )
46 TIndex i = it.GetIndex( );
47 for( unsigned int d = 0; d < TImage::ImageDimension; ++d )
49 i0[ d ] = ( i[ d ] < i0[ d ] )? i[ d ]: i0[ d ];
50 i1[ d ] = ( i1[ d ] < i[ d ] )? i[ d ]: i1[ d ];
59 for( unsigned int d = 0; d < TImage::ImageDimension; ++d )
61 i0[ d ] -= this->m_Padding;
62 i1[ d ] += this->m_Padding;
63 i0[ d ] = ( i0[ d ] < iMin[ d ] )? iMin[ d ]: i0[ d ];
64 i1[ d ] = ( iMax[ d ] < i1[ d ] )? iMax[ d ]: i1[ d ];
69 typename TImage::SizeType roi_size;
70 for( unsigned int d = 0; d < TImage::ImageDimension; ++d )
71 roi_size[ d ] = i1[ d ] - i0[ d ] + 1;
72 this->m_ROI.SetIndex( i0 );
73 this->m_ROI.SetSize( roi_size );
76 this->m_ROI = this->m_Image->GetRequestedRegion( );
77 this->m_ROIUpdated = true;
80 // -------------------------------------------------------------------------
81 template< class _TImage >
82 ivq::ITK::ImageROIFromFunction< _TImage >::
83 ImageROIFromFunction( )
90 // -------------------------------------------------------------------------
91 template< class _TImage >
92 ivq::ITK::ImageROIFromFunction< _TImage >::
93 ~ImageROIFromFunction( )
97 #endif // __ivq__ITK__ImageROIFromFunction__hxx__