18 #ifndef __itkContourDirectedMeanDistanceImageFilter_txx
19 #define __itkContourDirectedMeanDistanceImageFilter_txx
30 #include "itkNumericTraits.h"
37 template<
class TInputImage1,
class TInputImage2>
43 this->SetNumberOfRequiredInputs( 2 );
50 template<
class TInputImage1,
class TInputImage2>
55 this->SetNthInput(1, const_cast<TInputImage2 *>( image ) );
59 template<
class TInputImage1,
class TInputImage2>
65 return static_cast< const TInputImage2 *
>
69 template<
class TInputImage1,
class TInputImage2>
74 Superclass::GenerateInputRequestedRegion();
79 if ( this->GetInput1() )
83 image1->SetRequestedRegionToLargestPossibleRegion();
85 if ( this->GetInput2() )
89 image2->SetRequestedRegion(
90 this->GetInput1()->GetRequestedRegion() );
97 template<
class TInputImage1,
class TInputImage2>
102 Superclass::EnlargeOutputRequestedRegion(data);
107 template<
class TInputImage1,
class TInputImage2>
114 const_cast< TInputImage1 *
>( this->GetInput1() );
115 this->GraftOutput( image );
119 template<
class TInputImage1,
class TInputImage2>
124 int numberOfThreads = this->GetNumberOfThreads();
127 m_MeanDistance.SetSize(numberOfThreads);
128 m_Count.SetSize(numberOfThreads);
140 filter->SetInput( this->GetInput2() );
143 m_DistanceMap = filter->GetOutput();
148 template<
class TInputImage1,
class TInputImage2>
155 int numberOfThreads = this->GetNumberOfThreads();
160 for( i = 0; i < numberOfThreads; i++)
162 sum += m_MeanDistance[i];
167 m_ContourDirectedMeanDistance= sum/
static_cast<RealType>(count);
175 template<
class TInputImage1,
class TInputImage2>
186 typename InputImage1Type::ConstPointer input = this->GetInput();
189 typedef typename InputImage1Type::SizeType InputSizeType;
190 InputSizeType radius;
194 faceList = bC(input, outputRegionForThread, radius);
198 typedef typename InputImage1Type::PixelType InputPixelType;
201 ProgressReporter progress(
this, threadId, outputRegionForThread.GetNumberOfPixels());
207 for (fit=faceList.begin(); fit != faceList.end(); ++fit)
211 unsigned int neighborhoodSize = bit.
Size();
226 bIsOnContour =
false;
228 for (i = 0; i < neighborhoodSize; ++i)
243 m_MeanDistance[threadId] += vnl_math_abs( value );
249 progress.CompletedPixel();
255 template<
class TInputImage1,
class TInputImage2>
260 Superclass::PrintSelf(os,indent);
262 os << indent <<
"ContourDirectedMeanDistance: "
263 << m_ContourDirectedMeanDistance << std::endl;