From 5cf64354098bb36964893c0c46570e53e3ce5ef4 Mon Sep 17 00:00:00 2001
From: Christophe Palmann <christophe.palmann@c-s.fr>
Date: Thu, 1 Oct 2015 16:52:07 +0200
Subject: [PATCH] ENH: otbSARConvert, float to double pixels

---
 .../AppSARConvert/app/otbSARConvert.cxx       | 212 +++++++++---------
 1 file changed, 107 insertions(+), 105 deletions(-)

diff --git a/Modules/Applications/AppSARConvert/app/otbSARConvert.cxx b/Modules/Applications/AppSARConvert/app/otbSARConvert.cxx
index 3026d6db64..3b6d7cb7ad 100644
--- a/Modules/Applications/AppSARConvert/app/otbSARConvert.cxx
+++ b/Modules/Applications/AppSARConvert/app/otbSARConvert.cxx
@@ -65,113 +65,113 @@ public:
 
   
   //Monostatic case
-    typedef otb::Functor::SinclairToReciprocalCoherencyMatrixFunctor<ComplexFloatImageType::PixelType,
-                                    ComplexFloatImageType::PixelType,
-                                    ComplexFloatImageType::PixelType,
-                                    ComplexFloatVectorImageType::PixelType>								RCoherencyFunctorType;
+    typedef otb::Functor::SinclairToReciprocalCoherencyMatrixFunctor<ComplexDoubleImageType::PixelType,
+                                    ComplexDoubleImageType::PixelType,
+                                    ComplexDoubleImageType::PixelType,
+                                    ComplexDoubleVectorImageType::PixelType>								RCoherencyFunctorType;
                                     
-    typedef otb::Functor::SinclairToReciprocalCovarianceMatrixFunctor<ComplexFloatImageType::PixelType,
-                                    ComplexFloatImageType::PixelType,
-                                    ComplexFloatImageType::PixelType,
-                                    ComplexFloatVectorImageType::PixelType>								RCovarianceFunctorType;
+    typedef otb::Functor::SinclairToReciprocalCovarianceMatrixFunctor<ComplexDoubleImageType::PixelType,
+                                    ComplexDoubleImageType::PixelType,
+                                    ComplexDoubleImageType::PixelType,
+                                    ComplexDoubleVectorImageType::PixelType>								RCovarianceFunctorType;
                                     
-    typedef otb::Functor::SinclairToReciprocalCircularCovarianceMatrixFunctor<ComplexFloatImageType::PixelType,
-                                    ComplexFloatImageType::PixelType,
-                                    ComplexFloatImageType::PixelType,
-                                    ComplexFloatVectorImageType::PixelType>								RCircularCovarianceFunctorType;
+    typedef otb::Functor::SinclairToReciprocalCircularCovarianceMatrixFunctor<ComplexDoubleImageType::PixelType,
+                                    ComplexDoubleImageType::PixelType,
+                                    ComplexDoubleImageType::PixelType,
+                                    ComplexDoubleVectorImageType::PixelType>								RCircularCovarianceFunctorType;
                                                                   
                                     								
-    typedef SinclairReciprocalImageFilter<ComplexFloatImageType, 
-											 ComplexFloatImageType, 
-											 ComplexFloatImageType, 
-											 ComplexFloatVectorImageType, 
+    typedef SinclairReciprocalImageFilter<ComplexDoubleImageType, 
+											 ComplexDoubleImageType, 
+											 ComplexDoubleImageType, 
+											 ComplexDoubleVectorImageType, 
 											 RCoherencyFunctorType > 									RCohSRFilterType;
 											 
 											 
-    typedef SinclairReciprocalImageFilter<ComplexFloatImageType, 
-											 ComplexFloatImageType, 
-											 ComplexFloatImageType, 
-											 ComplexFloatVectorImageType, 
+    typedef SinclairReciprocalImageFilter<ComplexDoubleImageType, 
+											 ComplexDoubleImageType, 
+											 ComplexDoubleImageType, 
+											 ComplexDoubleVectorImageType, 
 											 RCovarianceFunctorType > 									RCovSRFilterType;
 											 
