17 #ifndef __itkMinimumMaximumImageFilter_txx
18 #define __itkMinimumMaximumImageFilter_txx
23 #include "itkNumericTraits.h"
30 template<
class TInputImage>
34 this->SetNumberOfRequiredOutputs(3);
40 for (
int i=1; i < 3; ++i)
47 this->GetMinimumOutput()->Set( NumericTraits<PixelType>::max() );
48 this->GetMaximumOutput()->Set( NumericTraits<PixelType>::NonpositiveMin() );
52 template<
class TInputImage>
60 return static_cast<DataObject*
>(TInputImage::New().GetPointer());
64 return static_cast<DataObject*
>(PixelObjectType::New().GetPointer());
68 return static_cast<DataObject*
>(TInputImage::New().GetPointer());
74 template<
class TInputImage>
82 template<
class TInputImage>
91 template<
class TInputImage>
99 template<
class TInputImage>
107 template<
class TInputImage>
112 Superclass::GenerateInputRequestedRegion();
113 if ( this->GetInput() )
117 image->SetRequestedRegionToLargestPossibleRegion();
121 template<
class TInputImage>
126 Superclass::EnlargeOutputRequestedRegion(data);
131 template<
class TInputImage>
138 const_cast< TInputImage *
>( this->GetInput() );
139 this->GraftOutput( image );
144 template<
class TInputImage>
149 int numberOfThreads = this->GetNumberOfThreads();
152 m_ThreadMin = std::vector<PixelType>(numberOfThreads,
153 NumericTraits<PixelType>::max());
154 m_ThreadMax = std::vector<PixelType>(numberOfThreads,
155 NumericTraits<PixelType>::NonpositiveMin());
158 template<
class TInputImage>
164 int numberOfThreads = this->GetNumberOfThreads();
169 minimum = NumericTraits<PixelType>::max();
170 maximum = NumericTraits<PixelType>::NonpositiveMin();
171 for( i = 0; i < numberOfThreads; i++)
173 if (m_ThreadMin[i] < minimum)
175 minimum = m_ThreadMin[i];
177 if (m_ThreadMax[i] > maximum)
179 maximum = m_ThreadMax[i];
184 this->GetMinimumOutput()->Set( minimum );
185 this->GetMaximumOutput()->Set( maximum );
188 template<
class TInputImage>
198 ProgressReporter progress(
this, threadId, outputRegionForThread.GetNumberOfPixels());
204 if (value < m_ThreadMin[threadId])
206 m_ThreadMin[threadId] = value;
208 if (value > m_ThreadMax[threadId])
210 m_ThreadMax[threadId] = value;
213 progress.CompletedPixel();
217 template <
class TImage>
222 Superclass::PrintSelf(os,indent);
224 os << indent <<
"Minimum: "
225 <<
static_cast<typename NumericTraits<PixelType>::PrintType
>(this->GetMinimum())
227 os << indent <<
"Maximum: "
228 <<
static_cast<typename NumericTraits<PixelType>::PrintType
>(this->GetMaximum())