17 #ifndef __itkApproximateSignedDistanceMapImageFilter_txx
18 #define __itkApproximateSignedDistanceMapImageFilter_txx
22 #include "itkNumericTraits.h"
25 #include "vcl_cmath.h"
32 template <
class TInputImage,
class TOutputImage>
47 template <
class TInputImage,
class TOutputImage>
54 OutputSizeType outputSize = this->GetOutput()->GetRequestedRegion().GetSize();
56 for (
unsigned int i = 0; i < InputImageDimension; i++)
58 maximumDistance += outputSize[i]*outputSize[i];
66 this->AllocateOutputs();
70 progress->SetMiniPipelineFilter(
this);
71 progress->RegisterInternalFilter(m_IsoContourFilter, 0.5f);
72 progress->RegisterInternalFilter(m_ChamferFilter, 0.5f);
75 m_IsoContourFilter->SetInput(this->GetInput());
76 m_IsoContourFilter->SetFarValue(maximumDistance + 1);
77 InputPixelType levelSetValue = (m_InsideValue + m_OutsideValue) / 2;
78 m_IsoContourFilter->SetLevelSetValue(levelSetValue);
81 m_ChamferFilter->SetInput(m_IsoContourFilter->GetOutput());
82 m_ChamferFilter->SetMaximumDistance(maximumDistance);
86 m_ChamferFilter->GraftOutput( this->GetOutput() );
89 m_ChamferFilter->Update();
94 this->GraftOutput( m_ChamferFilter->GetOutput() );
104 if (m_InsideValue > m_OutsideValue)
107 this->GetOutput()->GetRequestedRegion() );
117 template<
class TInputImage,
class TOutputImage>
122 Superclass::PrintSelf(os, indent);
124 os << indent <<
"Inside intensity value: " << m_InsideValue << std::endl;
125 os << indent <<
"Outside intensity value: " << m_OutsideValue << std::endl;
126 os << indent <<
"IsoContourDistanceImageFilter (used internally): "
127 << m_IsoContourFilter << std::endl;
128 os << indent <<
"FastChamferDistanceImageFilter (used internally): "
129 << m_ChamferFilter << std::endl;