-	typedef SinclairReciprocalImageFilter<ComplexFloatImageType, 
-											 ComplexFloatImageType, 
-											 ComplexFloatImageType, 
-											 ComplexFloatVectorImageType, 
+	typedef SinclairReciprocalImageFilter<ComplexDoubleImageType, 
+											 ComplexDoubleImageType, 
+											 ComplexDoubleImageType, 
+											 ComplexDoubleVectorImageType, 
 											 RCircularCovarianceFunctorType > 							RCCSRFilterType;
 											 
 											 
-    typedef otb::ReciprocalCoherencyToReciprocalMuellerImageFilter<ComplexFloatVectorImageType, FloatVectorImageType> RCRMFilterType;
+    typedef otb::ReciprocalCoherencyToReciprocalMuellerImageFilter<ComplexDoubleVectorImageType, DoubleVectorImageType> RCRMFilterType;
 	
-	typedef otb::ReciprocalCovarianceToCoherencyDegreeImageFilter<ComplexFloatVectorImageType, ComplexFloatVectorImageType> RCCDFilterType;
+	typedef otb::ReciprocalCovarianceToCoherencyDegreeImageFilter<ComplexDoubleVectorImageType, ComplexDoubleVectorImageType> RCCDFilterType;
 	
-	typedef otb::ReciprocalCovarianceToReciprocalCoherencyImageFilter<ComplexFloatVectorImageType, ComplexFloatVectorImageType> RCRCFilterType;
+	typedef otb::ReciprocalCovarianceToReciprocalCoherencyImageFilter<ComplexDoubleVectorImageType, ComplexDoubleVectorImageType> RCRCFilterType;
 	
-	typedef otb::ReciprocalLinearCovarianceToReciprocalCircularCovarianceImageFilter<ComplexFloatVectorImageType, ComplexFloatVectorImageType> RLCRCCFilterType;
+	typedef otb::ReciprocalLinearCovarianceToReciprocalCircularCovarianceImageFilter<ComplexDoubleVectorImageType, ComplexDoubleVectorImageType> RLCRCCFilterType;
 											 
   
 	//Bistatic case
