From 3247fe9ac82eea9733ab0e185e745dd3c00136ab Mon Sep 17 00:00:00 2001
From: Manuel Grizonnet <manuel.grizonnet@orfeo-toolbox.org>
Date: Mon, 30 Jul 2012 10:55:15 +0200
Subject: [PATCH] TEST: update otbConfusionMatrixCalculatorUpdate test, just
 overall accuracy value is checked for now

---
 Testing/Code/Learning/CMakeLists.txt          |  2 +-
 .../otbConfusionMatrixCalculatorTest.cxx      | 22 +++++++++++++++----
 2 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/Testing/Code/Learning/CMakeLists.txt b/Testing/Code/Learning/CMakeLists.txt
index a154528a21..a2855de3aa 100644
--- a/Testing/Code/Learning/CMakeLists.txt
+++ b/Testing/Code/Learning/CMakeLists.txt
@@ -532,7 +532,7 @@ otbConfusionMatrixCalculatorWrongSize 1000 4)
 SET_TESTS_PROPERTIES(leTvConfusionMatrixCalculatorWrongSize PROPERTIES WILL_FAIL true)
 
 ADD_TEST(leTvConfusionMatrixCalculatorUpdate ${LEARNING_TESTS4}
-otbConfusionMatrixCalculatorUpdate 1000 4)
+otbConfusionMatrixCalculatorUpdate 4 3)
 
 # ShiftScaleSampleListFilter tests ----------
 ADD_TEST(leTuShiftScaleSampleListFilterNew ${LEARNING_TESTS4}
diff --git a/Testing/Code/Learning/otbConfusionMatrixCalculatorTest.cxx b/Testing/Code/Learning/otbConfusionMatrixCalculatorTest.cxx
index 64602a2020..98ee85daff 100644
--- a/Testing/Code/Learning/otbConfusionMatrixCalculatorTest.cxx
+++ b/Testing/Code/Learning/otbConfusionMatrixCalculatorTest.cxx
@@ -78,6 +78,11 @@ int otbConfusionMatrixCalculatorSetListSamples(int argc, char* argv[])
   return EXIT_SUCCESS;
 }
 
+
+/*
+compare to results obtained with source code available here
+http://en.wikibooks.org/wiki/Algorithm_Implementation/Statistics/Fleiss%27_kappa
+*/
 int otbConfusionMatrixCalculatorWrongSize(int argc, char* argv[])
 {
 
@@ -203,8 +208,6 @@ int otbConfusionMatrixCalculatorUpdate(int argc, char* argv[])
 
   CalculatorType::ConfusionMatrixType confmat = calculator->GetConfusionMatrix();
 
-  std::cout << "confusion matrix" << std::endl  << confmat << std::endl;
-
   // double totalError = 0.0;
 
   // for (int i = 0; i < nbClasses; ++i)
@@ -235,6 +238,8 @@ int otbConfusionMatrixCalculatorUpdate(int argc, char* argv[])
   //   return EXIT_FAILURE;
   //   }
 
+  std::cout << "confusion matrix" << std::endl  << confmat << std::endl;
+
   for (int itClasses = 0; itClasses < nbClasses; itClasses++)
       {
       std::cout << "Precision of class [" << itClasses << "] vs all: " << calculator->GetPrecisions()[itClasses] << std::endl;
@@ -244,9 +249,18 @@ int otbConfusionMatrixCalculatorUpdate(int argc, char* argv[])
   std::cout << "Precision of the different class: " << calculator->GetPrecisions() << std::endl;
   std::cout << "Recall of the different class: " << calculator->GetRecalls() << std::endl;
   std::cout << "F-score of the different class: " << calculator->GetFScores() << std::endl;
-  std::cout << "Kappa index: " << calculator->GetKappaIndex() << std::endl;
 
   std::cout << "Kappa = " << calculator->GetKappaIndex() << std::endl;
   std::cout << "OA = " << calculator->GetOverallAccuracy() << std::endl;
-  return EXIT_SUCCESS;
+
+  const double oa = 3 / static_cast<double>(nbSamples);
+
+  if (vcl_abs (calculator->GetOverallAccuracy() - oa) > 0.000001)
+    {
+    return EXIT_FAILURE;
+    }
+  else
+    {
+    return EXIT_SUCCESS;
+    }
 }
-- 
GitLab