From 731597dff02e85fd8aa4bcb75dcc4cbf0af0aa1c Mon Sep 17 00:00:00 2001
From: Ludovic Hussonnois <ludovic.hussonnois@c-s.fr>
Date: Mon, 27 Mar 2017 16:30:03 +0100
Subject: [PATCH] COMP: Add check for empty unsupervised classifier.

---
 .../include/otbLearningApplicationBase.txx    | 20 +++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)

diff --git a/Modules/Applications/AppClassification/include/otbLearningApplicationBase.txx b/Modules/Applications/AppClassification/include/otbLearningApplicationBase.txx
index adbe6db9ca..73f24df848 100644
--- a/Modules/Applications/AppClassification/include/otbLearningApplicationBase.txx
+++ b/Modules/Applications/AppClassification/include/otbLearningApplicationBase.txx
@@ -60,7 +60,9 @@ LearningApplicationBase<TInputValue,TOutputValue>
 
   InitUnsupervisedClassifierParams();
   std::vector<std::string> allClassifier = GetChoiceKeys("classifier");
-  m_UnsupervisedClassifier.assign(allClassifier.begin() + m_SupervisedClassifier.size(), allClassifier.end());
+  // Check for empty unsupervised classifier
+  if( allClassifier.size() > m_UnsupervisedClassifier.size() )
+    m_UnsupervisedClassifier.assign( allClassifier.begin() + m_SupervisedClassifier.size(), allClassifier.end() );
 }
 
 template <class TInputValue, class TOutputValue>
@@ -68,10 +70,16 @@ typename LearningApplicationBase<TInputValue,TOutputValue>::ClassifierCategory
 LearningApplicationBase<TInputValue,TOutputValue>
 ::GetClassifierCategory()
 {
-  bool foundUnsupervised =
-          std::find(m_UnsupervisedClassifier.begin(), m_UnsupervisedClassifier.end(),
-                    GetParameterString("classifier")) != m_UnsupervisedClassifier.end();
-  return foundUnsupervised ? Unsupervised : Supervised;
+  if( m_UnsupervisedClassifier.empty() )
+    {
+    return Supervised;
+    }
+  else
+    {
+    bool foundUnsupervised = std::find( m_UnsupervisedClassifier.begin(), m_UnsupervisedClassifier.end(),
+                                        GetParameterString( "classifier" ) ) != m_UnsupervisedClassifier.end();
+    return foundUnsupervised ? Unsupervised : Supervised;
+    }
 }
 
 template <class TInputValue, class TOutputValue>
@@ -202,7 +210,7 @@ LearningApplicationBase<TInputValue,TOutputValue>
     #endif
     }
 
-  
+
   // OpenCV SVM implementation is buggy with linear kernel
   // Users should use the libSVM implementation instead.
   // else if (modelName == "svm")
-- 
GitLab