Commit 55f8310c authored by Vladislav Vinogradov's avatar Vladislav Vinogradov

fixed number of training mode operation

parent 9b16563f
...@@ -199,7 +199,7 @@ namespace ...@@ -199,7 +199,7 @@ namespace
public: 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, 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, 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), frame_(frame), fgmask_(fgmask), nfeatures_(nfeatures), colors_(colors), weights_(weights),
maxFeatures_(maxFeatures), learningRate_(learningRate), numInitializationFrames_(numInitializationFrames), maxFeatures_(maxFeatures), learningRate_(learningRate), numInitializationFrames_(numInitializationFrames),
quantizationLevels_(quantizationLevels), backgroundPrior_(backgroundPrior), decisionThreshold_(decisionThreshold), quantizationLevels_(quantizationLevels), backgroundPrior_(backgroundPrior), decisionThreshold_(decisionThreshold),
...@@ -227,7 +227,7 @@ namespace ...@@ -227,7 +227,7 @@ namespace
double maxVal_; double maxVal_;
double minVal_; double minVal_;
size_t frameNum_; int frameNum_;
}; };
void GMG_LoopBody::operator() (const cv::Range& range) const void GMG_LoopBody::operator() (const cv::Range& range) const
...@@ -262,7 +262,7 @@ namespace ...@@ -262,7 +262,7 @@ namespace
bool isForeground = false; bool isForeground = false;
if (frameNum_ > numInitializationFrames_) if (frameNum_ >= numInitializationFrames_)
{ {
// typical operation // typical operation
...@@ -272,33 +272,31 @@ namespace ...@@ -272,33 +272,31 @@ namespace
const double posterior = (weight * backgroundPrior_) / (weight * backgroundPrior_ + (1.0 - weight) * (1.0 - backgroundPrior_)); const double posterior = (weight * backgroundPrior_) / (weight * backgroundPrior_ + (1.0 - weight) * (1.0 - backgroundPrior_));
isForeground = ((1.0 - posterior) > decisionThreshold_); isForeground = ((1.0 - posterior) > decisionThreshold_);
}
fgmask_row[x] = (uchar)(-isForeground); // update histogram.
if (frameNum_ <= numInitializationFrames_ + 1) for (int i = 0; i < nfeatures; ++i)
{ weights[i] *= 1.0f - learningRate_;
// training-mode update
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); normalizeHistogram(weights, nfeatures);
nfeatures_row[x] = nfeatures;
}
} }
else else
{ {
// update histogram. // training-mode update
for (int i = 0; i < nfeatures; ++i)
weights[i] *= 1.0f - learningRate_;
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); normalizeHistogram(weights, nfeatures);
} }
nfeatures_row[x] = nfeatures; fgmask_row[x] = (uchar)(-isForeground);
} }
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment