Commit 8b0c89841871208836d96877405f918ab31032ca

Authored by Josh Klontz
1 parent f4a9384b

changes suggested by Charles and Scott

openbr/openbr_plugin.cpp
@@ -1386,6 +1386,16 @@ QList<float> Distance::compare(const TemplateList &targets, const Template &quer @@ -1386,6 +1386,16 @@ QList<float> Distance::compare(const TemplateList &targets, const Template &quer
1386 return scores; 1386 return scores;
1387 } 1387 }
1388 1388
  1389 +float compare(const Template &a, const Template &b) const
  1390 +{
  1391 + return compare(a.m(), b.m());
  1392 +}
  1393 +
  1394 +float compare(const cv::Mat &, const cv::Mat &) const
  1395 +{
  1396 + qFatal("Logic error: distance metric did not implement a comparison function or was accessed at an unsupported level of abstraction.");
  1397 +}
  1398 +
1389 /* Distance - private methods */ 1399 /* Distance - private methods */
1390 void Distance::compareBlock(const TemplateList &target, const TemplateList &query, Output *output, int targetOffset, int queryOffset) const 1400 void Distance::compareBlock(const TemplateList &target, const TemplateList &query, Output *output, int targetOffset, int queryOffset) const
1391 { 1401 {
openbr/openbr_plugin.h
@@ -1324,8 +1324,8 @@ public: @@ -1324,8 +1324,8 @@ public:
1324 virtual void train(const TemplateList &src) { (void) src; } /*!< \brief Train the distance. */ 1324 virtual void train(const TemplateList &src) { (void) src; } /*!< \brief Train the distance. */
1325 virtual void compare(const TemplateList &target, const TemplateList &query, Output *output) const; /*!< \brief Compare two template lists. */ 1325 virtual void compare(const TemplateList &target, const TemplateList &query, Output *output) const; /*!< \brief Compare two template lists. */
1326 virtual QList<float> compare(const TemplateList &targets, const Template &query) const; /*!< \brief Compute the normalized distance between a template and a template list. */ 1326 virtual QList<float> compare(const TemplateList &targets, const Template &query) const; /*!< \brief Compute the normalized distance between a template and a template list. */
1327 - virtual float compare(const Template &a, const Template &b) const { return compare(a.m(), b.m()); } /*!< \brief Compute the distance between two templates. */  
1328 - virtual float compare(const cv::Mat &a, const cv::Mat &b) const = 0; 1327 + virtual float compare(const Template &a, const Template &b) const; /*!< \brief Compute the distance between two templates. */
  1328 + virtual float compare(const cv::Mat &a, const cv::Mat &b) const; /*!< \brief Compute the distance between two biometric signatures. */
1329 1329
1330 protected: 1330 protected:
1331 inline Distance *make(const QString &description) { return make(description, this); } /*!< \brief Make a subdistance. */ 1331 inline Distance *make(const QString &description) { return make(description, this); } /*!< \brief Make a subdistance. */
openbr/plugins/distance.cpp
@@ -224,11 +224,6 @@ private: @@ -224,11 +224,6 @@ private:
224 distances[i]->train(partitionedSrc[i]); 224 distances[i]->train(partitionedSrc[i]);
225 } 225 }
226 226
227 - float compare(const Mat &a, const Mat &b) const  
228 - {  
229 - return distances.first()->compare(a, b);  
230 - }  
231 -  
232 float compare(const Template &a, const Template &b) const 227 float compare(const Template &a, const Template &b) const
233 { 228 {
234 if (a.size() != b.size()) qFatal("Comparison size mismatch"); 229 if (a.size() != b.size()) qFatal("Comparison size mismatch");
@@ -237,7 +232,7 @@ private: @@ -237,7 +232,7 @@ private:
237 for (int i=0; i<distances.size(); i++) { 232 for (int i=0; i<distances.size(); i++) {
238 float weight; 233 float weight;
239 weights.isEmpty() ? weight = 1. : weight = weights[i]; 234 weights.isEmpty() ? weight = 1. : weight = weights[i];
240 - scores.append(weight*distances[i]->compare(a[i], b[i])); 235 + scores.append(weight*distances[i]->compare(Template(a.file, a[i]),Template(b.file, b[i])));
241 } 236 }
242 237
243 switch (operation) { 238 switch (operation) {
@@ -328,11 +323,6 @@ class NegativeLogPlusOneDistance : public Distance @@ -328,11 +323,6 @@ class NegativeLogPlusOneDistance : public Distance
328 distance->train(src); 323 distance->train(src);
329 } 324 }
330 325
331 - float compare(const cv::Mat &a, const cv::Mat &b) const  
332 - {  
333 - return compare(Template(a), Template(b));  
334 - }  
335 -  
336 float compare(const Template &a, const Template &b) const 326 float compare(const Template &a, const Template &b) const
337 { 327 {
338 return -log(distance->compare(a,b)+1); 328 return -log(distance->compare(a,b)+1);
@@ -388,11 +378,6 @@ class OnlineDistance : public Distance @@ -388,11 +378,6 @@ class OnlineDistance : public Distance
388 mutable QHash<QString,float> scoreHash; 378 mutable QHash<QString,float> scoreHash;
389 mutable QMutex mutex; 379 mutable QMutex mutex;
390 380
391 - float compare(const Mat &a, const Mat &b) const  
392 - {  
393 - return compare(Template(a), Template(b));  
394 - }  
395 -  
396 float compare(const Template &target, const Template &query) const 381 float compare(const Template &target, const Template &query) const
397 { 382 {
398 float currentScore = distance->compare(target, query); 383 float currentScore = distance->compare(target, query);
@@ -415,12 +400,6 @@ class AttributeDistance : public Distance @@ -415,12 +400,6 @@ class AttributeDistance : public Distance
415 Q_PROPERTY(QString attribute READ get_attribute WRITE set_attribute RESET reset_attribute STORED false) 400 Q_PROPERTY(QString attribute READ get_attribute WRITE set_attribute RESET reset_attribute STORED false)
416 BR_PROPERTY(QString, attribute, QString()) 401 BR_PROPERTY(QString, attribute, QString())
417 402
418 - float compare(const cv::Mat &, const cv::Mat &) const  
419 - {  
420 - qFatal("Logic error.");  
421 - return 0;  
422 - }  
423 -  
424 float compare(const Template &target, const Template &query) const 403 float compare(const Template &target, const Template &query) const
425 { 404 {
426 float queryValue = query.file.get<float>(attribute); 405 float queryValue = query.file.get<float>(attribute);
@@ -455,11 +434,6 @@ class SumDistance : public Distance @@ -455,11 +434,6 @@ class SumDistance : public Distance
455 futures.waitForFinished(); 434 futures.waitForFinished();
456 } 435 }
457 436
458 - float compare(const Mat &a, const Mat &b) const  
459 - {  
460 - return compare(Template(a), Template(b));  
461 - }  
462 -  
463 float compare(const Template &target, const Template &query) const 437 float compare(const Template &target, const Template &query) const
464 { 438 {
465 float result = 0; 439 float result = 0;
openbr/plugins/quality.cpp
@@ -246,11 +246,6 @@ class ZScoreDistance : public Distance @@ -246,11 +246,6 @@ class ZScoreDistance : public Distance
246 if (stddev == 0) qFatal("Stddev is 0."); 246 if (stddev == 0) qFatal("Stddev is 0.");
247 } 247 }
248 248
249 - float compare(const cv::Mat &a, const cv::Mat &b) const  
250 - {  
251 - return compare(Template(a), Template(b));  
252 - }  
253 -  
254 float compare(const Template &target, const Template &query) const 249 float compare(const Template &target, const Template &query) const
255 { 250 {
256 float score = distance->compare(target,query); 251 float score = distance->compare(target,query);
@@ -406,11 +401,6 @@ class UnitDistance : public Distance @@ -406,11 +401,6 @@ class UnitDistance : public Distance
406 qDebug("a = %f, b = %f", a, b); 401 qDebug("a = %f, b = %f", a, b);
407 } 402 }
408 403
409 - float compare(const cv::Mat &a, const cv::Mat &b) const  
410 - {  
411 - return compare(Template(a), Template(b));  
412 - }  
413 -  
414 float compare(const Template &target, const Template &query) const 404 float compare(const Template &target, const Template &query) const
415 { 405 {
416 return a * (distance->compare(target, query) - b); 406 return a * (distance->compare(target, query) - b);
openbr/plugins/quantize.cpp
@@ -257,12 +257,6 @@ class ProductQuantizationDistance : public Distance @@ -257,12 +257,6 @@ class ProductQuantizationDistance : public Distance
257 Q_PROPERTY(bool bayesian READ get_bayesian WRITE set_bayesian RESET reset_bayesian STORED false) 257 Q_PROPERTY(bool bayesian READ get_bayesian WRITE set_bayesian RESET reset_bayesian STORED false)
258 BR_PROPERTY(bool, bayesian, false) 258 BR_PROPERTY(bool, bayesian, false)
259 259
260 - float compare(const cv::Mat &, const cv::Mat &) const  
261 - {  
262 - qFatal("Logic error.");  
263 - return 0;  
264 - }  
265 -  
266 float compare(const Template &a, const Template &b) const 260 float compare(const Template &a, const Template &b) const
267 { 261 {
268 float distance = 0; 262 float distance = 0;
@@ -303,12 +297,6 @@ class RecursiveProductQuantizationDistance : public Distance @@ -303,12 +297,6 @@ class RecursiveProductQuantizationDistance : public Distance
303 Q_PROPERTY(float t READ get_t WRITE set_t RESET reset_t STORED false) 297 Q_PROPERTY(float t READ get_t WRITE set_t RESET reset_t STORED false)
304 BR_PROPERTY(float, t, -std::numeric_limits<float>::max()) 298 BR_PROPERTY(float, t, -std::numeric_limits<float>::max())
305 299
306 - float compare(const cv::Mat &, const cv::Mat &) const  
307 - {  
308 - qFatal("Logic error.");  
309 - return 0;  
310 - }  
311 -  
312 float compare(const Template &a, const Template &b) const 300 float compare(const Template &a, const Template &b) const
313 { 301 {
314 return compareRecursive(a, b, 0, a.size(), 0); 302 return compareRecursive(a, b, 0, a.size(), 0);
openbr/plugins/validate.cpp
@@ -143,12 +143,6 @@ class CrossValidateDistance : public Distance @@ -143,12 +143,6 @@ class CrossValidateDistance : public Distance
143 { 143 {
144 Q_OBJECT 144 Q_OBJECT
145 145
146 - float compare(const cv::Mat &, const cv::Mat &) const  
147 - {  
148 - qFatal("Logic error");  
149 - return 0;  
150 - }  
151 -  
152 float compare(const Template &a, const Template &b) const 146 float compare(const Template &a, const Template &b) const
153 { 147 {
154 static const QString key("Partition"); // More efficient to preallocate this 148 static const QString key("Partition"); // More efficient to preallocate this
@@ -169,12 +163,6 @@ class FilterDistance : public Distance @@ -169,12 +163,6 @@ class FilterDistance : public Distance
169 { 163 {
170 Q_OBJECT 164 Q_OBJECT
171 165
172 - float compare(const cv::Mat &, const cv::Mat &) const  
173 - {  
174 - qFatal("Logic error.");  
175 - return 0;  
176 - }  
177 -  
178 float compare(const Template &a, const Template &b) const 166 float compare(const Template &a, const Template &b) const
179 { 167 {
180 (void) b; // Query template isn't checked 168 (void) b; // Query template isn't checked
@@ -209,12 +197,6 @@ class MetadataDistance : public Distance @@ -209,12 +197,6 @@ class MetadataDistance : public Distance
209 Q_PROPERTY(QStringList filters READ get_filters WRITE set_filters RESET reset_filters STORED false) 197 Q_PROPERTY(QStringList filters READ get_filters WRITE set_filters RESET reset_filters STORED false)
210 BR_PROPERTY(QStringList, filters, QStringList()) 198 BR_PROPERTY(QStringList, filters, QStringList())
211 199
212 - float compare(const cv::Mat &, const cv::Mat &) const  
213 - {  
214 - qFatal("Logic error.");  
215 - return 0;  
216 - }  
217 -  
218 float compare(const Template &a, const Template &b) const 200 float compare(const Template &a, const Template &b) const
219 { 201 {
220 foreach (const QString &key, filters) { 202 foreach (const QString &key, filters) {
@@ -268,12 +250,6 @@ class RejectDistance : public Distance @@ -268,12 +250,6 @@ class RejectDistance : public Distance
268 Q_PROPERTY(bool rejectIfContains READ get_rejectIfContains WRITE set_rejectIfContains RESET reset_rejectIfContains STORED false) 250 Q_PROPERTY(bool rejectIfContains READ get_rejectIfContains WRITE set_rejectIfContains RESET reset_rejectIfContains STORED false)
269 BR_PROPERTY(bool, rejectIfContains, false) 251 BR_PROPERTY(bool, rejectIfContains, false)
270 252
271 - float compare(const cv::Mat &, const cv::Mat &) const  
272 - {  
273 - qFatal("Logic error.");  
274 - return 0;  
275 - }  
276 -  
277 float compare(const Template &a, const Template &b) const 253 float compare(const Template &a, const Template &b) const
278 { 254 {
279 // We don't look at the query 255 // We don't look at the query