Orfeo Toolbox  3.16
otbPolarimetricSynthesisFilter.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: ORFEO Toolbox
4  Language: C++
5  Date: $Date$
6  Version: $Revision$
7 
8 
9  Copyright (c) Centre National d'Etudes Spatiales. All rights reserved.
10  See OTBCopyright.txt for details.
11 
12 
13  This software is distributed WITHOUT ANY WARRANTY; without even
14  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15  PURPOSE. See the above copyright notices for more information.
16 
17 =========================================================================*/
18 #ifndef __otbPolarimetricSynthesisFilter_h
19 #define __otbPolarimetricSynthesisFilter_h
20 
23 #include "otbPolarimetricData.h"
24 #include "itkFixedArray.h"
25 #include <complex>
26 
27 namespace otb
28 {
29 
64 template <class TInputImageHH, class TInputImageHV, class TInputImageVH, class TInputImageVV, class TOutputImage,
65  class TFunction = Functor::PolarimetricSynthesisFunctor<
66  typename TInputImageHH::PixelType,
67  typename TInputImageHV::PixelType,
68  typename TInputImageVH::PixelType,
69  typename TInputImageVV::PixelType,
70  typename TOutputImage::PixelType> >
72  TInputImageHV, TInputImageVH,
73  TInputImageVV, TOutputImage,
74  TFunction>
75 {
76 public:
77 
80  typedef otb::QuaternaryFunctorImageFilter<TInputImageHH, TInputImageHV,
81  TInputImageVH, TInputImageVV, TOutputImage, TFunction> Superclass;
84 
86  itkNewMacro(Self);
87 
90 
92  typedef std::complex <double> InputPixelType;
103  typedef typename OutputImageType::Pointer OutputImagePointer;
104  typedef typename OutputImageType::RegionType OutputImageRegionType;
106  typedef typename std::complex <double> ComplexType;
108 
109  void SetInputHH(const TInputImageHH * image);
110  void SetInputHV(const TInputImageHV * image);
111  void SetInputVH(const TInputImageVH * image);
112  void SetInputVV(const TInputImageVV * image);
113 
115  itkSetMacro(PsiI, double);
116  itkGetMacro(PsiI, double);
118  itkSetMacro(KhiI, double);
119  itkGetMacro(KhiI, double);
121  itkSetMacro(PsiR, double);
122  itkGetMacro(PsiR, double);
124  itkSetMacro(KhiR, double);
125  itkGetMacro(KhiR, double);
127  itkSetMacro(Mode, int);
128  itkGetMacro(Mode, int);
130  itkSetMacro(Gain, double);
132  void SetEi(ComplexArrayType ei)
133  {
134  m_Ei = ei;
135  this->GetFunctor().SetEi(ei);
136  this->Modified();
137  }
139  void SetEr(ComplexArrayType er)
140  {
141  m_Er = er;
142  this->GetFunctor().SetEr(er);
143  this->Modified();
144  }
146  void ForceCoPolar();
148  void ForceCrossPolar();
149 
150 protected:
155 
156  virtual void GenerateOutputInformation();
157 
158  virtual void BeforeThreadedGenerateData();
159 
166  virtual void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
167  int threadId);
168 
170  void ComputeElectromagneticFields();
171 
173  void VerifyAndForceInputs();
174 
175  void PrintSelf(std::ostream& os, itk::Indent indent) const;
176 
177 private:
178 
179  PolarimetricSynthesisFilter(const Self &); //purposely not implemented
180  void operator =(const Self&); //purposely not implemented
181 
183  double m_PsiI;
185  double m_KhiI;
187  double m_PsiR;
189  double m_KhiR;
190 
192  double m_Gain;
193 
195  int m_Mode;
196 
201 
204  bool m_PresentInputImages[4];
205 
206 };
207 
208 } // end namespace otb
209 
210 #ifndef OTB_MANUAL_INSTANTIATION
212 #endif
213 
214 #endif

Generated at Sun May 19 2013 00:44:20 for Orfeo Toolbox with doxygen 1.8.3.1