-	typedef otb::Functor::SinclairToCoherencyMatrixFunctor<ComplexFloatImageType::PixelType,
-                                    ComplexFloatImageType::PixelType,
-                                    ComplexFloatImageType::PixelType,
-                                    ComplexFloatImageType::PixelType,
-                                    ComplexFloatVectorImageType::PixelType>								CoherencyFunctorType;
+	typedef otb::Functor::SinclairToCoherencyMatrixFunctor<ComplexDoubleImageType::PixelType,
+                                    ComplexDoubleImageType::PixelType,
+                                    ComplexDoubleImageType::PixelType,
+                                    ComplexDoubleImageType::PixelType,
+                                    ComplexDoubleVectorImageType::PixelType>								CoherencyFunctorType;
                                     
                                     
-	typedef otb::Functor::SinclairToCovarianceMatrixFunctor<ComplexFloatImageType::PixelType,
-                                    ComplexFloatImageType::PixelType,
-                                    ComplexFloatImageType::PixelType,
-                                    ComplexFloatImageType::PixelType,
-                                    ComplexFloatVectorImageType::PixelType>								CovarianceFunctorType;
+	typedef otb::Functor::SinclairToCovarianceMatrixFunctor<ComplexDoubleImageType::PixelType,
+                                    ComplexDoubleImageType::PixelType,
+                                    ComplexDoubleImageType::PixelType,
+                                    ComplexDoubleImageType::PixelType,
+                                    ComplexDoubleVectorImageType::PixelType>								CovarianceFunctorType;
                                     
                                    
-	typedef otb::Functor::SinclairToCircularCovarianceMatrixFunctor<ComplexFloatImageType::PixelType,
-                                    ComplexFloatImageType::PixelType,
-                                    ComplexFloatImageType::PixelType,
-                                    ComplexFloatImageType::PixelType,
-                                    ComplexFloatVectorImageType::PixelType>								CircularCovarianceFunctorType;
+	typedef otb::Functor::SinclairToCircularCovarianceMatrixFunctor<ComplexDoubleImageType::PixelType,
+                                    ComplexDoubleImageType::PixelType,
+                                    ComplexDoubleImageType::PixelType,
+                                    ComplexDoubleImageType::PixelType,
+                                    ComplexDoubleVectorImageType::PixelType>								CircularCovarianceFunctorType;
                                     
                                     	
-    typedef otb::Functor::SinclairToMuellerMatrixFunctor<ComplexFloatImageType::PixelType,
-                                    ComplexFloatImageType::PixelType,
-                                    ComplexFloatImageType::PixelType,
-                                    ComplexFloatImageType::PixelType,
-                                    FloatVectorImageType::PixelType>									MuellerFunctorType;
+    typedef otb::Functor::SinclairToMuellerMatrixFunctor<ComplexDoubleImageType::PixelType,
+                                    ComplexDoubleImageType::PixelType,
+                                    ComplexDoubleImageType::PixelType,
+                                    ComplexDoubleImageType::PixelType,
+                                    DoubleVectorImageType::PixelType>									MuellerFunctorType;
                                     
     
-    typedef SinclairImageFilter<ComplexFloatImageType, 
-											 ComplexFloatImageType, 
-											 ComplexFloatImageType,
-											 ComplexFloatImageType, 
-											 ComplexFloatVectorImageType, 
+    typedef SinclairImageFilter<ComplexDoubleImageType, 
+											 ComplexDoubleImageType, 
+											 ComplexDoubleImageType,
+											 ComplexDoubleImageType, 
+											 ComplexDoubleVectorImageType, 
 											 CoherencyFunctorType > 									CohSRFilterType;
 											 
 											 
-    typedef SinclairImageFilter<ComplexFloatImageType, 
-											 ComplexFloatImageType,
-											 ComplexFloatImageType, 
-											 ComplexFloatImageType, 
-											 ComplexFloatVectorImageType, 
+    typedef SinclairImageFilter<ComplexDoubleImageType, 
+											 ComplexDoubleImageType,
+											 ComplexDoubleImageType, 
+											 ComplexDoubleImageType, 
+											 ComplexDoubleVectorImageType, 
 											 CovarianceFunctorType > 									CovSRFilterType;
 											 
-	typedef SinclairImageFilter<ComplexFloatImageType, 
-											 ComplexFloatImageType, 
-											 ComplexFloatImageType,
-											 ComplexFloatImageType, 
-											 ComplexFloatVectorImageType, 
+	typedef SinclairImageFilter<ComplexDoubleImageType, 
+											 ComplexDoubleImageType, 
+											 ComplexDoubleImageType,
+											 ComplexDoubleImageType, 
+											 ComplexDoubleVectorImageType, 
 											 CircularCovarianceFunctorType > 							CCSRFilterType;
                                     
-	typedef SinclairImageFilter<ComplexFloatImageType, 
-											 ComplexFloatImageType, 
-											 ComplexFloatImageType,
-											 ComplexFloatImageType, 
-											 FloatVectorImageType, 
+	typedef SinclairImageFilter<ComplexDoubleImageType, 
+											 ComplexDoubleImageType, 
+											 ComplexDoubleImageType,
+											 ComplexDoubleImageType, 
+											 DoubleVectorImageType, 
 											 MuellerFunctorType > 										MSRFilterType;
 											 
 											 
-	typedef otb::MuellerToReciprocalCovarianceImageFilter<FloatVectorImageType, ComplexFloatVectorImageType>  MRCFilterType;									 
+	typedef otb::MuellerToReciprocalCovarianceImageFilter<DoubleVectorImageType, ComplexDoubleVectorImageType>  MRCFilterType;									 
 	
