diff --git a/Code/SARPolarimetry/otbMultiChannelsPolarimetricSynthesisFilter.h b/Code/SARPolarimetry/otbMultiChannelsPolarimetricSynthesisFilter.h index 7eefc8d05a63e3cbbb13db7f6d5387c39055b606..9b8222298c306aba688eb89be7e8224a8f0a7ae7 100755 --- a/Code/SARPolarimetry/otbMultiChannelsPolarimetricSynthesisFilter.h +++ b/Code/SARPolarimetry/otbMultiChannelsPolarimetricSynthesisFilter.h @@ -182,10 +182,7 @@ private : ComplexArrayType m_Ei; /** Champs Electromagnetic Reflechi */ ComplexArrayType m_Er; - - /** Conversion coefficient Degre To Radian */ - static const double m_DTOR=M_PI/180; - + /** Architecture Type */ int m_ArchitectureType; diff --git a/Code/SARPolarimetry/otbMultiChannelsPolarimetricSynthesisFilter.txx b/Code/SARPolarimetry/otbMultiChannelsPolarimetricSynthesisFilter.txx index 15bad8b81394b1b8abcefe4853ed57d301955859..fe4de50f9016280dd6fe1adf424e69db82eb6e62 100755 --- a/Code/SARPolarimetry/otbMultiChannelsPolarimetricSynthesisFilter.txx +++ b/Code/SARPolarimetry/otbMultiChannelsPolarimetricSynthesisFilter.txx @@ -259,17 +259,20 @@ MultiChannelsPolarimetricSynthesisFilter<TInputImage,TOutputImage,TFunction> ComplexType Ei0,Ei1,Er0,Er1; ComplexArrayType AEi, AEr; - Ei0.real() = vcl_cos(m_DTOR*m_PsiI)*vcl_cos(m_DTOR*m_TauI); - Ei0.imag() = -vcl_sin(m_DTOR*m_PsiI)*vcl_sin(m_DTOR*m_TauI); + /** Conversion coefficient Degre To Radian */ + double DTOR=M_PI/180; + + Ei0.real() = vcl_cos(DTOR*m_PsiI)*vcl_cos(DTOR*m_TauI); + Ei0.imag() = -vcl_sin(DTOR*m_PsiI)*vcl_sin(DTOR*m_TauI); - Ei1.real() = vcl_sin(m_DTOR*m_PsiI)*vcl_cos(m_DTOR*m_TauI); - Ei1.imag() = vcl_cos(m_DTOR*m_PsiI)*vcl_sin(m_DTOR*m_TauI); + Ei1.real() = vcl_sin(DTOR*m_PsiI)*vcl_cos(DTOR*m_TauI); + Ei1.imag() = vcl_cos(DTOR*m_PsiI)*vcl_sin(DTOR*m_TauI); - Er0.real() = vcl_cos(m_DTOR*m_PsiR)*vcl_cos(m_DTOR*m_TauR); - Er0.imag() = -vcl_sin(m_DTOR*m_PsiR)*vcl_sin(m_DTOR*m_TauR); + Er0.real() = vcl_cos(DTOR*m_PsiR)*vcl_cos(DTOR*m_TauR); + Er0.imag() = -vcl_sin(DTOR*m_PsiR)*vcl_sin(DTOR*m_TauR); - Er1.real() = vcl_sin(m_DTOR*m_PsiR)*vcl_cos(m_DTOR*m_TauR); - Er1.imag() = vcl_cos(m_DTOR*m_PsiR)*vcl_sin(m_DTOR*m_TauR); + Er1.real() = vcl_sin(DTOR*m_PsiR)*vcl_cos(DTOR*m_TauR); + Er1.imag() = vcl_cos(DTOR*m_PsiR)*vcl_sin(DTOR*m_TauR); AEi[0]=Ei0; AEi[1]=Ei1; @@ -294,7 +297,7 @@ MultiChannelsPolarimetricSynthesisFilter<TInputImage,TOutputImage,TFunction> std::cout<<"Er1 im: "<<m_Er[1].imag()<<std::endl; std::cout<<"Er1 re: "<<m_Er[1].real()<<std::endl; - std::cout<<"DTOR: "<<m_DTOR<<std::endl; + std::cout<<"DTOR: "<<DTOR<<std::endl; } /** diff --git a/Code/SARPolarimetry/otbPolarimetricSynthesisFilter.h b/Code/SARPolarimetry/otbPolarimetricSynthesisFilter.h index f0667a927a58080cd883e3eb0d192bf6b364af48..728506bce15c8ae789fa37bfd195bda6a847196b 100755 --- a/Code/SARPolarimetry/otbPolarimetricSynthesisFilter.h +++ b/Code/SARPolarimetry/otbPolarimetricSynthesisFilter.h @@ -99,7 +99,11 @@ public: this->GetFunctor().SetEr(er); this->Modified(); } - + + void ForceCoPolar(); + + void ForceCrossPolar(); + protected: PolarimetricSynthesisFilter(); virtual ~PolarimetricSynthesisFilter() {}; @@ -115,7 +119,7 @@ protected: /** Verify and force the inputs, if only 2 or 3 channels are present */ void VerifyAndForceInputs(); - + void PrintSelf(std::ostream& os, itk::Indent indent) const; private: @@ -131,15 +135,16 @@ private: double m_PsiR; /** Tau Reflected */ double m_TauR; + + /** Emission mode */ + bool m_EmissionH; + bool m_EmissionV; /** Champs Electromagnetic Incident */ ComplexArrayType m_Ei; /** Champs Electromagnetic Reflechi */ ComplexArrayType m_Er; - - /** Conversion coefficient Degre To Radian */ - static const double m_DTOR=M_PI/180; - + }; } // end namespace otb diff --git a/Code/SARPolarimetry/otbPolarimetricSynthesisFilter.txx b/Code/SARPolarimetry/otbPolarimetricSynthesisFilter.txx index 8da4092d36b37d1a7dabf819ceda1904b67a3dd1..2033434957f2b1c2d03cf81fee468efc5b6eb311 100755 --- a/Code/SARPolarimetry/otbPolarimetricSynthesisFilter.txx +++ b/Code/SARPolarimetry/otbPolarimetricSynthesisFilter.txx @@ -91,6 +91,30 @@ PolarimetricSynthesisFilter<TInputImageHH,TInputImageHV,TInputImageVH,TInputImag Superclass::PrintSelf(os,indent); } +/** + * Force Copolar mode + */ +template <class TInputImageHH,class TInputImageHV,class TInputImageVH,class TInputImageVV,class TOutputImage,class TFunction > +void +PolarimetricSynthesisFilter<TInputImageHH,TInputImageHV,TInputImageVH,TInputImageVV,TOutputImage,TFunction> +::ForceCoPolar() +{ + this->SetPsiR(m_PsiI); + this->SetTauR(m_TauI); +} + +/** + * Force Crosspolar mode + */ +template <class TInputImageHH,class TInputImageHV,class TInputImageVH,class TInputImageVV,class TOutputImage,class TFunction > +void +PolarimetricSynthesisFilter<TInputImageHH,TInputImageHV,TInputImageVH,TInputImageVV,TOutputImage,TFunction> +::ForceCrossPolar() +{ + this->SetPsiR(m_PsiI+90); + this->SetTauR(-m_TauI); +} + /** * Computation of the electromagnetic fields Ei Er */ @@ -102,17 +126,20 @@ PolarimetricSynthesisFilter<TInputImageHH,TInputImageHV,TInputImageVH,TInputImag ComplexType Ei0,Ei1,Er0,Er1; ComplexArrayType AEi, AEr; - Ei0.real() = vcl_cos(m_DTOR*m_PsiI)*vcl_cos(m_DTOR*m_TauI); - Ei0.imag() = -vcl_sin(m_DTOR*m_PsiI)*vcl_sin(m_DTOR*m_TauI); + /** Conversion coefficient Degre To Radian */ + double DTOR=M_PI/180; + + Ei0.real() = vcl_cos(DTOR*m_PsiI)*vcl_cos(DTOR*m_TauI); + Ei0.imag() = -vcl_sin(DTOR*m_PsiI)*vcl_sin(DTOR*m_TauI); - Ei1.real() = vcl_sin(m_DTOR*m_PsiI)*vcl_cos(m_DTOR*m_TauI); - Ei1.imag() = vcl_cos(m_DTOR*m_PsiI)*vcl_sin(m_DTOR*m_TauI); + Ei1.real() = vcl_sin(DTOR*m_PsiI)*vcl_cos(DTOR*m_TauI); + Ei1.imag() = vcl_cos(DTOR*m_PsiI)*vcl_sin(DTOR*m_TauI); - Er0.real() = vcl_cos(m_DTOR*m_PsiR)*vcl_cos(m_DTOR*m_TauR); - Er0.imag() = -vcl_sin(m_DTOR*m_PsiR)*vcl_sin(m_DTOR*m_TauR); + Er0.real() = vcl_cos(DTOR*m_PsiR)*vcl_cos(DTOR*m_TauR); + Er0.imag() = -vcl_sin(DTOR*m_PsiR)*vcl_sin(DTOR*m_TauR); - Er1.real() = vcl_sin(m_DTOR*m_PsiR)*vcl_cos(m_DTOR*m_TauR); - Er1.imag() = vcl_cos(m_DTOR*m_PsiR)*vcl_sin(m_DTOR*m_TauR); + Er1.real() = vcl_sin(DTOR*m_PsiR)*vcl_cos(DTOR*m_TauR); + Er1.imag() = vcl_cos(DTOR*m_PsiR)*vcl_sin(DTOR*m_TauR); AEi[0]=Ei0; AEi[1]=Ei1; @@ -137,7 +164,7 @@ PolarimetricSynthesisFilter<TInputImageHH,TInputImageHV,TInputImageVH,TInputImag std::cout<<"Er1 im: "<<m_Er[1].imag()<<std::endl; std::cout<<"Er1 re: "<<m_Er[1].real()<<std::endl; - std::cout<<"DTOR: "<<m_DTOR<<std::endl; + std::cout<<"DTOR: "<<DTOR<<std::endl; } /** @@ -216,7 +243,7 @@ PolarimetricSynthesisFilter<TInputImageHH,TInputImageHV,TInputImageVH,TInputImag if ( ( this->GetInput(0)!=0 && this->GetInput(1)!=0 ) && ( this->GetInput(2)==0 && this->GetInput(3)==0 ) ) { - // Forcing HH and HV to zero + // Forcing VH and VV to zero typename VVInputImageType::Pointer inputVV = TInputImageVV::New(); typename VHInputImageType::Pointer inputVH = TInputImageVH::New(); typename VHInputImageType::IndexType start;