fixed number of training mode operation

pull/9/head
Vladislav Vinogradov 12 years ago
parent 9b16563f44
commit 55f8310cac
  1. 32
      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_<int>& nfeatures, const cv::Mat_<int>& colors, const cv::Mat_<float>& 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,33 +272,31 @@ namespace
const double posterior = (weight * backgroundPrior_) / (weight * backgroundPrior_ + (1.0 - weight) * (1.0 - backgroundPrior_));
isForeground = ((1.0 - posterior) > decisionThreshold_);
}
fgmask_row[x] = (uchar)(-isForeground);
// update histogram.
if (frameNum_ <= numInitializationFrames_ + 1)
{
// training-mode update
for (int i = 0; i < nfeatures; ++i)
weights[i] *= 1.0f - learningRate_;
insertFeature(newFeatureColor, 1.0f, colors, weights, nfeatures, maxFeatures_);
bool inserted = insertFeature(newFeatureColor, learningRate_, colors, weights, nfeatures, maxFeatures_);
if (frameNum_ == numInitializationFrames_ + 1)
if (inserted)
{
normalizeHistogram(weights, nfeatures);
nfeatures_row[x] = nfeatures;
}
}
else
{
// update histogram.
for (int i = 0; i < nfeatures; ++i)
weights[i] *= 1.0f - learningRate_;
// training-mode update
bool inserted = insertFeature(newFeatureColor, learningRate_, colors, weights, nfeatures, maxFeatures_);
insertFeature(newFeatureColor, 1.0f, colors, weights, nfeatures, maxFeatures_);
if (inserted)
if (frameNum_ == numInitializationFrames_ - 1)
normalizeHistogram(weights, nfeatures);
}
nfeatures_row[x] = nfeatures;
fgmask_row[x] = (uchar)(-isForeground);
}
}
}

Loading…
Cancel
Save