diff --git a/Testing/Code/Learning/CMakeLists.txt b/Testing/Code/Learning/CMakeLists.txt index a154528a210ca1ff78f99377a9eb0864e31ad86d..a2855de3aabc9fd201cae7b3951600d8c7e9c258 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 64602a2020a5688b8babf4cb6f771ddb89f9d5a4..98ee85daff587ae182a7b047c3f03be2fbafda8c 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; + } }