13

I'm using OpenCV2.2 to implement moving objects detection with the method of Background Subtraction. And I use the Gaussian Mixture Model(GMM) method to model the background reference image.

I directly get the foreground pixels(or foreground mask) by using the class cv::BackgroundSubtractorMOG provided in OpenCV2.2. It's convenient but the foreground mask returned by cv::BackgroundSubtractorMOG is not as good as I expected. In addition, it seems that cv::BackgroundSubtractorMOG performs poorer than the method of GMM wrote in C language provided in OpenCV1.0.

The following is my code in OpenCV2.2:

cv::BackgroundSubtractorMOG mog;
mog(frame, fgMask, 0.01);

So, did I use the method in a wrong way?

By the way, does cv::BackgroundSubtractorMOG perform shadow removal on the foreground pixels?

Thank you very much.

Jav_Rock
  • 22,059
  • 20
  • 123
  • 164
visualassit
  • 133
  • 1
  • 1
  • 5
  • Here's a useful overview, from 3.0 docs, of using OpenCV's Background Subtraction functions: http://docs.opencv.org/master/db/d5c/tutorial_py_bg_subtraction.html – Pierz Oct 02 '15 at 09:29

4 Answers4

12

When you create mog, you are not defining any parameters, so it is created with default parameters. Here you have a description of each parameter, maybe is just that. Try with 3, 4 5 Gaussians.

This function does not perforn shadow-removal but you have this other function that does. Good luck!

Jav_Rock
  • 22,059
  • 20
  • 123
  • 164
5

There are recent algorithms which remove backgrounds (detect foreground) far better than the standard GMM implementation in OpenCV.

For example, there is a block-based classifier cascade approach described in this journal article, along with its C++ based source code.

mtall
  • 3,574
  • 15
  • 23
  • What should the input directory structure look like for using this tool? It seems to segfault on readdir() no matter what I throw at it. – RussellStewart Nov 06 '14 at 06:04
1

F.X.'s answer on this thread gives sample parameters of

backgroundSubtractor = new BackgroundSubtractorMOG(3, 4, 0.8);
Community
  • 1
  • 1
austin
  • 998
  • 2
  • 12
  • 22
  • but that's running very slowly on my app. i'm on the lookout for some good parameters myself – austin Mar 08 '13 at 23:54
0

I will recommend using the following settings to get started. Then you can start tuning your parameters:

cv::BackgroundSubtractorMOG2 mog;
mog(rawFrame,foregroundFrame,-1);
mog.set("nmixtures", 3);
mog.set("detectShadows",1);   

In this example I set the MOG2 subtractor with 3 Gaussian mixtures. I also enabled shadow detection.

Jaime Ivan Cervantes
  • 3,579
  • 1
  • 40
  • 38