Background Scene Modeling Problem on Foreground Extraction
I am using Backgroundsubstraction method to human body extraction.When it comes to detect moving bodies this algorithm work well but if scenes that do not contain moving foreground it fail to detect bodies. How can i solve this problem?What can i add this algorithm?
For example If we’re watching anyone comes in to the park, then this person is a new foreground object. But should it stay foreground forever? In areas where do not contain moving foreground(a foreground person does not move but person is still there) , I could continue updating our foreground bject.How can i keep this person on foreground extraction ?
Here is my code.It can't detect objects that doesn't move as i mentioned above.
let video = document.getElementById('videoInput');
let cap = new cv.VideoCapture(video);
let frame = new cv.Mat(video.height, video.width, cv.CV_8UC4);
let fgmask = new cv.Mat(video.height, video.width, cv.CV_8UC1);
let fgbg = new cv.BackgroundSubtractorMOG2(500, 16, true);
const FPS = 30;
function processVideo() {
try {
if (!streaming) {
// clean and stop.
frame.delete(); fgmask.delete(); fgbg.delete();
return;
}
let begin = Date.now();
// start processing.
cap.read(frame);
fgbg.apply(frame, fgmask);
frame.copyTo(fgmask, fgmask);
cv.imshow('canvasOutput', fgmask);
// schedule the next one.
let delay = 1000/FPS - (Date.now() - begin);
setTimeout(processVideo, delay);
} catch (err) {
utils.printError(err);
}
};
// schedule the first one.
setTimeout(processVideo, 0);
As said before, but ignored, you cannot solve this issue with BGS. It will always have objects move to the background in movement is an issue. Either combine it with a detector or a tracker, to keep track where objects are and somehow prohibit the BGS algorithm to update on those locations.