Parcourir la source

Correction bug calcul distance entre deux ensembles de lignes

Rémi Synave il y a 7 mois
Parent
commit
a075da2a45
2 fichiers modifiés avec 19 ajouts et 15 suppressions
  1. 18 14
      SLList/SLList.cpp
  2. 1 1
      SLList/SLList.hpp

+ 18 - 14
SLList/SLList.cpp

@@ -26,6 +26,7 @@
 #include <QJsonObject>
 #include <QJsonArray>
 #include <QJsonDocument>
+#include <vector>
 
 #include "SLList.hpp"
 
@@ -50,37 +51,39 @@ SLList::SLList (const char* file)
 std::pair<double, int> SLList::distance_avg(SLList* sllist, QImage* img) const
 {
   const SLList *list1 = this, *list2 = sllist;
-  if(size() > sllist->size())
-    {
-      list1 = sllist;
-      list2 = this;
-    }
+  std::vector<double> mins;
 
   double sum = 0;
   double min;
 
   for(unsigned int i = 0 ; i < list1->size(); i++)
     {
-      // std::cout << "--------------------------------------" << std::endl;
-      // std::cout << *(list1->get(i)) << std::endl << std::endl;
       min = list1->get(i)->distance(list2->get(0), img->width(), img->height());
-      // std::cout << *(list2->get(0)) << " -> " << min << std::endl << "Min : " << min << std::endl;
       
       for(unsigned int j = 1 ; j < list2->size(); j++)
 	{
 	  double temp = list1->get(i)->distance(list2->get(j), img->width(), img->height());
-	  // std::cout << *(list2->get(j)) << " -> " << temp << std::endl;
 	  if(temp < min)
 	    min = temp;
-	  // std::cout << "Min : " << min << std::endl;
 	}
-      sum += min;
-      // std::cout << std::endl << "Sum : " << sum << std::endl << std::endl;
+      mins.push_back(min);
     }
-  return std::make_pair(sum/list1->size(), size()-sllist->size());
-}
 
+  unsigned int minsize = this->size();
+  if(list2->size() < minsize)
+    minsize = list2->size();
+
+  sort(mins.begin(), mins.end());
+  
+  for(unsigned int i = 0 ; i < minsize ; i++)
+    sum+=mins[i];
+
+  sum/=minsize;
+  
+  return std::make_pair(sum, size()-sllist->size());
+}
 
+/*
 std::pair<double, int> SLList::distance_hausdorff(SLList* sllist, QImage* img) const
 {
   const SLList *list1 = this, *list2 = sllist;
@@ -111,3 +114,4 @@ std::pair<double, int> SLList::distance_hausdorff(SLList* sllist, QImage* img) c
     }
   return std::make_pair(max, size()-sllist->size());
 }
+*/

+ 1 - 1
SLList/SLList.hpp

@@ -44,7 +44,7 @@ public:
   inline unsigned int size() const{return list.size();}
   inline StrengthLine* get(unsigned int i) const{return list.at(i);}
   std::pair<double, int> distance_avg(SLList*, QImage*) const;
-  std::pair<double, int> distance_hausdorff(SLList*, QImage*) const;
+  // std::pair<double, int> distance_hausdorff(SLList*, QImage*) const;
 };
 
 #endif