class cv::cuda::OpticalFlowDual_TVL1

Overview

Implementation of the Zach, Pock and Bischof Dual TV-L1 Optical Flow method. More…

#include <cudaoptflow.hpp>

class OpticalFlowDual_TVL1: public cv::cuda::DenseOpticalFlow
{
public:
    // methods

    virtual
    double
    getEpsilon() const = 0;

    virtual
    double
    getGamma() const = 0;

    virtual
    double
    getLambda() const = 0;

    virtual
    int
    getNumIterations() const = 0;

    virtual
    int
    getNumScales() const = 0;

    virtual
    int
    getNumWarps() const = 0;

    virtual
    double
    getScaleStep() const = 0;

    virtual
    double
    getTau() const = 0;

    virtual
    double
    getTheta() const = 0;

    virtual
    bool
    getUseInitialFlow() const = 0;

    virtual
    void
    setEpsilon(double epsilon) = 0;

    virtual
    void
    setGamma(double gamma) = 0;

    virtual
    void
    setLambda(double lambda) = 0;

    virtual
    void
    setNumIterations(int iterations) = 0;

    virtual
    void
    setNumScales(int nscales) = 0;

    virtual
    void
    setNumWarps(int warps) = 0;

    virtual
    void
    setScaleStep(double scaleStep) = 0;

    virtual
    void
    setTau(double tau) = 0;

    virtual
    void
    setTheta(double theta) = 0;

    virtual
    void
    setUseInitialFlow(bool useInitialFlow) = 0;

    static
    Ptr<OpticalFlowDual_TVL1>
    create(
        double tau = 0.25,
        double lambda = 0.15,
        double theta = 0.3,
        int nscales = 5,
        int warps = 5,
        double epsilon = 0.01,
        int iterations = 300,
        double scaleStep = 0.8,
        double gamma = 0.0,
        bool useInitialFlow = false
        );
};

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
    calc(
        InputArray I0,
        InputArray I1,
        InputOutputArray flow,
        Stream& stream = Stream::Null()
        ) = 0;

protected:
    // methods

    void
    writeFormat(FileStorage& fs) const;

Detailed Documentation

Implementation of the Zach, Pock and Bischof Dual TV-L1 Optical Flow method.

See also:

  1. Zach, T. Pock and H. Bischof, “A Duality Based Approach for Realtime TV-L1 Optical Flow”.

Javier Sanchez, Enric Meinhardt-Llopis and Gabriele Facciolo. “TV-L1 Optical Flow Estimation”.

Methods

virtual
double
getEpsilon() const = 0

Stopping criterion threshold used in the numerical scheme, which is a trade-off between precision and running time. A small value will yield more accurate solutions at the expense of a slower convergence.

virtual
double
getGamma() const = 0

Weight parameter for (u - v)^2, tightness parameter. It serves as a link between the attachment and the regularization terms. In theory, it should have a small value in order to maintain both parts in correspondence. The method is stable for a large range of values of this parameter.

virtual
double
getLambda() const = 0

Weight parameter for the data term, attachment parameter. This is the most relevant parameter, which determines the smoothness of the output. The smaller this parameter is, the smoother the solutions we obtain. It depends on the range of motions of the images, so its value should be adapted to each image sequence.

virtual
int
getNumIterations() const = 0

Stopping criterion iterations number used in the numerical scheme.

virtual
int
getNumScales() const = 0

Number of scales used to create the pyramid of images.

virtual
int
getNumWarps() const = 0

Number of warpings per scale. Represents the number of times that I1(x+u0) and grad( I1(x+u0) ) are computed per scale. This is a parameter that assures the stability of the method. It also affects the running time, so it is a compromise between speed and accuracy.

virtual
double
getTau() const = 0

Time step of the numerical scheme.

virtual
double
getTheta() const = 0

parameter used for motion estimation. It adds a variable allowing for illumination variations Set this parameter to 1. if you have varying illumination. See: Chambolle et al, A First-Order Primal-Dual Algorithm for Convex Problems with Applications to Imaging Journal of Mathematical imaging and vision, may 2011 Vol 40 issue 1, pp 120-145