Skip to content

Commit

Permalink
COMP: Use overload dispatch in StructureTensorImageFilter.
Browse files Browse the repository at this point in the history
This is for:

  c:\jenkins\workspace\itkgerritwindows\itk-src\modules\remote\anisotropicdiffusionlbr\include\itkStructureTensorImageFilter.h(95)
  : warning C4348:
  'itk::StructureTensorImageFilter,itk::Image>::IntermediateFilter' :
  redefinition of default parameter : parameter 1

on MSVC.
  • Loading branch information
thewtex committed Jun 26, 2015
1 parent 3c70151 commit ddbe9fd
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 34 deletions.
8 changes: 6 additions & 2 deletions include/itkStructureTensorImageFilter.h
Original file line number Diff line number Diff line change
Expand Up @@ -92,8 +92,12 @@ class StructureTensorImageFilter:
ScalarType m_PostRescaling;
bool m_UseGradientRecursiveGaussianImageFilter;

template< typename Dummy=void, bool b=std::numeric_limits<PixelType>::is_specialized >
struct IntermediateFilter;
struct DispatchBase {};
template< bool >
struct Dispatch: public DispatchBase {};

void IntermediateFilter( const Dispatch< true > & );
void IntermediateFilter( const Dispatch< false > & );
typename TensorImageType::Pointer m_IntermediateResult;

typedef CovariantVector<ScalarType,Dimension> CovariantVectorType;
Expand Down
56 changes: 24 additions & 32 deletions include/itkStructureTensorImageFilter.hxx
Original file line number Diff line number Diff line change
Expand Up @@ -40,37 +40,30 @@ StructureTensorImageFilter< TImage, TTensorImage >


template< typename TImage, typename TTensorImage >
template< typename Dummy >
struct StructureTensorImageFilter< TImage, TTensorImage >
::IntermediateFilter< Dummy, true >
void
StructureTensorImageFilter< TImage, TTensorImage >
::IntermediateFilter( const Dispatch< true > & )
{
typedef StructureTensorImageFilter< TImage, TTensorImage > Self;
void operator()(Self *self)
{
typedef GradientRecursiveGaussianImageFilter< TImage, Self::CovariantImageType > GradientFilterType;
typename GradientFilterType::Pointer gradientFilter = GradientFilterType::New();
gradientFilter->SetInput(self->GetInput());
gradientFilter->SetSigma(self->m_NoiseScale);
typedef GradientRecursiveGaussianImageFilter< TImage, Self::CovariantImageType > GradientFilterType;
typename GradientFilterType::Pointer gradientFilter = GradientFilterType::New();
gradientFilter->SetInput(this->GetInput());
gradientFilter->SetSigma(this->m_NoiseScale);

typedef UnaryFunctorImageFilter< Self::CovariantImageType, Self::TensorImageType, Self::OuterFunctor > OuterFilterType;
typename OuterFilterType::Pointer outerFilter = OuterFilterType::New();
outerFilter->SetInput(gradientFilter->GetOutput());
typedef UnaryFunctorImageFilter< Self::CovariantImageType, Self::TensorImageType, Self::OuterFunctor > OuterFilterType;
typename OuterFilterType::Pointer outerFilter = OuterFilterType::New();
outerFilter->SetInput(gradientFilter->GetOutput());

outerFilter->Update();
self->m_IntermediateResult = outerFilter->GetOutput();
}
};
outerFilter->Update();
this->m_IntermediateResult = outerFilter->GetOutput();
}


template< typename TImage, typename TTensorImage >
template< typename Dummy >
struct StructureTensorImageFilter< TImage, TTensorImage >
::IntermediateFilter< Dummy, false >
void
StructureTensorImageFilter< TImage, TTensorImage >
::IntermediateFilter( const Dispatch< false > & )
{
typedef StructureTensorImageFilter< TImage, TTensorImage > Self;
void operator()(Self *self)
{
typename Self::ImageType::ConstPointer input = self->GetInput();
typename Self::ImageType::ConstPointer input = this->GetInput();
typename Self::TensorImageType::Pointer output = Self::TensorImageType::New();
output->CopyInformation(input);
output->SetRegions(input->GetRequestedRegion());
Expand All @@ -92,13 +85,13 @@ struct StructureTensorImageFilter< TImage, TTensorImage >
typename GradientFilterType::Pointer gradientFilter = GradientFilterType::New();
typename GradientGaussianFilterType::Pointer gradientGaussianFilter = GradientGaussianFilterType::New();

gaussianFilter->SetSigma(self->m_NoiseScale);
gradientGaussianFilter->SetSigma(self->m_NoiseScale);
gaussianFilter->SetSigma(this->m_NoiseScale);
gradientGaussianFilter->SetSigma(this->m_NoiseScale);

typedef UnaryFunctorImageFilter< Self::CovariantImageType, Self::TensorImageType, Self::OuterFunctor > OuterFilterType;
typename OuterFilterType::Pointer outerFilter = OuterFilterType::New();

if( self->m_UseGradientRecursiveGaussianImageFilter )
if( this->m_UseGradientRecursiveGaussianImageFilter )
{
gradientGaussianFilter->SetInput(selectionFilter->GetOutput());
outerFilter->SetInput(gradientGaussianFilter->GetOutput());
Expand All @@ -118,19 +111,18 @@ struct StructureTensorImageFilter< TImage, TTensorImage >
addFilter->Update();
output = addFilter->GetOutput();

self->UpdateProgress(index/float( Self::PixelType::Dimension+1 ));
this->UpdateProgress(index/float( Self::PixelType::Dimension+1 ));
}
self->m_IntermediateResult = output;
}
};
this->m_IntermediateResult = output;
}


template< typename TImage, typename TTensorImage >
void
StructureTensorImageFilter< TImage, TTensorImage >
::GenerateData()
{
IntermediateFilter<>()(this);
this->IntermediateFilter( Dispatch< std::numeric_limits< PixelType >::is_specialized >() );

typedef RecursiveGaussianImageFilter<TensorImageType> GaussianFilterType;
typename GaussianFilterType::Pointer gaussianFilter = GaussianFilterType::New();
Expand Down

0 comments on commit ddbe9fd

Please sign in to comment.