Commit 67c3881361766becaf815433be14552456486582
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" | ... | ... |