17 #ifndef __itkSignedDanielssonDistanceMapImageFilter_txx
18 #define __itkSignedDanielssonDistanceMapImageFilter_txx
32 template <
class TInputImage,
class TOutputImage>
36 this->SetNumberOfRequiredOutputs( 3 );
39 this->SetNthOutput( 1, voronoiMap.GetPointer() );
42 this->SetNthOutput( 2, distanceVectors.GetPointer() );
45 this->m_SquaredDistance =
false;
47 this->m_UseImageSpacing =
false;
48 this->m_InsideIsPositive =
false;
52 template <
class TInputImage,
class TOutputImage>
54 TInputImage,TOutputImage>::DataObjectPointer
60 return static_cast<DataObject*
>(VectorImageType::New().GetPointer());
62 return Superclass::MakeOutput(idx);
68 template <
class TInputImage,
class TOutputImage>
70 TInputImage,TOutputImage>::OutputImageType *
82 template <
class TInputImage,
class TOutputImage>
96 template <
class TInputImage,
class TOutputImage>
98 TInputImage,TOutputImage>::VectorImageType *
111 template <
class TInputImage,
class TOutputImage>
117 progress->SetMiniPipelineFilter(
this);
124 filter1->SetInputIsBinary(
true );
125 filter2->SetInputIsBinary(
true );
126 filter1->SetUseImageSpacing( m_UseImageSpacing );
127 filter2->SetUseImageSpacing( m_UseImageSpacing );
128 filter1->SetSquaredDistance( m_SquaredDistance );
129 filter2->SetSquaredDistance( m_SquaredDistance );
132 typedef typename InputImageType::PixelType InputPixelType;
136 FunctorType > InverterType;
138 typename InverterType::Pointer inverter = InverterType::New();
140 inverter->SetInput(this->GetInput());
147 InputImageDimension > StructuringElementType;
152 StructuringElementType > DilatorType;
154 typename DilatorType::Pointer dilator = DilatorType::New();
156 StructuringElementType structuringElement;
157 structuringElement.SetRadius( 1 );
158 structuringElement.CreateStructuringElement();
159 dilator->SetKernel( structuringElement );
160 dilator->SetDilateValue(1);
162 filter1->SetInput( this->GetInput() );
163 dilator->SetInput( inverter->GetOutput() );
164 filter2->SetInput( dilator->GetOutput() );
168 OutputImageType > SubtracterType;
170 typename SubtracterType::Pointer subtracter = SubtracterType::New();
172 if ( m_InsideIsPositive )
174 subtracter->SetInput1(filter2->GetDistanceMap());
175 subtracter->SetInput2(filter1->GetDistanceMap());
179 subtracter->SetInput2(filter2->GetDistanceMap());
180 subtracter->SetInput1(filter1->GetDistanceMap());
183 subtracter->Update();
188 progress->RegisterInternalFilter(filter1,.5f);
191 this->GraftNthOutput( 0, subtracter->GetOutput() );
195 this->GraftNthOutput( 1, filter1->GetVoronoiMap() );
196 this->GraftNthOutput( 2, filter1->GetVectorDistanceMap() );
204 template <
class TInputImage,
class TOutputImage>
208 Superclass::PrintSelf(os,indent);
209 os << indent <<
"Signed Danielson Distance: " << std::endl;
210 os << indent <<
"Use Image Spacing : " << m_UseImageSpacing << std::endl;
211 os << indent <<
"Squared Distance : " << m_SquaredDistance << std::endl;
212 os << indent <<
"Inside is positive : " << m_InsideIsPositive << std::endl;