class cv::BackgroundSubtractorMOG2

Overview

Gaussian Mixture-based Background/Foreground Segmentation Algorithm. More…

#include <background_segm.hpp>

class BackgroundSubtractorMOG2: public cv::BackgroundSubtractor
{
public:
    // methods

    virtual
    void
    apply(
        InputArray image,
        OutputArray fgmask,
        double learningRate = -1
        ) = 0;

    virtual
    double
    getBackgroundRatio() const = 0;

    virtual
    double
    getComplexityReductionThreshold() const = 0;

    virtual
    bool
    getDetectShadows() const = 0;

    virtual
    int
    getHistory() const = 0;

    virtual
    int
    getNMixtures() const = 0;

    virtual
    double
    getShadowThreshold() const = 0;

    virtual
    int
    getShadowValue() const = 0;

    virtual
    double
    getVarInit() const = 0;

    virtual
    double
    getVarMax() const = 0;

    virtual
    double
    getVarMin() const = 0;

    virtual
    double
    getVarThreshold() const = 0;

    virtual
    double
    getVarThresholdGen() const = 0;

    virtual
    void
    setBackgroundRatio(double ratio) = 0;

    virtual
    void
    setComplexityReductionThreshold(double ct) = 0;

    virtual
    void
    setDetectShadows(bool detectShadows) = 0;

    virtual
    void
    setHistory(int history) = 0;

    virtual
    void
    setNMixtures(int nmixtures) = 0;

    virtual
    void
    setShadowThreshold(double threshold) = 0;

    virtual
    void
    setShadowValue(int value) = 0;

    virtual
    void
    setVarInit(double varInit) = 0;

    virtual
    void
    setVarMax(double varMax) = 0;

    virtual
    void
    setVarMin(double varMin) = 0;

    virtual
    void
    setVarThreshold(double varThreshold) = 0;

    virtual
    void
    setVarThresholdGen(double varThresholdGen) = 0;
};

// direct descendants

class BackgroundSubtractorMOG2;

Inherited Members

public:
    // methods

    virtual
    void
    clear();

    virtual
    bool
    empty() const;

    virtual
    String
    getDefaultName() const;

    virtual
    void
    read(const FileNode& fn);

    virtual
    void
    save(const String& filename) const;

    virtual
    void
    write(FileStorage& fs) const;

    template <typename _Tp>
    static
    Ptr<_Tp>
    load(
        const String& filename,
        const String& objname = String()
        );

    template <typename _Tp>
    static
    Ptr<_Tp>
    loadFromString(
        const String& strModel,
        const String& objname = String()
        );

    template <typename _Tp>
    static
    Ptr<_Tp>
    read(const FileNode& fn);

    virtual
    void
    apply(
        InputArray image,
        OutputArray fgmask,
        double learningRate = -1
        ) = 0;

    virtual
    void
    getBackgroundImage(OutputArray backgroundImage) const = 0;

protected:
    // methods

    void
    writeFormat(FileStorage& fs) const;

Detailed Documentation

Gaussian Mixture-based Background/Foreground Segmentation Algorithm.

The class implements the Gaussian mixture model background subtraction described in [98] and [97].

Methods

virtual
void
apply(
    InputArray image,
    OutputArray fgmask,
    double learningRate = -1
    ) = 0

Computes a foreground mask.

Parameters:

image Next video frame. Floating point frame will be used without scaling and should be in range \([0,255]\).
fgmask The output foreground mask as an 8-bit binary image.
learningRate The value between 0 and 1 that indicates how fast the background model is learnt. Negative parameter value makes the algorithm to use some automatically chosen learning rate. 0 means that the background model is not updated at all, 1 means that the background model is completely reinitialized from the last frame.
virtual
double
getBackgroundRatio() const = 0

Returns the “background ratio” parameter of the algorithm.

If a foreground pixel keeps semi-constant value for about backgroundRatio*history frames, it’s considered background and added to the model as a center of a new component. It corresponds to TB parameter in the paper.

virtual
double
getComplexityReductionThreshold() const = 0

Returns the complexity reduction threshold.

This parameter defines the number of samples needed to accept to prove the component exists. CT=0.05 is a default value for all the samples. By setting CT=0 you get an algorithm very similar to the standard Stauffer&Grimson algorithm.

virtual
bool
getDetectShadows() const = 0

Returns the shadow detection flag.

If true, the algorithm detects shadows and marks them. See createBackgroundSubtractorMOG2 for details.

virtual
int
getHistory() const = 0

Returns the number of last frames that affect the background model.

virtual
int
getNMixtures() const = 0

Returns the number of gaussian components in the background model.

virtual
double
getShadowThreshold() const = 0

Returns the shadow threshold.

A shadow is detected if pixel is a darker version of the background. The shadow threshold (Tau in the paper) is a threshold defining how much darker the shadow can be. Tau= 0.5 means that if a pixel is more than twice darker then it is not shadow. See Prati, Mikic, Trivedi and Cucchiara, Detecting Moving Shadows…*, IEEE PAMI,2003.

virtual
int
getShadowValue() const = 0

Returns the shadow value.

Shadow value is the value used to mark shadows in the foreground mask. Default value is 127. Value 0 in the mask always means background, 255 means foreground.

virtual
double
getVarInit() const = 0

Returns the initial variance of each gaussian component.

virtual
double
getVarThreshold() const = 0

Returns the variance threshold for the pixel-model match.

The main threshold on the squared Mahalanobis distance to decide if the sample is well described by the background model or not. Related to Cthr from the paper.

virtual
double
getVarThresholdGen() const = 0

Returns the variance threshold for the pixel-model match used for new mixture component generation.

Threshold for the squared Mahalanobis distance that helps decide when a sample is close to the existing components (corresponds to Tg in the paper). If a pixel is not close to any component, it is considered foreground or added as a new component. 3 sigma => Tg=3*3=9 is default. A smaller Tg value generates more components. A higher Tg value may result in a small number of components but they can grow too large.

virtual
void
setBackgroundRatio(double ratio) = 0

Sets the “background ratio” parameter of the algorithm.

virtual
void
setComplexityReductionThreshold(double ct) = 0

Sets the complexity reduction threshold.

virtual
void
setDetectShadows(bool detectShadows) = 0

Enables or disables shadow detection.

virtual
void
setHistory(int history) = 0

Sets the number of last frames that affect the background model.

virtual
void
setNMixtures(int nmixtures) = 0

Sets the number of gaussian components in the background model.

The model needs to be reinitalized to reserve memory.

virtual
void
setShadowThreshold(double threshold) = 0

Sets the shadow threshold.

virtual
void
setShadowValue(int value) = 0

Sets the shadow value.

virtual
void
setVarInit(double varInit) = 0

Sets the initial variance of each gaussian component.

virtual
void
setVarThreshold(double varThreshold) = 0

Sets the variance threshold for the pixel-model match.

virtual
void
setVarThresholdGen(double varThresholdGen) = 0

Sets the variance threshold for the pixel-model match used for new mixture component generation.