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