|
@@ -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());
|
|
|
+}
|