1 #ifndef __fpa__Image__MultiplyImageAndDistanceMap__hxx__
2 #define __fpa__Image__MultiplyImageAndDistanceMap__hxx__
4 #include <itkImageRegionConstIteratorWithIndex.h>
5 #include <itkImageRegionIteratorWithIndex.h>
6 #include <itkProgressReporter.h>
8 // -------------------------------------------------------------------------
9 template< class _TInput, class _TDistanceMap >
11 fpa::Image::MultiplyImageAndDistanceMap< _TInput, _TDistanceMap >::
15 dynamic_cast< _TDistanceMap* >(
16 this->itk::ProcessObject::GetInput( 1 )
21 // -------------------------------------------------------------------------
22 template< class _TInput, class _TDistanceMap >
24 fpa::Image::MultiplyImageAndDistanceMap< _TInput, _TDistanceMap >::
25 GetDistanceMap( ) const
28 dynamic_cast< const _TDistanceMap* >(
29 this->itk::ProcessObject::GetInput( 1 )
34 // -------------------------------------------------------------------------
35 template< class _TInput, class _TDistanceMap >
36 void fpa::Image::MultiplyImageAndDistanceMap< _TInput, _TDistanceMap >::
37 SetDistanceMap( _TDistanceMap* dmap )
39 this->itk::ProcessObject::SetNthInput( 1, dmap );
42 // -------------------------------------------------------------------------
43 template< class _TInput, class _TDistanceMap >
44 fpa::Image::MultiplyImageAndDistanceMap< _TInput, _TDistanceMap >::
45 MultiplyImageAndDistanceMap( )
48 this->SetNumberOfRequiredInputs( 2 );
51 // -------------------------------------------------------------------------
52 template< class _TInput, class _TDistanceMap >
53 fpa::Image::MultiplyImageAndDistanceMap< _TInput, _TDistanceMap >::
54 ~MultiplyImageAndDistanceMap( )
58 // -------------------------------------------------------------------------
59 template< class _TInput, class _TDistanceMap >
60 void fpa::Image::MultiplyImageAndDistanceMap< _TInput, _TDistanceMap >::
61 ThreadedGenerateData( const TRegion& region, itk::ThreadIdType threadId )
63 typedef typename _TInput::PixelType _TPixel;
64 const typename TRegion::SizeType& regionSize = region.GetSize( );
65 if( regionSize[ 0 ] == 0 )
67 const _TInput* input = this->GetInput( );
68 const _TDistanceMap* dmap = this->GetDistanceMap( );
69 _TInput* output = this->GetOutput( );
70 itk::ProgressReporter pr( this, threadId, region.GetNumberOfPixels( ) );
73 itk::ImageRegionConstIteratorWithIndex< _TInput > iIt( input, region );
74 itk::ImageRegionConstIteratorWithIndex< _TDistanceMap > dIt( dmap, region );
75 itk::ImageRegionIteratorWithIndex< _TInput > oIt( output, region );
80 ; !iIt.IsAtEnd( ) && !dIt.IsAtEnd( ) && !oIt.IsAtEnd( );
84 double d = double( dIt.Get( ) );
85 if( !( d >= double( 0 ) ) )
88 double v = double( iIt.Get( ) );
90 oIt.Set( _TPixel( v / std::fabs( d ) ) );
92 oIt.Set( _TPixel( v * std::fabs( d ) ) );
94 oIt.Set( _TPixel( 0 ) );
97 oIt.Set( iIt.Get( ) );
103 #endif // __fpa__Image__MultiplyImageAndDistanceMap__hxx__