Commit 67c3881361766becaf815433be14552456486582

Authored by Josh Klontz
1 parent 9e5df64a

added Eigen versions of L1/L2 distances

Showing 1 changed file with 40 additions and 0 deletions
sdk/plugins/eigen3.cpp
... ... @@ -426,6 +426,46 @@ class LDATransform : public Transform
426 426  
427 427 BR_REGISTER(Transform, LDATransform)
428 428  
  429 +/*!
  430 + * \ingroup distances
  431 + * \brief L1 distance computed using eigen.
  432 + * \author Josh Klontz \cite jklontz
  433 + */
  434 +class L1Distance : public Distance
  435 +{
  436 + Q_OBJECT
  437 +
  438 + float compare(const Template &a, const Template &b) const
  439 + {
  440 + const int size = a.m().rows * a.m().cols;
  441 + Eigen::Map<Eigen::VectorXf> aMap((float*)a.m().data, size);
  442 + Eigen::Map<Eigen::VectorXf> bMap((float*)b.m().data, size);
  443 + return (aMap-bMap).cwiseAbs().sum();
  444 + }
  445 +};
  446 +
  447 +BR_REGISTER(Distance, L1Distance)
  448 +
  449 +/*!
  450 + * \ingroup distances
  451 + * \brief L2 distance computed using eigen.
  452 + * \author Josh Klontz \cite jklontz
  453 + */
  454 +class L2Distance : public Distance
  455 +{
  456 + Q_OBJECT
  457 +
  458 + float compare(const Template &a, const Template &b) const
  459 + {
  460 + const int size = a.m().rows * a.m().cols;
  461 + Eigen::Map<Eigen::VectorXf> aMap((float*)a.m().data, size);
  462 + Eigen::Map<Eigen::VectorXf> bMap((float*)b.m().data, size);
  463 + return (aMap-bMap).squaredNorm();
  464 + }
  465 +};
  466 +
  467 +BR_REGISTER(Distance, L2Distance)
  468 +
429 469 } // namespace br
430 470  
431 471 #include "eigen3.moc"
... ...