-	typedef otb::MuellerToPolarisationDegreeAndPowerImageFilter<FloatVectorImageType, FloatVectorImageType>   MPDPFilterType;
+	typedef otb::MuellerToPolarisationDegreeAndPowerImageFilter<DoubleVectorImageType, DoubleVectorImageType>   MPDPFilterType;
   
   
 
@@ -497,12 +497,12 @@ private:
 	  	m_RCohSRFilter = RCohSRFilterType::New();
 	  	
 	    if (inhv)
-		  m_RCohSRFilter->SetInputHV_VH(GetParameterComplexFloatImage("inhv"));
+		  m_RCohSRFilter->SetInputHV_VH(GetParameterComplexDoubleImage("inhv"));
 	    else if (invh)
-		  m_RCohSRFilter->SetInputHV_VH(GetParameterComplexFloatImage("invh"));
+		  m_RCohSRFilter->SetInputHV_VH(GetParameterComplexDoubleImage("invh"));
 	  	
-		m_RCohSRFilter->SetInputHH(GetParameterComplexFloatImage("inhh"));
-		m_RCohSRFilter->SetInputVV(GetParameterComplexFloatImage("invv"));
+		m_RCohSRFilter->SetInputHH(GetParameterComplexDoubleImage("inhh"));
+		m_RCohSRFilter->SetInputVV(GetParameterComplexDoubleImage("invv"));
 		
 		SetParameterComplexOutputImage("outc", m_RCohSRFilter->GetOutput() ); // input : 3 x 1 complex channel | output :  6 complex channels
 		
@@ -514,12 +514,12 @@ private:
 		m_RCovSRFilter = RCovSRFilterType::New();
 		
 		if (inhv)
-		  m_RCohSRFilter->SetInputHV_VH(GetParameterComplexFloatImage("inhv"));
+		  m_RCovSRFilter->SetInputHV_VH(GetParameterComplexDoubleImage("inhv"));
 	    else if (invh)
-		  m_RCohSRFilter->SetInputHV_VH(GetParameterComplexFloatImage("invh"));
+		  m_RCovSRFilter->SetInputHV_VH(GetParameterComplexDoubleImage("invh"));
 		
-		m_RCovSRFilter->SetInputHH(GetParameterComplexFloatImage("inhh"));
-		m_RCovSRFilter->SetInputVV(GetParameterComplexFloatImage("invv"));
+		m_RCovSRFilter->SetInputHH(GetParameterComplexDoubleImage("inhh"));
+		m_RCovSRFilter->SetInputVV(GetParameterComplexDoubleImage("invv"));
 		
 		SetParameterComplexOutputImage("outc", m_RCovSRFilter->GetOutput() ); // input : 3 x 1 complex channel | output :  6 complex channels
 		
@@ -532,12 +532,12 @@ private:
 		m_RCCSRFilter = RCCSRFilterType::New();
 		
 		if (inhv)
-		  m_RCohSRFilter->SetInputHV_VH(GetParameterComplexFloatImage("inhv"));
+		  m_RCCSRFilter->SetInputHV_VH(GetParameterComplexDoubleImage("inhv"));
 	    else if (invh)
-		  m_RCohSRFilter->SetInputHV_VH(GetParameterComplexFloatImage("invh"));
+		  m_RCCSRFilter->SetInputHV_VH(GetParameterComplexDoubleImage("invh"));
 		
-		m_RCCSRFilter->SetInputHH(GetParameterComplexFloatImage("inhh"));
-		m_RCCSRFilter->SetInputVV(GetParameterComplexFloatImage("invv"));
+		m_RCCSRFilter->SetInputHH(GetParameterComplexDoubleImage("inhh"));
+		m_RCCSRFilter->SetInputVV(GetParameterComplexDoubleImage("invv"));
 		
 		SetParameterComplexOutputImage("outc", m_RCCSRFilter->GetOutput() ); // input : 3 x 1 complex channel | output :  6 complex channels
 		
