18 #ifndef __otbPolarimetricSynthesisFilter_txx
19 #define __otbPolarimetricSynthesisFilter_txx
30 template <
class TInputImageHH,
class TInputImageHV,
class TInputImageVH,
class TInputImageVV,
class TOutputImage,
35 this->SetNumberOfRequiredInputs(0);
36 this->SetNumberOfInputs(4);
39 m_PresentInputImages[0] =
false;
40 m_PresentInputImages[1] =
false;
41 m_PresentInputImages[2] =
false;
42 m_PresentInputImages[3] =
false;
46 template <
class TInputImageHH,
class TInputImageHV,
class TInputImageVH,
class TInputImageVV,
class TOutputImage,
53 if (m_PresentInputImages[0])
55 this->GetOutput()->CopyInformation(this->GetInput(0));
58 else if (m_PresentInputImages[2])
60 this->GetOutput()->CopyInformation(this->GetInput(2));
64 itkExceptionMacro(<<
"Bad input polarization images: neither HH image nor VH image is set!");
71 template <
class TInputImageHH,
class TInputImageHV,
class TInputImageVH,
class TInputImageVV,
class TOutputImage,
78 this->SetInput1(image);
79 m_PresentInputImages[0] =
true;
85 template <
class TInputImageHH,
class TInputImageHV,
class TInputImageVH,
class TInputImageVV,
class TOutputImage,
91 this->SetInput2(image);
92 m_PresentInputImages[1] =
true;
98 template <
class TInputImageHH,
class TInputImageHV,
class TInputImageVH,
class TInputImageVV,
class TOutputImage,
104 this->SetInput3(image);
105 m_PresentInputImages[2] =
true;
111 template <
class TInputImageHH,
class TInputImageHV,
class TInputImageVH,
class TInputImageVV,
class TOutputImage,
117 this->SetInput4(image);
118 m_PresentInputImages[3] =
true;
124 template <
class TInputImageHH,
class TInputImageHV,
class TInputImageVH,
class TInputImageVV,
class TOutputImage,
130 Superclass::PrintSelf(os, indent);
132 os <<
"PsiI: " << m_PsiI << std::endl;
133 os <<
"KhiI: " << m_KhiI << std::endl;
134 os <<
"PsiR: " << m_PsiR << std::endl;
135 os <<
"KhiR: " << m_KhiR << std::endl;
137 os <<
"Ei0 im: " << m_Ei[0].imag() << std::endl;
138 os <<
"Ei0 re: " << m_Ei[0].real() << std::endl;
139 os <<
"Ei1 im: " << m_Ei[1].imag() << std::endl;
140 os <<
"Ei1 re: " << m_Ei[1].real() << std::endl;
142 os <<
"Er0 im: " << m_Er[0].imag() << std::endl;
143 os <<
"Er0 re: " << m_Er[0].real() << std::endl;
144 os <<
"Er1 im: " << m_Er[1].imag() << std::endl;
145 os <<
"Er1 re: " << m_Er[1].real() << std::endl;
151 template <
class TInputImageHH,
class TInputImageHV,
class TInputImageVH,
class TInputImageVV,
class TOutputImage,
165 template <
class TInputImageHH,
class TInputImageHV,
class TInputImageVH,
class TInputImageVV,
class TOutputImage,
171 SetPsiR(m_PsiI + 90);
179 template <
class TInputImageHH,
class TInputImageHV,
class TInputImageVH,
class TInputImageVV,
class TOutputImage,
186 switch (m_ArchitectureType->GetArchitectureType())
201 itkExceptionMacro(
"Only the HH and VV channels are available : Polarimetric synthesis is not supported !");
205 itkExceptionMacro(
"Unknown architecture : Polarimetric synthesis is impossible !");
213 if (GetMode() == 1) ForceCoPolar();
214 else if (GetMode() == 2) ForceCrossPolar();
221 template <
class TInputImageHH,
class TInputImageHV,
class TInputImageVH,
class TInputImageVV,
class TOutputImage,
233 real = vcl_cos(DTOR * m_PsiI) * vcl_cos(DTOR * m_KhiI);
234 imag = -vcl_sin(DTOR * m_PsiI) * vcl_sin(DTOR * m_KhiI);
237 real = vcl_sin(DTOR * m_PsiI) * vcl_cos(DTOR * m_KhiI);
238 imag = vcl_cos(DTOR * m_PsiI) * vcl_sin(DTOR * m_KhiI);
241 real = vcl_cos(DTOR * m_PsiR) * vcl_cos(DTOR * m_KhiR);
242 imag = -vcl_sin(DTOR * m_PsiR) * vcl_sin(DTOR * m_KhiR);
245 real = vcl_sin(DTOR * m_PsiR) * vcl_cos(DTOR * m_KhiR);
246 imag = vcl_cos(DTOR * m_PsiR) * vcl_sin(DTOR * m_KhiR);
262 template <
class TInputImageHH,
class TInputImageHV,
class TInputImageVH,
class TInputImageVV,
class TOutputImage,
270 m_ArchitectureType->DetermineArchitecture(m_PresentInputImages);
273 VerifyAndForceInputs();
276 ComputeElectromagneticFields();
283 template <
class TInputImageHH,
class TInputImageHV,
class TInputImageVH,
class TInputImageVV,
class TOutputImage,
295 switch (m_ArchitectureType->GetArchitectureType())
326 outputIt.
Set(m_Gain *
327 Superclass::GetFunctor() (inputItHH.
Get(), inputItHV.
Get(), inputItVH.
Get(), inputItVV.
Get()));
333 progress.CompletedPixel();
361 outputIt.
Set(m_Gain *
362 Superclass::GetFunctor() (inputItHH.
Get(), inputItHV.
Get(), inputItHV.
Get(), inputItVV.
Get()));
367 progress.CompletedPixel();
395 outputIt.
Set(m_Gain *
396 Superclass::GetFunctor() (inputItHH.
Get(), inputItVH.
Get(), inputItVH.
Get(), inputItVV.
Get()));
401 progress.CompletedPixel();
425 outputIt.
Set(m_Gain * Superclass::GetFunctor() (inputItHH.
Get(), inputItHV.
Get(), 0, 0));
429 progress.CompletedPixel();
452 outputIt.
Set(m_Gain * Superclass::GetFunctor() (0, 0, inputItVH.
Get(), inputItVV.
Get()));
456 progress.CompletedPixel();
461 itkExceptionMacro(
"Unknown architecture : Polarimetric synthesis is impossible !");