Ver código fonte

Ajout de la méthode de Hausdorff pour la distance entre deux ensembles de lignes de force

Rémi Synave 2 anos atrás
pai
commit
cc82a7a9fd
4 arquivos alterados com 69 adições e 0 exclusões
  1. 2 0
      SLList/Main.cpp
  2. 32 0
      SLList/SLList.cpp
  3. 1 0
      SLList/SLList.hpp
  4. 34 0
      SLList/matrice_dispersion.sh

+ 2 - 0
SLList/Main.cpp

@@ -23,4 +23,6 @@ int main(int argc, char** argv)
   QImage img(argv[3]);
   std::pair<double, int> resultat = sll1.distance_avg(&sll2, &img);
   std::cout << "( " << resultat.first << " , " << resultat.second << " )" << std::endl;
+  //resultat = sll1.distance_hausdorff(&sll2, &img);
+  //std::cout << "( " << resultat.first << " , " << resultat.second << " )" << std::endl;
 }

+ 32 - 0
SLList/SLList.cpp

@@ -73,3 +73,35 @@ std::pair<double, int> SLList::distance_avg(SLList* sllist, QImage* img) const
     }
   return std::make_pair(sum/list1->size(), size()-sllist->size());
 }
+
+
+std::pair<double, int> SLList::distance_hausdorff(SLList* sllist, QImage* img) const
+{
+  const SLList *list1 = this, *list2 = sllist;
+  if(size() > sllist->size())
+    {
+      list1 = sllist;
+      list2 = this;
+    }
+
+  double max = -1;
+  double min;
+
+  for(unsigned int i = 0 ; i < list1->size(); i++)
+    {
+      min = list1->get(i)->distance(list2->get(0), img->width(), img->height());
+      
+      for(unsigned int j = 1 ; j < list2->size(); j++)
+	{
+	  double temp = list1->get(i)->distance(list2->get(j), img->width(), img->height());
+	  if(temp < min)
+	    min = temp;
+	}
+      if(max<0)
+	max = min;
+      else
+	if(min>max)
+	  max=min;
+    }
+  return std::make_pair(max, size()-sllist->size());
+}

+ 1 - 0
SLList/SLList.hpp

@@ -44,6 +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;
 };
 
 #endif

+ 34 - 0
SLList/matrice_dispersion.sh

@@ -0,0 +1,34 @@
+#!/bin/bash
+
+qmake
+make
+
+for numImg in {01..34}
+do
+    echo "img"$numImg
+    
+    premiereLigne=" "
+    for person in "jing" "remiC" "remiS" "samuel"
+    do
+	premiereLigne=$premiereLigne";"$person
+    done
+
+    echo $premiereLigne > "images/img"$numImg"_mat.csv"
+    
+    for person1 in jing remiC remiS samuel
+    do
+	ligne=$person1
+	for person2 in jing remiC remiS samuel
+	do
+
+	    ligne=$ligne";"`./sllist "images/img"$numImg"_"$person1".json" "images/img"$numImg"_"$person2".json" "images/img"$numImg".jpg"`
+	    
+	done
+
+	echo $ligne >> "images/img"$numImg"_mat.csv"
+	
+    done
+    
+    echo ""
+
+done