1 #ifndef __cpExtensions__Algorithms__CPRImageFilter__hxx__
2 #define __cpExtensions__Algorithms__CPRImageFilter__hxx__
4 #include <itkImageRegionIterator.h>
5 #include <itkImageSliceIteratorWithIndex.h>
6 #include <itkMinimumMaximumImageCalculator.h>
8 // -------------------------------------------------------------------------
9 template< class _TImage, class _TCurve >
10 _TCurve* cpExtensions::Algorithms::CPRImageFilter< _TImage, _TCurve >::
14 dynamic_cast< _TCurve* >( this->itk::ProcessObject::GetInput( 1 ) )
18 // -------------------------------------------------------------------------
19 template< class _TImage, class _TCurve >
20 const _TCurve* cpExtensions::Algorithms::CPRImageFilter< _TImage, _TCurve >::
24 dynamic_cast< const _TCurve* >( this->itk::ProcessObject::GetInput( 1 ) )
28 // -------------------------------------------------------------------------
29 template< class _TImage, class _TCurve >
30 void cpExtensions::Algorithms::CPRImageFilter< _TImage, _TCurve >::
31 SetCurve( _TCurve* curve )
33 this->itk::ProcessObject::SetNthInput( 1, curve );
36 // -------------------------------------------------------------------------
37 template< class _TImage, class _TCurve >
38 cpExtensions::Algorithms::CPRImageFilter< _TImage, _TCurve >::
43 this->Superclass::SetNumberOfRequiredInputs( 2 );
46 // -------------------------------------------------------------------------
47 template< class _TImage, class _TCurve >
48 cpExtensions::Algorithms::CPRImageFilter< _TImage, _TCurve >::
53 // -------------------------------------------------------------------------
54 template< class _TImage, class _TCurve >
55 void cpExtensions::Algorithms::CPRImageFilter< _TImage, _TCurve >::
56 GenerateOutputInformation( )
60 // -------------------------------------------------------------------------
61 template< class _TImage, class _TCurve >
62 void cpExtensions::Algorithms::CPRImageFilter< _TImage, _TCurve >::
63 GenerateInputRequestedRegion( )
65 TImage* input = const_cast< TImage* >( this->GetInput( ) );
67 input->SetRequestedRegionToLargestPossibleRegion( );
70 // -------------------------------------------------------------------------
71 template< class _TImage, class _TCurve >
72 void cpExtensions::Algorithms::CPRImageFilter< _TImage, _TCurve >::
75 typedef itk::MinimumMaximumImageCalculator< _TImage > _TMinMax;
76 typedef itk::ImageSliceIteratorWithIndex< _TImage > _T3DIt;
77 typedef itk::ImageRegionIterator< typename TSlicer::TSliceImage > _T2DIt;
79 auto input = this->GetInput( );
80 auto curve = this->GetCurve( );
81 auto output = this->GetOutput( );
83 // Compute image intensity range
84 typename _TMinMax::Pointer minmax = _TMinMax::New( );
85 minmax->SetImage( input );
89 typename TSlicer::Pointer slicer = TSlicer::New( );
90 slicer->SetInput( input );
91 slicer->SetDefaultValue( minmax->GetMinimum( ) );
92 slicer->SpacingFromMinimumOn( );
93 if( this->m_Interpolator.IsNotNull( ) )
94 slicer->SetInterpolator( this->m_Interpolator );
95 slicer->SizeFromMaximumOff( );
96 if( this->m_SliceRadius > double( 0 ) )
98 slicer->SizeFromMinimumOff( );
99 slicer->SetSize( this->m_SliceRadius );
102 slicer->SizeFromMinimumOn( );
105 _T3DIt oIt( output, output->GetRequestedRegion( ) );
106 oIt.SetFirstDirection( 1 );
107 oIt.SetSecondDirection( 2 );
109 unsigned long N = curve->GetNumberOfPoints( );
110 for( unsigned long n = 0; n < N; ++n )
112 slicer->SetTranslation( curve->GetPoint( n ) );
113 slicer->SetRotation( curve->GetFrame( n ) );
118 slicer->GetOutput( ), slicer->GetOutput( )->GetRequestedRegion( )
120 for( sIt.GoToBegin( ); !sIt.IsAtEnd( ); ++sIt )
122 oIt.Set( sIt.Get( ) );
124 if( oIt.IsAtEndOfLine( ) )
126 if( oIt.IsAtEndOfSlice( ) )
134 #endif // __cpExtensions__Algorithms__CPRImageFilter__hxx__