Commit f63a47d95f731d95bc8694ba802e84ffbf9f3d1d

Authored by Josh Klontz
1 parent 2288768b

added some additional functionality to turkGallery

openbr/core/common.h
... ... @@ -116,15 +116,24 @@ T Max(const QList<T> &vals)
116 116 }
117 117  
118 118 /*!
  119 + * \brief Returns the sum of a vector of values.
  120 + */
  121 +template <template<class> class V, typename T>
  122 +double Sum(const V<T> &vals)
  123 +{
  124 + double sum = 0;
  125 + foreach (T val, vals) sum += val;
  126 + return sum;
  127 +}
  128 +
  129 +/*!
119 130 * \brief Returns the mean and standard deviation of a vector of values.
120 131 */
121 132 template <template<class> class V, typename T>
122 133 double Mean(const V<T> &vals)
123 134 {
124 135 if (vals.isEmpty()) return 0;
125   - double sum = 0;
126   - foreach (T val, vals) sum += val;
127   - return sum / vals.size();
  136 + return Sum(vals) / vals.size();
128 137 }
129 138  
130 139 /*!
... ...
openbr/plugins/turk.cpp
1 1 #include "openbr_internal.h"
  2 +#include "openbr/core/common.h"
2 3 #include "openbr/core/qtutils.h"
3 4  
4 5 namespace br
... ... @@ -12,6 +13,10 @@ namespace br
12 13 class turkGallery : public Gallery
13 14 {
14 15 Q_OBJECT
  16 + Q_PROPERTY(bool flat READ get_flat WRITE set_flat RESET reset_flat STORED false)
  17 + Q_PROPERTY(bool normalize READ get_normalize WRITE set_normalize RESET reset_normalize STORED false)
  18 + BR_PROPERTY(bool, flat, false)
  19 + BR_PROPERTY(bool, normalize, false)
15 20  
16 21 struct Attribute : public QStringList
17 22 {
... ... @@ -23,6 +28,23 @@ class turkGallery : public Gallery
23 28 if (i != -1)
24 29 append(str.mid(i+1, str.length()-i-2).split(","));
25 30 }
  31 +
  32 + Attribute normalized() const
  33 + {
  34 + bool ok;
  35 + QList<float> values;
  36 + foreach (const QString &value, *this) {
  37 + values.append(value.toFloat(&ok));
  38 + if (!ok)
  39 + qFatal("Can't normalize non-numeric vector!");
  40 + }
  41 +
  42 + Attribute normal(name);
  43 + const float sum = Common::Sum(values);
  44 + for (int i=0; i<values.size(); i++)
  45 + normal.append(QString::number(values[i] / sum));
  46 + return normal;
  47 + }
26 48 };
27 49  
28 50 TemplateList readBlock(bool *done)
... ... @@ -48,10 +70,18 @@ class turkGallery : public Gallery
48 70 if (type.size() != rating.size())
49 71 qFatal(".turk Gallery incorrect ratings count.");
50 72  
51   - QMap<QString,QVariant> categoryMap;
52   - for (int j=0; j<type.size(); j++)
53   - categoryMap.insert(type[j], rating[j]);
54   - f.set(type.name, categoryMap);
  73 + if (normalize)
  74 + rating = rating.normalized();
  75 +
  76 + if (flat) {
  77 + for (int j=0; j<type.size(); j++)
  78 + f.set(type.name + "_" + type[j], rating[j]);
  79 + } else {
  80 + QMap<QString,QVariant> categoryMap;
  81 + for (int j=0; j<type.size(); j++)
  82 + categoryMap.insert(type[j], rating[j]);
  83 + f.set(type.name, categoryMap);
  84 + }
55 85 }
56 86 templates.append(f);
57 87 }
... ...