From c1535bee409fc5fcf324ca9f1e0d5b09150fa4bb Mon Sep 17 00:00:00 2001 From: Josh Klontz Date: Wed, 27 Feb 2013 10:28:06 -0500 Subject: [PATCH] added reduce transform --- sdk/plugins/reduce.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+), 0 deletions(-) diff --git a/sdk/plugins/reduce.cpp b/sdk/plugins/reduce.cpp index 8a1741a..5c0c82d 100644 --- a/sdk/plugins/reduce.cpp +++ b/sdk/plugins/reduce.cpp @@ -79,6 +79,46 @@ class AndTransform : public UntrainableMetaTransform BR_REGISTER(Transform, AndTransform) +/*! + * \ingroup transforms + * \brief Statistics + * \author Josh Klontz \cite jklontz + */ +class StatTransform : public UntrainableTransform +{ + Q_OBJECT + Q_ENUMS(Statistic) + Q_PROPERTY(Statistic statistic READ get_statistic WRITE set_statistic RESET reset_statistic STORED false) + +public: + /*! + * \brief Available statistics + */ + enum Statistic { Min, Max, Mean, StdDev }; + +private: + BR_PROPERTY(Statistic, statistic, Mean) + + void project(const Template &src, Template &dst) const + { + if (src.m().channels() != 1) + qFatal("Expected 1 channel matrix."); + Mat m(1, 1, CV_32FC1); + if ((statistic == Min) || (statistic == Max)) { + double min, max; + minMaxLoc(src, &min, &max); + m.at(1, 1) = (statistic == Min ? min : max); + } else { + Scalar mean, stddev; + meanStdDev(src, mean, stddev); + m.at(1,1) = (statistic == Mean ? mean[0] : stddev[0]); + } + dst = m; + } +}; + +BR_REGISTER(Transform, StatTransform) + } // namespace br #include "reduce.moc" -- libgit2 0.21.4