diff --git a/Modules/Applications/AppClassification/include/otbTrainSharkKMeans.hxx b/Modules/Applications/AppClassification/include/otbTrainSharkKMeans.hxx
index 366b6fd9b81745302968d84e14743a54a0f602c7..4b10b50533c36aca20ca169bf8f85f1515c142de 100644
--- a/Modules/Applications/AppClassification/include/otbTrainSharkKMeans.hxx
+++ b/Modules/Applications/AppClassification/include/otbTrainSharkKMeans.hxx
@@ -85,21 +85,18 @@ void LearningApplicationBase<TInputValue, TOutputValue>::TrainSharkKMeans(
       auto stddevMeasurementVector = statisticsReader->GetStatisticVectorByName("stddev");
   
       // Convert itk Variable Length Vector to shark Real Vector
-      shark::RealVector meanMeasurementRV(meanMeasurementVector.Size());
-      for (unsigned int i = 0; i<meanMeasurementVector.Size(); ++i)
-      {
-        // Substract the mean
-        meanMeasurementRV[i] = - meanMeasurementVector[i];
-      }
-  
+      shark::RealVector offsetRV(meanMeasurementVector.Size());
       shark::RealVector stddevMeasurementRV(stddevMeasurementVector.Size());
-      for (unsigned int i = 0; i<stddevMeasurementVector.Size(); ++i)
+      
+      assert(meanMeasurementVector.Size()==stddevMeasurementVector.Size());
+      for (unsigned int i = 0; i<meanMeasurementVector.Size(); ++i)
       {
         stddevMeasurementRV[i] = stddevMeasurementVector[i];
+        // Substract the normalized mean
+        offsetRV[i] = - meanMeasurementVector[i]/stddevMeasurementVector[i];
       }
       
-      shark::Normalizer<> normalizer(stddevMeasurementRV, meanMeasurementRV);
-
+      shark::Normalizer<> normalizer(stddevMeasurementRV, offsetRV);
       centroidData = normalizer(centroidData);
     }