00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef __itkMagnitudeAndPhaseToComplexImageFilter_h
00019 #define __itkMagnitudeAndPhaseToComplexImageFilter_h
00020
00021 #include "itkBinaryFunctorImageFilter.h"
00022
00023 namespace itk
00024 {
00052 namespace Functor {
00053
00054 template< class TInput1, class TInput2, class TOutput>
00055 class MagnitudeAndPhaseToComplex
00056 {
00057 public:
00058 MagnitudeAndPhaseToComplex() {};
00059 ~MagnitudeAndPhaseToComplex() {};
00060 bool operator!=( const MagnitudeAndPhaseToComplex & ) const
00061 {
00062 return false;
00063 }
00064 bool operator==( const MagnitudeAndPhaseToComplex & other ) const
00065 {
00066 return !(*this != other);
00067 }
00068 inline std::complex<TOutput> operator()( const TInput1 & A, const TInput2 & B) const
00069 {
00070 return std::complex<TOutput>(std::polar(static_cast<TOutput>(A), static_cast<TOutput>(B)) );
00071 }
00072 };
00073 }
00074
00075 template <class TInputPixel1, class TInputPixel2, class TOutputPixel, unsigned int NDimension = 3>
00076 class ITK_EXPORT MagnitudeAndPhaseToComplexImageFilter :
00077 public BinaryFunctorImageFilter<
00078 Image < TInputPixel1, NDimension >,
00079 Image < TInputPixel2, NDimension >,
00080 Image < std::complex<TOutputPixel>, NDimension >,
00081 Functor::MagnitudeAndPhaseToComplex<
00082 TInputPixel1,
00083 TInputPixel2,
00084 TOutputPixel
00085 >
00086 >
00087 {
00088 public:
00090 typedef MagnitudeAndPhaseToComplexImageFilter Self;
00091
00092 typedef BinaryFunctorImageFilter<
00093 Image < TInputPixel1, NDimension >,
00094 Image < TInputPixel2, NDimension >,
00095 Image < std::complex<TOutputPixel>, NDimension >,
00096 Functor::MagnitudeAndPhaseToComplex<
00097 TInputPixel1,
00098 TInputPixel2,
00099 TOutputPixel > > Superclass;
00100
00101 typedef SmartPointer<Self> Pointer;
00102 typedef SmartPointer<const Self> ConstPointer;
00103
00105 itkNewMacro(Self);
00106
00108 itkTypeMacro(MagnitudeAndPhaseToComplexImageFilter, BinaryFunctorImageFilter);
00109
00110 #ifdef ITK_USE_CONCEPT_CHECKING
00111
00112 itkConceptMacro(Input1ConvertibleToDoubleCheck,
00113 (Concept::Convertible<TInputPixel1, double>));
00114 itkConceptMacro(Input2ConvertibleToDoubleCheck,
00115 (Concept::Convertible<TInputPixel2, double>));
00116 itkConceptMacro(DoubleConvertibleToOutputCheck,
00117 (Concept::Convertible<double, TOutputPixel>));
00118
00120 #endif
00121
00122 protected:
00123 MagnitudeAndPhaseToComplexImageFilter() {}
00124 virtual ~MagnitudeAndPhaseToComplexImageFilter() {}
00125
00126 private:
00127 MagnitudeAndPhaseToComplexImageFilter(const Self&);
00128 void operator=(const Self&);
00129
00130 };
00131
00132 }
00133
00134
00135 #endif
00136