@@ -547,7 +547,7 @@ private:
 	    case 3: // ReciprocalCoherencyToReciprocalMuellerImageFilter
 		
 		m_RCRMFilter = RCRMFilterType::New();
-		m_RCRMFilter->SetInput(GetParameterComplexFloatVectorImage("inc"));
+		m_RCRMFilter->SetInput(GetParameterComplexDoubleVectorImage("inc"));
 		
 		SetParameterOutputImage("outf", m_RCRMFilter->GetOutput() ); // input : 6 complex channels | 16 real channels
 		
@@ -558,7 +558,7 @@ private:
 		case 4: // ReciprocalCovarianceToCoherencyDegreeImageFilter
 		
 		m_RCCDFilter = RCCDFilterType::New();
-		m_RCCDFilter->SetInput(GetParameterComplexFloatVectorImage("inc"));
+		m_RCCDFilter->SetInput(GetParameterComplexDoubleVectorImage("inc"));
 		
 		SetParameterComplexOutputImage("outc", m_RCCDFilter->GetOutput() ); // input : 6 complex channels | 3 complex channels
 		
@@ -568,7 +568,7 @@ private:
 	    case 5: // ReciprocalCovarianceToReciprocalCoherencyImageFilter
 		
 		m_RCRCFilter = RCRCFilterType::New();
-		m_RCRCFilter->SetInput(GetParameterComplexFloatVectorImage("inc"));
+		m_RCRCFilter->SetInput(GetParameterComplexDoubleVectorImage("inc"));
 		
 		SetParameterComplexOutputImage("outc", m_RCRCFilter->GetOutput() ); // input : 6 complex channels | 6 complex channels
 		
@@ -579,7 +579,7 @@ private:
 	    case 6: // ReciprocalLinearCovarianceToReciprocalCircularCovarianceImageFilter
 		
 		m_RLCRCCFilter = RLCRCCFilterType::New();
-		m_RLCRCCFilter->SetInput(GetParameterComplexFloatVectorImage("inc"));
+		m_RLCRCCFilter->SetInput(GetParameterComplexDoubleVectorImage("inc"));
 		
 		SetParameterComplexOutputImage("outc", m_RLCRCCFilter->GetOutput() ); // input : 6 complex channels | output : 6 complex channels
 		
@@ -590,7 +590,7 @@ private:
 		
 		m_MRCFilter = MRCFilterType::New();
 		
-		m_MRCFilter->SetInput(GetParameterFloatVectorImage("inf"));
+		m_MRCFilter->SetInput(GetParameterDoubleVectorImage("inf"));
 		
 		SetParameterComplexOutputImage("outc", m_MRCFilter->GetOutput() ); // input : 16 real channels | output : 6 complex channels
 		
@@ -605,10 +605,10 @@ private:
 			
 	  	m_CohSRFilter = CohSRFilterType::New();
 	  	
-		m_CohSRFilter->SetInputHH(GetParameterComplexFloatImage("inhh"));
-		m_CohSRFilter->SetInputHV(GetParameterComplexFloatImage("inhv"));
-		m_CohSRFilter->SetInputVH(GetParameterComplexFloatImage("invh"));
-		m_CohSRFilter->SetInputVV(GetParameterComplexFloatImage("invv"));
+		m_CohSRFilter->SetInputHH(GetParameterComplexDoubleImage("inhh"));
+		m_CohSRFilter->SetInputHV(GetParameterComplexDoubleImage("inhv"));
+		m_CohSRFilter->SetInputVH(GetParameterComplexDoubleImage("invh"));
+		m_CohSRFilter->SetInputVV(GetParameterComplexDoubleImage("invv"));
 		
 		SetParameterComplexOutputImage("outc", m_CohSRFilter->GetOutput() ); // input : 4 x 1 complex channel | 10 complex channels
 		
@@ -620,10 +620,10 @@ private:
 		
 		m_CovSRFilter = CovSRFilterType::New();
 		
