00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __itkInvertIntensityImageFilter_h
00018 #define __itkInvertIntensityImageFilter_h
00019
00020 #include "itkUnaryFunctorImageFilter.h"
00021
00022 namespace itk
00023 {
00024
00025 namespace Functor {
00026
00027 template< typename TInput, typename TOutput>
00028 class InvertIntensityTransform
00029 {
00030 public:
00031 typedef typename NumericTraits< TInput >::RealType RealType;
00032 InvertIntensityTransform() {m_Maximum = NumericTraits< TInput >::max();}
00033 ~InvertIntensityTransform() {}
00034
00035 void SetMaximum( TOutput max ) { m_Maximum = max; }
00036
00037 bool operator!=( const InvertIntensityTransform & other ) const
00038 {
00039 if( m_Maximum != other.m_Maximum )
00040 {
00041 return true;
00042 }
00043 return false;
00044 }
00045
00046 bool operator==( const InvertIntensityTransform & other ) const
00047 {
00048 return !(*this != other);
00049 }
00050
00051 inline TOutput operator()( const TInput & x )
00052 {
00053 TOutput result = static_cast<TOutput>( m_Maximum - x );
00054 return result;
00055 }
00056 private:
00057 TInput m_Maximum;
00058 };
00059
00060 }
00061
00062
00078 template <typename TInputImage, typename TOutputImage=TInputImage>
00079 class ITK_EXPORT InvertIntensityImageFilter :
00080 public
00081 UnaryFunctorImageFilter<TInputImage,TOutputImage,
00082 Functor::InvertIntensityTransform<
00083 typename TInputImage::PixelType,
00084 typename TOutputImage::PixelType> >
00085 {
00086 public:
00088 typedef InvertIntensityImageFilter Self;
00089 typedef UnaryFunctorImageFilter<TInputImage,TOutputImage,
00090 Functor::InvertIntensityTransform<
00091 typename TInputImage::PixelType,
00092 typename TOutputImage::PixelType> > Superclass;
00093 typedef SmartPointer<Self> Pointer;
00094 typedef SmartPointer<const Self> ConstPointer;
00095
00096 typedef typename TOutputImage::PixelType OutputPixelType;
00097 typedef typename TInputImage::PixelType InputPixelType;
00098 typedef typename NumericTraits<InputPixelType>::RealType RealType;
00099
00101 itkNewMacro(Self);
00102
00103 itkSetMacro( Maximum, InputPixelType );
00104 itkGetConstReferenceMacro( Maximum, InputPixelType );
00105
00107 void PrintSelf(std::ostream& os, Indent indent) const;
00108
00110 void BeforeThreadedGenerateData(void);
00111
00112 #ifdef ITK_USE_CONCEPT_CHECKING
00113
00114 itkConceptMacro(InputHasNumericTraitsCheck,
00115 (Concept::HasNumericTraits<InputPixelType>));
00116
00118 #endif
00119
00120 protected:
00121 InvertIntensityImageFilter();
00122 virtual ~InvertIntensityImageFilter() {};
00123
00124 private:
00125 InvertIntensityImageFilter(const Self&);
00126 void operator=(const Self&);
00127
00128 InputPixelType m_Maximum;
00129 };
00130
00131
00132
00133 }
00134
00135 #ifndef ITK_MANUAL_INSTANTIATION
00136 #include "itkInvertIntensityImageFilter.txx"
00137 #endif
00138
00139 #endif
00140