From e3d488e15aa058418f47ec9efe16ae905b72626f Mon Sep 17 00:00:00 2001
From: Christophe Palmann <christophe.palmann@c-s.fr>
Date: Wed, 4 Feb 2015 11:22:31 +0100
Subject: [PATCH] BUG: BCO interpolation, bad normalization. Coefs are
 normalized instead.

---
 .../otbBCOInterpolateImageFunction.txx           | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/Code/BasicFilters/otbBCOInterpolateImageFunction.txx b/Code/BasicFilters/otbBCOInterpolateImageFunction.txx
index fe79c4a4e6..90d4c593a4 100644
--- a/Code/BasicFilters/otbBCOInterpolateImageFunction.txx
+++ b/Code/BasicFilters/otbBCOInterpolateImageFunction.txx
@@ -87,6 +87,8 @@ BCOInterpolateImageFunctionBase<TInputImage, TCoordRep>
   step = 4./static_cast<double>(2*radius);
   position = - double(radius) * step;
 
+  double sum = 0.0;
+
   for ( int i = -radius; i <= radius; ++i)
     {
     // Compute the BCO coefficients according to alpha.
@@ -109,9 +111,14 @@ BCOInterpolateImageFunctionBase<TInputImage, TCoordRep>
       {
       BCOCoef[m_Radius+i] = 0;
       }
+
+    sum += BCOCoef[m_Radius+i];
     position += step;
     }
 
+  for ( unsigned int i = 0; i < winSize; ++i)
+    BCOCoef[i] = BCOCoef[i] / sum;
+
   return BCOCoef;
 }
 
@@ -179,10 +186,8 @@ BCOInterpolateImageFunction<TInputImage, TCoordRep>
     value += lineRes[i+radius]*BCOCoefX[i+radius];
     }
 
-  norma = (vcl_log(static_cast<double>(radius))/vcl_log(2.0));
-  norma = norma * norma;
 
-  return ( static_cast<OutputType>( value/norma ) );
+  return ( static_cast<OutputType>( value ) );
 }
 
 template < typename TPixel, unsigned int VImageDimension, class TCoordRep >
@@ -278,12 +283,9 @@ BCOInterpolateImageFunction< otb::VectorImage<TPixel, VImageDimension> , TCoordR
       }
     }
 
-  norma = (vcl_log(static_cast<double>(radius))/vcl_log(2.0));
-  norma = norma * norma;
-
   for( unsigned int k = 0; k<componentNumber; ++k)
     {
-    output.SetElement(k, value.at(k)/norma);
+    output.SetElement(k, value.at(k));
     }
 
   return ( output );
-- 
GitLab