1 // =======================================================================
2 // @author: Leonardo Florez-Valencia
3 // @email: florez-l@javeriana.edu.co
4 // =======================================================================
5 #ifndef __ivq__ITK__ExtractNativeSlicesImageFilter__hxx__
6 #define __ivq__ITK__ExtractNativeSlicesImageFilter__hxx__
8 #include <itkExtractImageFilter.h>
10 // -------------------------------------------------------------------------
11 template< class _TImage >
12 ivq::ITK::ExtractNativeSlicesImageFilter< _TImage >::
13 ExtractNativeSlicesImageFilter( )
17 ivqITKInputConfigureMacro( Input, TImage );
18 ivqITKOutputConfigureMacro( Output, TSlicesVector );
21 // -------------------------------------------------------------------------
22 template< class _TImage >
23 ivq::ITK::ExtractNativeSlicesImageFilter< _TImage >::
24 ~ExtractNativeSlicesImageFilter( )
28 // -------------------------------------------------------------------------
29 template< class _TImage >
30 void ivq::ITK::ExtractNativeSlicesImageFilter< _TImage >::
33 typedef itk::ExtractImageFilter< TImabe, TSlice > _TExtract;
35 if( this->m_Direction >= Self::ImageDimension )
36 itkExceptionMacro( << "Invalid direction: " << this->m_Direction );
39 const TImage* input = this->GetInput( );
40 TSlicesVector* output = this->GetOutput( );
41 typename TImage::RegionType region = input->GetRequestedRegion( );
42 typename TImage::IndexType regionIndex = region.GetIndex( );
43 typename TImage::SizeType sliceSize = region.GetSize( );
44 unsigned int numSlices = sliceSize[ this->m_Direction ];
45 sliceSize[ this->m_Direction ] = 0;
48 output->Get( ).clear( );
49 for( unsigned int i = 0; i < numSlices; ++i )
51 // Prepare extraction region
52 typename TImage::IndexType sliceIndex = regionIndex;
53 sliceIndex[ this->m_Direction ] += i;
54 typename TImage::RegionType sliceRegion( sliceIndex, sliceSize );
57 typename _TExtract::Pointer extract = _TExtract::New( );
58 extract->SetInput( input );
59 extract->SetExtractionRegion( sliceRegion );
60 extract->SetDirectionCollapseToIdentity( );
62 typename TSlice::Pointer slice = extract->GetOutput( );
63 slice->DisconnectPipeline( );
64 output->Get( ).push_back( slice );
69 #endif // __ivq__ITK__ExtractNativeSlicesImageFilter__hxx__