From 2d4027c27cc96e208939359e57bea9bf2e94ced4 Mon Sep 17 00:00:00 2001
From: Mickael Savinaud <mickael.savinaud@c-s.fr>
Date: Tue, 13 May 2014 12:31:25 +0200
Subject: [PATCH] ENH: reactivate the adjency effect computation by default no
 adjency effect is computed (as previous even if the checkbox is set by
 default correct some strange mistake about the name of parameters

---
 .../Radiometry/otbOpticalCalibration.cxx      | 94 +++++++++++--------
 1 file changed, 53 insertions(+), 41 deletions(-)

diff --git a/Applications/Radiometry/otbOpticalCalibration.cxx b/Applications/Radiometry/otbOpticalCalibration.cxx
index b84cb8487a..0ec37c97fa 100644
--- a/Applications/Radiometry/otbOpticalCalibration.cxx
+++ b/Applications/Radiometry/otbOpticalCalibration.cxx
@@ -100,7 +100,7 @@ public:
   typedef otb::SurfaceAdjacencyEffect6SCorrectionSchemeFilter<DoubleVectorImageType,DoubleVectorImageType>
   SurfaceAdjacencyEffect6SCorrectionSchemeFilterType;
 
-  typedef otb::GroundSpacingImageFunction<DoubleVectorImageType> GroundSpacingImageType;
+  typedef otb::GroundSpacingImageFunction<FloatVectorImageType> GroundSpacingImageType;
 
   typedef DoubleVectorImageType::IndexType   IndexType;
   typedef GroundSpacingImageType::FloatType  FloatType;
@@ -284,6 +284,7 @@ private:
     SetParameterDescription("atmo.radius","Window radius for adjacency effects corrections");
     MandatoryOff("atmo.radius");
     SetDefaultParameterInt("atmo.radius", 2);
+    DisableParameter("atmo.radius");
 
     // Doc example parameter settings
     SetDocExampleParameterValue("in", "QB_1_ortho.tif");
@@ -439,7 +440,7 @@ private:
     m_ScaleFilter->InPlaceOn();
     m_ClampFilter = ClampFilterType::New();
 
-     FloatVectorImageType::Pointer inImage = GetParameterFloatVectorImage("in");
+    FloatVectorImageType::Pointer inImage = GetParameterFloatVectorImage("in");
 
     // Set (Date and Day) OR FluxNormalizationCoef to corresponding filters
     if ( !IsParameterEnabled("acquisition.fluxnormalizationcoefficient") )
@@ -647,9 +648,9 @@ private:
         m_AtmosphericParam->SetAerosolOptical(GetParameterFloat("atmo.opt"));
 
         // Relative Spectral Response File
-        if (IsParameterEnabled("rsr"))
+        if (IsParameterEnabled("atmo.rsr"))
         {
-          m_ReflectanceToSurfaceReflectanceFilter->SetFilterFunctionValuesFileName(GetParameterString("rsr"));
+          m_ReflectanceToSurfaceReflectanceFilter->SetFilterFunctionValuesFileName(GetParameterString("atmo.rsr"));
         }
 
         // Aeronet file
@@ -679,51 +680,62 @@ private:
 
         GetLogger()->Info("Atmospheric correction parameters compute by 6S : " + oss.str());
 
-        //Compute adjacency effect
-        //   m_SurfaceAdjacencyEffect6SCorrectionSchemeFilter
-        //   = SurfaceAdjacencyEffect6SCorrectionSchemeFilterType::New();
-
-        //   m_SurfaceAdjacencyEffect6SCorrectionSchemeFilter->SetInput(m_ReflectanceToSurfaceReflectanceFilter->GetOutput());
-        // m_SurfaceAdjacencyEffect6SCorrectionSchemeFilter->
-        //   SetAtmosphericRadiativeTerms(
-        //     m_ReflectanceToSurfaceReflectanceFilter->GetAtmosphericRadiativeTerms());
-        // m_SurfaceAdjacencyEffect6SCorrectionSchemeFilter->SetZenithalViewingAngle(
-        //   m_AtmosphericParam->GetViewingZenithalAngle());
-        // m_SurfaceAdjacencyEffect6SCorrectionSchemeFilter->SetWindowRadius(GetParameterInt("radius"));
-
-        //    //estimate ground spacing in kilometers
-        // GroundSpacingImageType::Pointer groundSpacing = GroundSpacingImageType::New();
-
-        // groundSpacing->SetInputImage(inImage);
-        // IndexType  index;
-
-        // vnl_random rand;
-
-        // index[0] = static_cast<IndexValueType>(rand.lrand32(0, inImage->GetLargestPossibleRegion().GetSize()[0]));
-        // index[1] = static_cast<IndexValueType>(rand.lrand32(0, inImage->GetLargestPossibleRegion().GetSize()[1]));
-        // FloatType tmpSpacing = groundSpacing->EvaluateAtIndex(index);
-
-        // const float spacingInKilometers = (std::max(tmpSpacing[0], tmpSpacing[1])) / 1000.;
-        //    // std::ostringstream oss2;
-        //    //  oss2.str("");
-        //    //  oss2 << spacingInKilometers;
-        //    //  GetLogger()->Info("Spacing in kilometers " + oss2.str());
-        // m_SurfaceAdjacencyEffect6SCorrectionSchemeFilter->
-        //   SetPixelSpacingInKilometers(spacingInKilometers);
+        bool adjComputation=false;
+        if (IsParameterEnabled("atmo.radius"))
+        {
+          adjComputation=true;
+          //Compute adjacency effect
+          m_SurfaceAdjacencyEffect6SCorrectionSchemeFilter
+            = SurfaceAdjacencyEffect6SCorrectionSchemeFilterType::New();
+
+          m_SurfaceAdjacencyEffect6SCorrectionSchemeFilter->SetInput(m_ReflectanceToSurfaceReflectanceFilter->GetOutput());
+          m_SurfaceAdjacencyEffect6SCorrectionSchemeFilter->
+            SetAtmosphericRadiativeTerms(
+              m_ReflectanceToSurfaceReflectanceFilter->GetAtmosphericRadiativeTerms());
+          m_SurfaceAdjacencyEffect6SCorrectionSchemeFilter->SetZenithalViewingAngle(
+            m_AtmosphericParam->GetViewingZenithalAngle());
+          m_SurfaceAdjacencyEffect6SCorrectionSchemeFilter->SetWindowRadius(GetParameterInt("atmo.radius"));
+
+          //Estimate ground spacing in kilometers
+          GroundSpacingImageType::Pointer groundSpacing = GroundSpacingImageType::New();
+
+          groundSpacing->SetInputImage(inImage);
+          IndexType  index;
+          vnl_random rand;
+
+          index[0] = static_cast<IndexValueType>(rand.lrand32(0, inImage->GetLargestPossibleRegion().GetSize()[0]));
+          index[1] = static_cast<IndexValueType>(rand.lrand32(0, inImage->GetLargestPossibleRegion().GetSize()[1]));
+          FloatType tmpSpacing = groundSpacing->EvaluateAtIndex(index);
+
+          const float spacingInKilometers = (std::max(tmpSpacing[0], tmpSpacing[1])) / 1000.;
+            // std::ostringstream oss2;
+            //  oss2.str("");
+            //  oss2 << spacingInKilometers;
+            //  GetLogger()->Info("Spacing in kilometers " + oss2.str());
+          m_SurfaceAdjacencyEffect6SCorrectionSchemeFilter->
+            SetPixelSpacingInKilometers(spacingInKilometers);
 
-        //    //rescale the surface reflectance in milli-reflectance
-        // m_SurfaceAdjacencyEffect6SCorrectionSchemeFilter->UpdateOutputInformation();
-        //    //m_SurfaceAdjacencyEffect6SCorrectionSchemeFilter->Update();
-        // m_ScaleFilter->SetInput(m_SurfaceAdjacencyEffect6SCorrectionSchemeFilter->GetOutput());
+        
+          m_SurfaceAdjacencyEffect6SCorrectionSchemeFilter->UpdateOutputInformation();
+        }
 
+        //Rescale the surface reflectance in milli-reflectance
         if (!IsParameterEnabled("clamp"))
         {
-          m_ScaleFilter->SetInput(m_ReflectanceToSurfaceReflectanceFilter->GetOutput());
+          if (!adjComputation)
+            m_ScaleFilter->SetInput(m_ReflectanceToSurfaceReflectanceFilter->GetOutput());
+          else
+            m_ScaleFilter->SetInput(m_SurfaceAdjacencyEffect6SCorrectionSchemeFilter->GetOutput());
         }
         else
         {
           GetLogger()->Info("Clamp values between [0, 100]");
-          m_ClampFilter->SetInput(m_ReflectanceToSurfaceReflectanceFilter->GetOutput());
+          
+          if (!adjComputation)
+            m_ClampFilter->SetInput(m_ReflectanceToSurfaceReflectanceFilter->GetOutput());
+          else
+            m_ClampFilter->SetInput(m_SurfaceAdjacencyEffect6SCorrectionSchemeFilter->GetOutput());
+          
           m_ClampFilter->ClampOutside(0.0, 1.0);
           m_ScaleFilter->SetInput(m_ClampFilter->GetOutput());
         }
-- 
GitLab