From 67c3881361766becaf815433be14552456486582 Mon Sep 17 00:00:00 2001 From: Josh Klontz Date: Mon, 11 Feb 2013 14:31:25 -0500 Subject: [PATCH] added Eigen versions of L1/L2 distances --- sdk/plugins/eigen3.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+), 0 deletions(-) diff --git a/sdk/plugins/eigen3.cpp b/sdk/plugins/eigen3.cpp index 1f3e201..3431d1b 100644 --- a/sdk/plugins/eigen3.cpp +++ b/sdk/plugins/eigen3.cpp @@ -426,6 +426,46 @@ class LDATransform : public Transform BR_REGISTER(Transform, LDATransform) +/*! + * \ingroup distances + * \brief L1 distance computed using eigen. + * \author Josh Klontz \cite jklontz + */ +class L1Distance : public Distance +{ + Q_OBJECT + + float compare(const Template &a, const Template &b) const + { + const int size = a.m().rows * a.m().cols; + Eigen::Map aMap((float*)a.m().data, size); + Eigen::Map bMap((float*)b.m().data, size); + return (aMap-bMap).cwiseAbs().sum(); + } +}; + +BR_REGISTER(Distance, L1Distance) + +/*! + * \ingroup distances + * \brief L2 distance computed using eigen. + * \author Josh Klontz \cite jklontz + */ +class L2Distance : public Distance +{ + Q_OBJECT + + float compare(const Template &a, const Template &b) const + { + const int size = a.m().rows * a.m().cols; + Eigen::Map aMap((float*)a.m().data, size); + Eigen::Map bMap((float*)b.m().data, size); + return (aMap-bMap).squaredNorm(); + } +}; + +BR_REGISTER(Distance, L2Distance) + } // namespace br #include "eigen3.moc" -- libgit2 0.21.4