From 55f8310cacebb1072d9f2880f7eb5a1be25264bc Mon Sep 17 00:00:00 2001 From: Vladislav Vinogradov Date: Thu, 9 Aug 2012 12:37:35 +0400 Subject: [PATCH] fixed number of training mode operation --- modules/video/src/bgfg_gmg.cpp | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/modules/video/src/bgfg_gmg.cpp b/modules/video/src/bgfg_gmg.cpp index f75dc9b27..f97207f18 100644 --- a/modules/video/src/bgfg_gmg.cpp +++ b/modules/video/src/bgfg_gmg.cpp @@ -199,7 +199,7 @@ namespace public: GMG_LoopBody(const cv::Mat& frame, const cv::Mat& fgmask, const cv::Mat_& nfeatures, const cv::Mat_& colors, const cv::Mat_& weights, int maxFeatures, double learningRate, int numInitializationFrames, int quantizationLevels, double backgroundPrior, double decisionThreshold, - double maxVal, double minVal, size_t frameNum) : + double maxVal, double minVal, int frameNum) : frame_(frame), fgmask_(fgmask), nfeatures_(nfeatures), colors_(colors), weights_(weights), maxFeatures_(maxFeatures), learningRate_(learningRate), numInitializationFrames_(numInitializationFrames), quantizationLevels_(quantizationLevels), backgroundPrior_(backgroundPrior), decisionThreshold_(decisionThreshold), @@ -227,7 +227,7 @@ namespace double maxVal_; double minVal_; - size_t frameNum_; + int frameNum_; }; void GMG_LoopBody::operator() (const cv::Range& range) const @@ -262,7 +262,7 @@ namespace bool isForeground = false; - if (frameNum_ > numInitializationFrames_) + if (frameNum_ >= numInitializationFrames_) { // typical operation @@ -272,21 +272,7 @@ namespace const double posterior = (weight * backgroundPrior_) / (weight * backgroundPrior_ + (1.0 - weight) * (1.0 - backgroundPrior_)); isForeground = ((1.0 - posterior) > decisionThreshold_); - } - fgmask_row[x] = (uchar)(-isForeground); - - if (frameNum_ <= numInitializationFrames_ + 1) - { - // training-mode update - - insertFeature(newFeatureColor, 1.0f, colors, weights, nfeatures, maxFeatures_); - - if (frameNum_ == numInitializationFrames_ + 1) - normalizeHistogram(weights, nfeatures); - } - else - { // update histogram. for (int i = 0; i < nfeatures; ++i) @@ -295,10 +281,22 @@ namespace bool inserted = insertFeature(newFeatureColor, learningRate_, colors, weights, nfeatures, maxFeatures_); if (inserted) + { + normalizeHistogram(weights, nfeatures); + nfeatures_row[x] = nfeatures; + } + } + else + { + // training-mode update + + insertFeature(newFeatureColor, 1.0f, colors, weights, nfeatures, maxFeatures_); + + if (frameNum_ == numInitializationFrames_ - 1) normalizeHistogram(weights, nfeatures); } - nfeatures_row[x] = nfeatures; + fgmask_row[x] = (uchar)(-isForeground); } } }