video_analysis.rst 20.1 KB

Video Analysis

ocl::GoodFeaturesToTrackDetector_OCL

Class used for strong corners detection on an image.

class GoodFeaturesToTrackDetector_OCL
{
public:
    explicit GoodFeaturesToTrackDetector_OCL(int maxCorners = 1000, double qualityLevel = 0.01, double minDistance = 0.0,
        int blockSize = 3, bool useHarrisDetector = false, double harrisK = 0.04);

    //! return 1 rows matrix with CV_32FC2 type
    void operator ()(const oclMat& image, oclMat& corners, const oclMat& mask = oclMat());
    //! download points of type Point2f to a vector. the vector's content will be erased
    void downloadPoints(const oclMat &points, std::vector<Point2f> &points_v);

    int maxCorners;
    double qualityLevel;
    double minDistance;

    int blockSize;
    bool useHarrisDetector;
    double harrisK;
    void releaseMemory()
    {
        Dx_.release();
        Dy_.release();
        eig_.release();
        minMaxbuf_.release();
        tmpCorners_.release();
    }
};

The class finds the most prominent corners in the image.

ocl::GoodFeaturesToTrackDetector_OCL::GoodFeaturesToTrackDetector_OCL

Constructor.

ocl::GoodFeaturesToTrackDetector_OCL::operator ()

Finds the most prominent corners in the image.

ocl::GoodFeaturesToTrackDetector_OCL::releaseMemory

Releases inner buffers memory.

ocl::FarnebackOpticalFlow

Class computing a dense optical flow using the Gunnar Farneback's algorithm.

class CV_EXPORTS FarnebackOpticalFlow
{
public:
    FarnebackOpticalFlow();

    int numLevels;
    double pyrScale;
    bool fastPyramids;
    int winSize;
    int numIters;
    int polyN;
    double polySigma;
    int flags;

    void operator ()(const oclMat &frame0, const oclMat &frame1, oclMat &flowx, oclMat &flowy);

    void releaseMemory();

private:
    /* hidden */
};

ocl::FarnebackOpticalFlow::operator ()

Computes a dense optical flow using the Gunnar Farneback's algorithm.

ocl::FarnebackOpticalFlow::releaseMemory

Releases unused auxiliary memory buffers.

ocl::PyrLKOpticalFlow

Class used for calculating an optical flow.

class PyrLKOpticalFlow
{
public:
    PyrLKOpticalFlow();

    void sparse(const oclMat& prevImg, const oclMat& nextImg, const oclMat& prevPts, oclMat& nextPts,
        oclMat& status, oclMat* err = 0);

    void dense(const oclMat& prevImg, const oclMat& nextImg, oclMat& u, oclMat& v, oclMat* err = 0);

    Size winSize;
    int maxLevel;
    int iters;
    double derivLambda;
    bool useInitialFlow;
    float minEigThreshold;
    bool getMinEigenVals;

    void releaseMemory();

private:
    /* hidden */
};

The class can calculate an optical flow for a sparse feature set or dense optical flow using the iterative Lucas-Kanade method with pyramids.

ocl::PyrLKOpticalFlow::sparse

Calculate an optical flow for a sparse feature set.

ocl::PyrLKOpticalFlow::dense

Calculate dense optical flow.

ocl::PyrLKOpticalFlow::releaseMemory

Releases inner buffers memory.

ocl::interpolateFrames

Interpolates frames (images) using provided optical flow (displacement field).

ocl::KalmanFilter

Kalman filter class.

class CV_EXPORTS KalmanFilter
{
public:
    KalmanFilter();
    //! the full constructor taking the dimensionality of the state, of the measurement and of the control vector
    KalmanFilter(int dynamParams, int measureParams, int controlParams=0, int type=CV_32F);
    //! re-initializes Kalman filter. The previous content is destroyed.
    void init(int dynamParams, int measureParams, int controlParams=0, int type=CV_32F);

    const oclMat& predict(const oclMat& control=oclMat());
    const oclMat& correct(const oclMat& measurement);

    oclMat statePre; //!< predicted state (x'(k)): x(k)=A*x(k-1)+B*u(k)
    oclMat statePost; //!< corrected state (x(k)): x(k)=x'(k)+K(k)*(z(k)-H*x'(k))
    oclMat transitionMatrix; //!< state transition matrix (A)
    oclMat controlMatrix; //!< control matrix (B) (not used if there is no control)
    oclMat measurementMatrix; //!< measurement matrix (H)
    oclMat processNoiseCov; //!< process noise covariance matrix (Q)
    oclMat measurementNoiseCov;//!< measurement noise covariance matrix (R)
    oclMat errorCovPre; //!< priori error estimate covariance matrix (P'(k)): P'(k)=A*P(k-1)*At + Q)*/
    oclMat gain; //!< Kalman gain matrix (K(k)): K(k)=P'(k)*Ht*inv(H*P'(k)*Ht+R)
    oclMat errorCovPost; //!< posteriori error estimate covariance matrix (P(k)): P(k)=(I-K(k)*H)*P'(k)
private:
    /* hidden */
};

ocl::KalmanFilter::KalmanFilter

The constructors.

ocl::KalmanFilter::init

Re-initializes Kalman filter. The previous content is destroyed.

ocl::KalmanFilter::predict

Computes a predicted state.

ocl::KalmanFilter::correct

Updates the predicted state from the measurement.

ocl::BackgroundSubtractor

Base class for background/foreground segmentation.

class CV_EXPORTS BackgroundSubtractor
{
public:
    //! the virtual destructor
    virtual ~BackgroundSubtractor();
    //! the update operator that takes the next video frame and returns the current foreground mask as 8-bit binary image.
    virtual void operator()(const oclMat& image, oclMat& fgmask, float learningRate);

    //! computes a background image
    virtual void getBackgroundImage(oclMat& backgroundImage) const = 0;
};

The class is only used to define the common interface for the whole family of background/foreground segmentation algorithms.

ocl::BackgroundSubtractor::operator()

Computes a foreground mask.

ocl::BackgroundSubtractor::getBackgroundImage

Computes a background image.

Note

Sometimes the background image can be very blurry, as it contain the average background statistics.

ocl::MOG

Gaussian Mixture-based Backbround/Foreground Segmentation Algorithm.

class CV_EXPORTS MOG: public cv::ocl::BackgroundSubtractor
{
public:
    //! the default constructor
    MOG(int nmixtures = -1);

    //! re-initiaization method
    void initialize(Size frameSize, int frameType);

    //! the update operator
    void operator()(const oclMat& frame, oclMat& fgmask, float learningRate = 0.f);

    //! computes a background image which are the mean of all background gaussians
    void getBackgroundImage(oclMat& backgroundImage) const;

    //! releases all inner buffers
    void release();

    int history;
    float varThreshold;
    float backgroundRatio;
    float noiseSigma;

private:
    /* hidden */
};

The class discriminates between foreground and background pixels by building and maintaining a model of the background. Any pixel which does not fit this model is then deemed to be foreground. The class implements algorithm described in [MOG2001]_.

ocl::MOG::MOG

The constructor.

Default constructor sets all parameters to default values.

ocl::MOG::operator()

Updates the background model and returns the foreground mask.

ocl::MOG::getBackgroundImage

Computes a background image.

ocl::MOG::release

Releases all inner buffer's memory.

ocl::MOG2

ocl::MOG2::MOG2

The constructor.

Default constructor sets all parameters to default values.

ocl::MOG2::operator()

Updates the background model and returns the foreground mask.

ocl::MOG2::getBackgroundImage

Computes a background image.

ocl::MOG2::release

Releases all inner buffer's memory.