Commit fc713d2ff42b6e72b0f4e741d010dc45ba8c6d85

Authored by Brendan Klare
1 parent 3aa2be93

Added online distance function

Showing 1 changed file with 28 additions and 1 deletions
openbr/plugins/distance.cpp
... ... @@ -298,7 +298,34 @@ class IdenticalDistance : public Distance
298 298  
299 299 BR_REGISTER(Distance, IdenticalDistance)
300 300  
301   -} // namespace br
302 301  
  302 +/*!
  303 + * \ingroup distances
  304 + * \brief Online distance metric to attenuate match scores across multiple frames
  305 + * \author Brendan klare \cite bklare
  306 + */
  307 +class OnlineDistance : public Distance
  308 +{
  309 + Q_OBJECT
  310 + Q_PROPERTY(br::Distance* distance READ get_distance WRITE set_distance RESET reset_distance STORED false)
  311 + Q_PROPERTY(float alpha READ get_alpha WRITE set_alpha RESET reset_alpha STORED false)
  312 + BR_PROPERTY(br::Distance*, distance, NULL)
  313 + BR_PROPERTY(float, alpha, 0.1f);
  314 +
  315 + mutable QHash<QString,float> scoreHash;
  316 + mutable QMutex mutex;
  317 +
  318 + float compare(const Template &target, const Template &query) const
  319 + {
  320 + float currentScore = distance->compare(target, query);
  321 +
  322 + QMutexLocker mutexLocker(&mutex);
  323 + if (!scoreHash.contains(target.file.name)) scoreHash[target.file.name] = 0.0f;
  324 + return (1.0- alpha) * scoreHash[target.file.name] + alpha * currentScore;
  325 + }
  326 +};
303 327  
  328 +BR_REGISTER(Distance, OnlineDistance)
  329 +
  330 +} // namespace br
304 331 #include "distance.moc"
... ...