-		m_CovSRFilter->SetInputHH(GetParameterComplexFloatImage("inhh"));
-		m_CovSRFilter->SetInputHV(GetParameterComplexFloatImage("inhv"));
-		m_CovSRFilter->SetInputVH(GetParameterComplexFloatImage("invh"));
-		m_CovSRFilter->SetInputVV(GetParameterComplexFloatImage("invv"));
+		m_CovSRFilter->SetInputHH(GetParameterComplexDoubleImage("inhh"));
+		m_CovSRFilter->SetInputHV(GetParameterComplexDoubleImage("inhv"));
+		m_CovSRFilter->SetInputVH(GetParameterComplexDoubleImage("invh"));
+		m_CovSRFilter->SetInputVV(GetParameterComplexDoubleImage("invv"));
 		
 		SetParameterComplexOutputImage("outc", m_CovSRFilter->GetOutput() ); // input : 4 x 1 complex channel | output : 10 complex channels
 		
@@ -634,10 +634,10 @@ private:
 		
 		m_CCSRFilter = CCSRFilterType::New();
 		
-		m_CCSRFilter->SetInputHH(GetParameterComplexFloatImage("inhh"));
-		m_CCSRFilter->SetInputHV(GetParameterComplexFloatImage("inhv"));
-		m_CCSRFilter->SetInputVH(GetParameterComplexFloatImage("invh"));
-		m_CCSRFilter->SetInputVV(GetParameterComplexFloatImage("invv"));
+		m_CCSRFilter->SetInputHH(GetParameterComplexDoubleImage("inhh"));
+		m_CCSRFilter->SetInputHV(GetParameterComplexDoubleImage("inhv"));
+		m_CCSRFilter->SetInputVH(GetParameterComplexDoubleImage("invh"));
+		m_CCSRFilter->SetInputVV(GetParameterComplexDoubleImage("invv"));
 		
 		SetParameterComplexOutputImage("outc", m_CCSRFilter->GetOutput() ); // input : 4 x 1 complex channel | output : 10 complex channels
 		
@@ -650,13 +650,13 @@ private:
 		
 				
 		case 11: // SinclairToMueller
-		
+		std::cout << "taloula 1" << std::endl;
 		m_MSRFilter = MSRFilterType::New();
 		
-		m_MSRFilter->SetInputHH(GetParameterComplexFloatImage("inhh"));
-		m_MSRFilter->SetInputHV(GetParameterComplexFloatImage("inhv"));
-		m_MSRFilter->SetInputVH(GetParameterComplexFloatImage("invh"));
-		m_MSRFilter->SetInputVV(GetParameterComplexFloatImage("invv"));
+		m_MSRFilter->SetInputHH(GetParameterComplexDoubleImage("inhh"));
+		m_MSRFilter->SetInputHV(GetParameterComplexDoubleImage("inhv"));
+		m_MSRFilter->SetInputVH(GetParameterComplexDoubleImage("invh"));
+		m_MSRFilter->SetInputVV(GetParameterComplexDoubleImage("invv"));
 		
 		SetParameterOutputImage("outf", m_MSRFilter->GetOutput() ); // input : 4 x 1 complex channel | output : 16 real channels
 		
@@ -666,7 +666,7 @@ private:
 		case 12: // MuellerToPolarisationDegreeAndPowerImageFilter
 		m_MPDPFilter = MPDPFilterType::New();
 		
-		m_MPDPFilter->SetInput(GetParameterFloatVectorImage("inf"));
+		m_MPDPFilter->SetInput(GetParameterDoubleVectorImage("inf"));
 		
 		SetParameterOutputImage("outf", m_MPDPFilter->GetOutput() ); //  input : 16 real channels | output : 4 real channels
 		
@@ -692,6 +692,8 @@ private:
   CovSRFilterType::Pointer m_CovSRFilter;
   CCSRFilterType::Pointer  m_CCSRFilter;
   MSRFilterType::Pointer   m_MSRFilter;
+  
+  //Both cases
   MRCFilterType::Pointer   m_MRCFilter;
   MPDPFilterType::Pointer  m_MPDPFilter;
   
-- 
GitLab