17 #ifndef __itkHausdorffDistanceImageFilter_txx
18 #define __itkHausdorffDistanceImageFilter_txx
23 #include "itkNumericTraits.h"
30 template<
class TInputImage1,
class TInputImage2>
36 this->SetNumberOfRequiredInputs( 2 );
38 m_HausdorffDistance = NumericTraits<RealType>::Zero;
39 m_AverageHausdorffDistance = NumericTraits<RealType>::Zero;
43 template<
class TInputImage1,
class TInputImage2>
48 this->SetNthInput(1, const_cast<TInputImage2 *>( image ) );
52 template<
class TInputImage1,
class TInputImage2>
58 return static_cast< const TInputImage2 *
>
62 template<
class TInputImage1,
class TInputImage2>
67 Superclass::GenerateInputRequestedRegion();
72 if ( this->GetInput1() )
76 image1->SetRequestedRegionToLargestPossibleRegion();
78 if ( this->GetInput2() )
82 image2->SetRequestedRegion(
83 this->GetInput1()->GetRequestedRegion() );
90 template<
class TInputImage1,
class TInputImage2>
95 Superclass::EnlargeOutputRequestedRegion(data);
100 template<
class TInputImage1,
class TInputImage2>
108 const_cast< TInputImage1 *
>( this->GetInput1() );
109 this->GraftOutput( image );
115 progress->SetMiniPipelineFilter(
this);
120 typename Filter12Type::Pointer filter12 = Filter12Type::New();
122 filter12->SetInput1( this->GetInput1() );
123 filter12->SetInput2( this->GetInput2() );
128 typename Filter21Type::Pointer filter21 = Filter21Type::New();
130 filter21->SetInput1( this->GetInput2() );
131 filter21->SetInput2( this->GetInput1() );
135 progress->RegisterInternalFilter(filter12,.5f);
136 progress->RegisterInternalFilter(filter21,.5f);
139 distance12 = filter12->GetDirectedHausdorffDistance();
141 distance21 = filter21->GetDirectedHausdorffDistance();
143 if ( distance12 > distance21 )
145 m_HausdorffDistance = distance12;
149 m_HausdorffDistance = distance21;
151 m_AverageHausdorffDistance = ( filter12->GetAverageHausdorffDistance() + filter21->GetAverageHausdorffDistance() ) / 2.0;
154 template<
class TInputImage1,
class TInputImage2>
159 Superclass::PrintSelf(os,indent);
161 os << indent <<
"HausdorffDistance: "
162 << m_HausdorffDistance << std::endl;
163 os << indent <<
"AverageHausdorffDistance: "
164 << m_AverageHausdorffDistance << std::endl;