17 #ifndef __itkOptGrayscaleDilateImageFilter_txx
18 #define __itkOptGrayscaleDilateImageFilter_txx
21 #include "itkNumericTraits.h"
28 template<
class TInputImage,
class TOutputImage,
class TKernel>
32 m_BasicFilter = BasicFilterType::New();
33 m_HistogramFilter = HistogramFilterType::New();
34 m_AnchorFilter = AnchorFilterType::New();
35 m_VHGWFilter = VHGWFilterType::New();
38 this->SetBoundary( NumericTraits< PixelType >::NonpositiveMin() );
41 template<
class TInputImage,
class TOutputImage,
class TKernel>
46 Superclass::SetNumberOfThreads( nb );
47 m_HistogramFilter->SetNumberOfThreads( nb );
48 m_AnchorFilter->SetNumberOfThreads( nb );
49 m_VHGWFilter->SetNumberOfThreads( nb );
50 m_BasicFilter->SetNumberOfThreads( nb );
54 template<
class TInputImage,
class TOutputImage,
class TKernel>
61 { flatKernel =
dynamic_cast< const FlatKernelType*
>( & kernel ); }
67 m_AnchorFilter->SetKernel( *flatKernel );
70 else if( m_HistogramFilter->GetUseVectorBasedAlgorithm() )
74 m_HistogramFilter->SetKernel( kernel );
83 m_HistogramFilter->SetKernel( kernel );
85 if( ( ImageDimension == 2 && this->GetKernel().
Size() < m_HistogramFilter->GetPixelsPerTranslation() * 5.4 )
86 || ( ImageDimension == 3 && this->GetKernel().Size() < m_HistogramFilter->GetPixelsPerTranslation() * 4.5 ) )
88 m_BasicFilter->SetKernel( kernel );
97 Superclass::SetKernel( kernel );
100 template<
class TInputImage,
class TOutputImage,
class TKernel>
106 m_HistogramFilter->SetBoundary( value );
107 m_AnchorFilter->SetBoundary(value);
108 m_VHGWFilter->SetBoundary(value);
109 m_BoundaryCondition.SetConstant( value );
110 m_BasicFilter->OverrideBoundaryCondition( &m_BoundaryCondition );
113 template<
class TInputImage,
class TOutputImage,
class TKernel>
120 { flatKernel =
dynamic_cast< const FlatKernelType*
>( & this->GetKernel() ); }
123 if( m_Algorithm != algo )
128 m_BasicFilter->SetKernel( this->GetKernel() );
130 else if( algo == HISTO )
132 m_HistogramFilter->SetKernel( this->GetKernel() );
136 m_AnchorFilter->SetKernel( *flatKernel );
140 m_VHGWFilter->SetKernel( *flatKernel );
143 { itkExceptionMacro( <<
"Invalid algorithm" ); }
151 template<
class TInputImage,
class TOutputImage,
class TKernel>
158 progress->SetMiniPipelineFilter(
this);
161 this->AllocateOutputs();
164 if( m_Algorithm == BASIC )
166 itkDebugMacro(
"Running BasicDilateImageFilter");
167 m_BasicFilter->SetInput( this->GetInput() );
168 progress->RegisterInternalFilter( m_BasicFilter, 1.0f );
170 m_BasicFilter->GraftOutput( this->GetOutput() );
171 m_BasicFilter->Update();
172 this->GraftOutput( m_BasicFilter->GetOutput() );
174 else if( m_Algorithm == HISTO )
176 itkDebugMacro(
"Running MovingHistogramDilateImageFilter");
177 m_HistogramFilter->SetInput( this->GetInput() );
178 progress->RegisterInternalFilter( m_HistogramFilter, 1.0f );
180 m_HistogramFilter->GraftOutput( this->GetOutput() );
181 m_HistogramFilter->Update();
182 this->GraftOutput( m_HistogramFilter->GetOutput() );
184 else if( m_Algorithm == ANCHOR )
186 itkDebugMacro(
"Running AnchorDilateImageFilter");
187 m_AnchorFilter->SetInput( this->GetInput() );
188 progress->RegisterInternalFilter( m_AnchorFilter, 0.9f );
191 cast->SetInput( m_AnchorFilter->GetOutput() );
192 progress->RegisterInternalFilter( cast, 0.1f );
194 cast->GraftOutput( this->GetOutput() );
196 this->GraftOutput( cast->GetOutput() );
198 else if( m_Algorithm == VHGW )
200 itkDebugMacro(
"Running VanHerkGilWermanDilateImageFilter");
201 m_VHGWFilter->SetInput( this->GetInput() );
202 progress->RegisterInternalFilter( m_VHGWFilter, 0.9f );
205 cast->SetInput( m_VHGWFilter->GetOutput() );
206 progress->RegisterInternalFilter( cast, 0.1f );
208 cast->GraftOutput( this->GetOutput() );
210 this->GraftOutput( cast->GetOutput() );
215 template<
class TInputImage,
class TOutputImage,
class TKernel>
220 Superclass::Modified();
221 m_BasicFilter->Modified();
222 m_HistogramFilter->Modified();
223 m_AnchorFilter->Modified();
224 m_VHGWFilter->Modified();
227 template<
class TInputImage,
class TOutputImage,
class TKernel>
232 Superclass::PrintSelf(os, indent);
234 os << indent <<
"Boundary: " <<
static_cast<typename NumericTraits<PixelType>::PrintType
>( m_Boundary ) << std::endl;
235 os << indent <<
"Algorithm: " << m_Algorithm << std::endl;