motion_analysis.rst 4.15 KB
Newer Older
1 2 3 4 5 6 7 8 9 10
Motion Analysis
===============

.. highlight:: cpp


CalcOpticalFlowBM
-----------------
Calculates the optical flow for two images by using the block matching method.

11
.. ocv:cfunction:: void cvCalcOpticalFlowBM( const CvArr* prev, const CvArr* curr, CvSize block_size, CvSize shift_size, CvSize max_range, int use_previous, CvArr* velx, CvArr* vely )
12

13
.. ocv:pyoldfunction:: cv.CalcOpticalFlowBM(prev, curr, blockSize, shiftSize, max_range, usePrevious, velx, vely)-> None
14

15
        :param prev: First image, 8-bit, single-channel
16

17
        :param curr: Second image, 8-bit, single-channel
18

19
        :param block_size: Size of basic blocks that are compared
20

21
        :param shift_size: Block coordinate increments
22

23
        :param max_range: Size of the scanned neighborhood in pixels around the block
24

25
        :param use_previous: Flag that specifies whether to use the input velocity as initial approximations or not.
26 27 28 29 30

        :param velx: Horizontal component of the optical flow of

            .. math::

31
                \left \lfloor   \frac{\texttt{prev->width} - \texttt{block\_size.width}}{\texttt{shift\_size.width}}   \right \rfloor \times \left \lfloor   \frac{\texttt{prev->height} - \texttt{block\_size.height}}{\texttt{shift\_size.height}}   \right \rfloor
32

33
            size, 32-bit floating-point, single-channel
34

35
        :param vely: Vertical component of the optical flow of the same size  ``velx`` , 32-bit floating-point, single-channel
36 37


38 39
The function calculates the optical flow for overlapped blocks ``block_size.width x block_size.height`` pixels each, thus the velocity fields are smaller than the original images. For every block in  ``prev``
the functions tries to find a similar block in ``curr`` in some neighborhood of the original block or shifted by ``(velx(x0,y0), vely(x0,y0))`` block as has been calculated by previous function call (if ``use_previous=1``)
40 41 42 43 44 45


CalcOpticalFlowHS
-----------------
Calculates the optical flow for two images using Horn-Schunck algorithm.

46
.. ocv:cfunction:: void cvCalcOpticalFlowHS(const CvArr* prev, const CvArr* curr, int use_previous, CvArr* velx, CvArr* vely, double lambda, CvTermCriteria criteria)
47 48 49

.. ocv:pyoldfunction:: cv.CalcOpticalFlowHS(prev, curr, usePrevious, velx, vely, lambda, criteria)-> None

50
    :param prev: First image, 8-bit, single-channel
51

52
    :param curr: Second image, 8-bit, single-channel
53

54
    :param use_previous: Flag that specifies whether to use the input velocity as initial approximations or not.
55

56
    :param velx: Horizontal component of the optical flow of the same size as input images, 32-bit floating-point, single-channel
57

58
    :param vely: Vertical component of the optical flow of the same size as input images, 32-bit floating-point, single-channel
59 60 61

    :param lambda: Smoothness weight. The larger it is, the smoother optical flow map you get.

62
    :param criteria: Criteria of termination of velocity computing
63 64 65 66 67 68 69 70 71

The function computes the flow for every pixel of the first input image using the Horn and Schunck algorithm [Horn81]_. The function is obsolete. To track sparse features, use :ocv:func:`calcOpticalFlowPyrLK`. To track all the pixels, use :ocv:func:`calcOpticalFlowFarneback`.


CalcOpticalFlowLK
-----------------

Calculates the optical flow for two images using Lucas-Kanade algorithm.

72
.. ocv:cfunction:: void cvCalcOpticalFlowLK( const CvArr* prev, const CvArr* curr, CvSize win_size, CvArr* velx, CvArr* vely )
73 74 75

.. ocv:pyoldfunction:: cv.CalcOpticalFlowLK(prev, curr, winSize, velx, vely)-> None

76
    :param prev: First image, 8-bit, single-channel
77

78
    :param curr: Second image, 8-bit, single-channel
79

80
    :param win_size: Size of the averaging window used for grouping pixels
81

82
    :param velx: Horizontal component of the optical flow of the same size as input images, 32-bit floating-point, single-channel
83

84
    :param vely: Vertical component of the optical flow of the same size as input images, 32-bit floating-point, single-channel
85 86 87 88

The function computes the flow for every pixel of the first input image using the Lucas and Kanade algorithm [Lucas81]_. The function is obsolete. To track sparse features, use :ocv:func:`calcOpticalFlowPyrLK`. To track all the pixels, use :ocv:func:`calcOpticalFlowFarneback`.