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