00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __itkBinaryThresholdImageFilter_h
00018 #define __itkBinaryThresholdImageFilter_h
00019
00020 #include "itkUnaryFunctorImageFilter.h"
00021 #include "itkConceptChecking.h"
00022
00023 namespace itk
00024 {
00025
00043 namespace Functor {
00044
00045 template< class TInput, class TOutput>
00046 class BinaryThreshold
00047 {
00048 public:
00049 BinaryThreshold() {};
00050 ~BinaryThreshold() {};
00051
00052 void SetLowerThreshold( const TInput & thresh )
00053 { m_LowerThreshold = thresh; }
00054 void SetUpperThreshold( const TInput & thresh )
00055 { m_UpperThreshold = thresh; }
00056 void SetInsideValue( const TOutput & value )
00057 { m_InsideValue = value; }
00058 void SetOutsideValue( const TOutput & value )
00059 { m_OutsideValue = value; }
00060
00061 inline TOutput operator()( const TInput & A )
00062 {
00063 if ( m_LowerThreshold <= A && A <= m_UpperThreshold )
00064 {
00065 return m_InsideValue;
00066 }
00067 return m_OutsideValue;
00068 }
00069
00070 private:
00071 TInput m_LowerThreshold;
00072 TInput m_UpperThreshold;
00073 TOutput m_InsideValue;
00074 TOutput m_OutsideValue;
00075
00076 };
00077 }
00078
00079 template <class TInputImage, class TOutputImage>
00080 class ITK_EXPORT BinaryThresholdImageFilter :
00081 public
00082 UnaryFunctorImageFilter<TInputImage,TOutputImage,
00083 Functor::BinaryThreshold<
00084 typename TInputImage::PixelType,
00085 typename TOutputImage::PixelType> >
00086 {
00087 public:
00089 typedef BinaryThresholdImageFilter Self;
00090 typedef UnaryFunctorImageFilter<TInputImage,TOutputImage,
00091 Functor::BinaryThreshold<
00092 typename TInputImage::PixelType,
00093 typename TOutputImage::PixelType>
00094 > Superclass;
00095 typedef SmartPointer<Self> Pointer;
00096 typedef SmartPointer<const Self> ConstPointer;
00097
00099 itkNewMacro(Self);
00100
00102 itkTypeMacro(BinaryThresholdImageFilter, UnaryFunctorImageFilter);
00103
00105 typedef typename TInputImage::PixelType InputPixelType;
00106 typedef typename TOutputImage::PixelType OutputPixelType;
00107
00109 itkConceptMacro(PixelTypeComparable, (Concept::Comparable<InputPixelType>));
00110
00113 itkSetMacro(OutsideValue,OutputPixelType);
00114
00116 itkGetMacro(OutsideValue,OutputPixelType);
00117
00120 itkSetMacro(InsideValue,OutputPixelType);
00121
00123 itkGetMacro(InsideValue,OutputPixelType);
00124
00129 itkSetMacro( UpperThreshold, InputPixelType );
00130 itkSetMacro( LowerThreshold, InputPixelType );
00131
00133 itkGetMacro( UpperThreshold, InputPixelType );
00134 itkGetMacro( LowerThreshold, InputPixelType );
00135
00136
00137 protected:
00138 BinaryThresholdImageFilter();
00139 virtual ~BinaryThresholdImageFilter() {}
00140 void PrintSelf(std::ostream& os, Indent indent) const;
00141
00144 virtual void BeforeThreadedGenerateData();
00145
00146 private:
00147 BinaryThresholdImageFilter(const Self&);
00148 void operator=(const Self&);
00149
00150 InputPixelType m_LowerThreshold;
00151 InputPixelType m_UpperThreshold;
00152 OutputPixelType m_InsideValue;
00153 OutputPixelType m_OutsideValue;
00154
00155 };
00156
00157 }
00158
00159 #ifndef ITK_MANUAL_INSTANTIATION
00160 #include "itkBinaryThresholdImageFilter.txx"
00161 #endif
00162
00163 #endif