• Roman Donchenko's avatar
    Merge remote-tracking branch 'origin/2.4' · dcaf9235
    Roman Donchenko authored
    Conflicts:
    	3rdparty/ffmpeg/ffmpeg_version.cmake
    	cmake/OpenCVFindLibsGrfmt.cmake
    	cmake/templates/cvconfig.h.cmake
    	modules/bioinspired/doc/retina/index.rst
    	modules/calib3d/doc/camera_calibration_and_3d_reconstruction.rst
    	modules/calib3d/src/precomp.hpp
    	modules/contrib/src/inputoutput.cpp
    	modules/contrib/src/precomp.hpp
    	modules/core/include/opencv2/core/internal.hpp
    	modules/core/include/opencv2/core/types_c.h
    	modules/core/src/drawing.cpp
    	modules/core/src/precomp.hpp
    	modules/core/src/system.cpp
    	modules/features2d/doc/common_interfaces_of_descriptor_matchers.rst
    	modules/features2d/doc/common_interfaces_of_feature_detectors.rst
    	modules/features2d/include/opencv2/features2d/features2d.hpp
    	modules/features2d/src/precomp.hpp
    	modules/flann/src/precomp.hpp
    	modules/gpu/doc/camera_calibration_and_3d_reconstruction.rst
    	modules/gpu/doc/image_filtering.rst
    	modules/gpu/doc/image_processing.rst
    	modules/gpu/doc/video.rst
    	modules/gpu/perf/perf_imgproc.cpp
    	modules/gpu/perf4au/main.cpp
    	modules/gpu/src/imgproc.cpp
    	modules/gpu/src/precomp.hpp
    	modules/gpu/test/test_imgproc.cpp
    	modules/highgui/CMakeLists.txt
    	modules/highgui/test/test_precomp.hpp
    	modules/imgproc/doc/structural_analysis_and_shape_descriptors.rst
    	modules/imgproc/src/precomp.hpp
    	modules/java/generator/src/cpp/Mat.cpp
    	modules/legacy/src/precomp.hpp
    	modules/ml/doc/k_nearest_neighbors.rst
    	modules/ml/src/precomp.hpp
    	modules/nonfree/doc/feature_detection.rst
    	modules/nonfree/src/precomp.hpp
    	modules/objdetect/include/opencv2/objdetect/objdetect.hpp
    	modules/objdetect/src/cascadedetect.cpp
    	modules/objdetect/src/hog.cpp
    	modules/objdetect/src/precomp.hpp
    	modules/objdetect/test/test_latentsvmdetector.cpp
    	modules/ocl/src/hog.cpp
    	modules/ocl/src/opencl/objdetect_hog.cl
    	modules/ocl/src/precomp.hpp
    	modules/photo/src/precomp.hpp
    	modules/stitching/src/precomp.hpp
    	modules/superres/perf/perf_precomp.hpp
    	modules/superres/src/optical_flow.cpp
    	modules/superres/src/precomp.hpp
    	modules/superres/test/test_precomp.hpp
    	modules/ts/include/opencv2/ts.hpp
    	modules/video/src/precomp.hpp
    	modules/videostab/src/precomp.hpp
    	modules/world/src/precomp.hpp
    dcaf9235
optflow.rst 7.79 KB

Optical Flow

gpu::BroxOpticalFlow

Class computing the optical flow for two images using Brox et al Optical Flow algorithm ([Brox2004]).

class BroxOpticalFlow
{
public:
    BroxOpticalFlow(float alpha_, float gamma_, float scale_factor_, int inner_iterations_, int outer_iterations_, int solver_iterations_);

    //! Compute optical flow
    //! frame0 - source frame (supports only CV_32FC1 type)
    //! frame1 - frame to track (with the same size and type as frame0)
    //! u      - flow horizontal component (along x axis)
    //! v      - flow vertical component (along y axis)
    void operator ()(const GpuMat& frame0, const GpuMat& frame1, GpuMat& u, GpuMat& v, Stream& stream = Stream::Null());

    //! flow smoothness
    float alpha;

    //! gradient constancy importance
    float gamma;

    //! pyramid scale factor
    float scale_factor;

    //! number of lagged non-linearity iterations (inner loop)
    int inner_iterations;

    //! number of warping iterations (number of pyramid levels)
    int outer_iterations;

    //! number of linear system solver iterations
    int solver_iterations;

    GpuMat buf;
};

gpu::FarnebackOpticalFlow

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

class CV_EXPORTS FarnebackOpticalFlow
{
public:
    FarnebackOpticalFlow()
    {
        numLevels = 5;
        pyrScale = 0.5;
        fastPyramids = false;
        winSize = 13;
        numIters = 10;
        polyN = 5;
        polySigma = 1.1;
        flags = 0;
    }

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

    void operator ()(const GpuMat &frame0, const GpuMat &frame1, GpuMat &flowx, GpuMat &flowy, Stream &s = Stream::Null());

    void releaseMemory();

private:
    /* hidden */
};

gpu::FarnebackOpticalFlow::operator ()

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

gpu::FarnebackOpticalFlow::releaseMemory

Releases unused auxiliary memory buffers.

gpu::PyrLKOpticalFlow

Class used for calculating an optical flow.

class PyrLKOpticalFlow
{
public:
    PyrLKOpticalFlow();

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

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

    Size winSize;
    int maxLevel;
    int iters;
    bool useInitialFlow;

    void releaseMemory();
};

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

gpu::PyrLKOpticalFlow::sparse

Calculate an optical flow for a sparse feature set.

gpu::PyrLKOpticalFlow::dense

Calculate dense optical flow.

gpu::PyrLKOpticalFlow::releaseMemory

Releases inner buffers memory.

gpu::interpolateFrames

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

[Brox2004]
  1. Brox, A. Bruhn, N. Papenberg, J. Weickert. High accuracy optical flow estimation based on a theory for warping. ECCV 2004.