Commit eaf723c9e2b108f7ba8dcacddeb45091e61613ad
1 parent
6163c973
Changes to fusedistance
Showing
1 changed file
with
17 additions
and
10 deletions
openbr/plugins/distance/fuse.cpp
| ... | ... | @@ -31,7 +31,7 @@ class FuseDistance : public Distance |
| 31 | 31 | { |
| 32 | 32 | Q_OBJECT |
| 33 | 33 | Q_ENUMS(Operation) |
| 34 | - Q_PROPERTY(QString description READ get_description WRITE set_description RESET reset_description STORED false) | |
| 34 | + Q_PROPERTY(QStringList descriptions READ get_descriptions WRITE set_descriptions RESET reset_descriptions STORED false) | |
| 35 | 35 | Q_PROPERTY(Operation operation READ get_operation WRITE set_operation RESET reset_operation STORED false) |
| 36 | 36 | Q_PROPERTY(QList<float> weights READ get_weights WRITE set_weights RESET reset_weights STORED false) |
| 37 | 37 | |
| ... | ... | @@ -42,10 +42,17 @@ public: |
| 42 | 42 | enum Operation {Mean, Sum, Max, Min}; |
| 43 | 43 | |
| 44 | 44 | private: |
| 45 | - BR_PROPERTY(QString, description, "L2") | |
| 45 | + BR_PROPERTY(QStringList, descriptions, QStringList() << "L2") | |
| 46 | 46 | BR_PROPERTY(Operation, operation, Mean) |
| 47 | 47 | BR_PROPERTY(QList<float>, weights, QList<float>()) |
| 48 | 48 | |
| 49 | + void init() | |
| 50 | + { | |
| 51 | + for (int i=0; i<descriptions.size(); i++) { | |
| 52 | + distances.append(make(descriptions[i])); | |
| 53 | + } | |
| 54 | + } | |
| 55 | + | |
| 49 | 56 | void train(const TemplateList &src) |
| 50 | 57 | { |
| 51 | 58 | // Partition the templates by matrix |
| ... | ... | @@ -54,12 +61,11 @@ private: |
| 54 | 61 | |
| 55 | 62 | QList<TemplateList> partitionedSrc = src.partition(split); |
| 56 | 63 | |
| 57 | - while (distances.size() < partitionedSrc.size()) | |
| 58 | - distances.append(make(description)); | |
| 59 | - | |
| 60 | 64 | // Train on each of the partitions |
| 61 | - for (int i=0; i<distances.size(); i++) | |
| 65 | + for (int i=0; i<descriptions.size(); i++) { | |
| 66 | + distances.append(make(descriptions[i])); | |
| 62 | 67 | distances[i]->train(partitionedSrc[i]); |
| 68 | + } | |
| 63 | 69 | } |
| 64 | 70 | |
| 65 | 71 | float compare(const Template &a, const Template &b) const |
| ... | ... | @@ -103,10 +109,11 @@ private: |
| 103 | 109 | { |
| 104 | 110 | int numDistances; |
| 105 | 111 | stream >> numDistances; |
| 106 | - while (distances.size() < numDistances) | |
| 107 | - distances.append(make(description)); | |
| 108 | - foreach (Distance *distance, distances) | |
| 109 | - distance->load(stream); | |
| 112 | + for (int i=0; i<descriptions.size(); i++) { | |
| 113 | + distances.append(make(descriptions[i])); | |
| 114 | + distances[i]->load(stream); | |
| 115 | + } | |
| 116 | + | |
| 110 | 117 | } |
| 111 | 118 | }; |
| 112 | 119 | ... | ... |