motion_analysis_and_object_tracking.rst 8.23 KB
Newer Older
1 2 3
Motion Analysis and Object Tracking
===================================

4 5
.. highlight:: cpp

6
accumulate
7
--------------
8 9
Adds an image to the accumulator.

10
.. ocv:function:: void accumulate( InputArray src, InputOutputArray dst, InputArray mask=noArray() )
11

12
.. ocv:pyfunction:: cv2.accumulate(src, dst[, mask]) -> None
13

14 15 16
.. ocv:cfunction:: void cvAcc( const CvArr* image, CvArr* sum, const CvArr* mask=NULL )

.. ocv:pyoldfunction:: cv.Acc(image, sum, mask=None) -> None
17

18
    :param src: Input image as 1- or 3-channel, 8-bit or 32-bit floating point.
19

20
    :param dst: Accumulator image with the same number of channels as input image, 32-bit or 64-bit floating-point.
21

22
    :param mask: Optional operation mask.
23

24
The function adds ``src``  or some of its elements to ``dst`` :
25 26 27

.. math::

28
    \texttt{dst} (x,y)  \leftarrow \texttt{dst} (x,y) +  \texttt{src} (x,y)  \quad \text{if} \quad \texttt{mask} (x,y)  \ne 0
29

30
The function supports multi-channel images. Each channel is processed independently.
31

32
The functions ``accumulate*`` can be used, for example, to collect statistics of a scene background viewed by a still camera and for the further foreground-background segmentation.
33

34
.. seealso::
35 36 37 38

    :ocv:func:`accumulateSquare`,
    :ocv:func:`accumulateProduct`,
    :ocv:func:`accumulateWeighted`
39

40

41

42
accumulateSquare
43
--------------------
44 45
Adds the square of a source image to the accumulator.

46
.. ocv:function:: void accumulateSquare( InputArray src, InputOutputArray dst,  InputArray mask=noArray() )
47

48
.. ocv:pyfunction:: cv2.accumulateSquare(src, dst[, mask]) -> None
49

50 51 52
.. ocv:cfunction:: void cvSquareAcc( const CvArr* image, CvArr* sqsum, const CvArr* mask=NULL )

.. ocv:pyoldfunction:: cv.SquareAcc(image, sqsum, mask=None) -> None
53

54
    :param src: Input image as 1- or 3-channel, 8-bit or 32-bit floating point.
55

56
    :param dst: Accumulator image with the same number of channels as input image, 32-bit or 64-bit floating-point.
57

58
    :param mask: Optional operation mask.
59

60
The function adds the input image ``src`` or its selected region, raised to a power of 2, to the accumulator ``dst`` :
61 62 63

.. math::

64
    \texttt{dst} (x,y)  \leftarrow \texttt{dst} (x,y) +  \texttt{src} (x,y)^2  \quad \text{if} \quad \texttt{mask} (x,y)  \ne 0
65

66
The function supports multi-channel images. Each channel is processed independently.
67

68
.. seealso::
69 70 71 72

    :ocv:func:`accumulateSquare`,
    :ocv:func:`accumulateProduct`,
    :ocv:func:`accumulateWeighted`
73

74

75

76
accumulateProduct
77
---------------------
78 79
Adds the per-element product of two input images to the accumulator.

80
.. ocv:function:: void accumulateProduct( InputArray src1, InputArray src2, InputOutputArray dst, InputArray mask=noArray() )
81

82
.. ocv:pyfunction:: cv2.accumulateProduct(src1, src2, dst[, mask]) -> None
83

84 85 86
.. ocv:cfunction:: void cvMultiplyAcc( const CvArr* image1, const CvArr* image2, CvArr* acc, const CvArr* mask=NULL )

.. ocv:pyoldfunction:: cv.MultiplyAcc(image1, image2, acc, mask=None)-> None
87

88
    :param src1: First input image, 1- or 3-channel, 8-bit or 32-bit floating point.
89

90
    :param src2: Second input image of the same type and the same size as  ``src1`` .
91

92
    :param dst: Accumulator with the same number of channels as input images, 32-bit or 64-bit floating-point.
93

94
    :param mask: Optional operation mask.
95

96
The function adds the product of two images or their selected regions to the accumulator ``dst`` :
97 98 99

.. math::

100
    \texttt{dst} (x,y)  \leftarrow \texttt{dst} (x,y) +  \texttt{src1} (x,y)  \cdot \texttt{src2} (x,y)  \quad \text{if} \quad \texttt{mask} (x,y)  \ne 0
101

102 103
The function supports multi-channel images. Each channel is processed independently.

104
.. seealso::
105 106 107 108

    :ocv:func:`accumulate`,
    :ocv:func:`accumulateSquare`,
    :ocv:func:`accumulateWeighted`
109

110

111

112
accumulateWeighted
113
----------------------
114 115
Updates a running average.

116
.. ocv:function:: void accumulateWeighted( InputArray src, InputOutputArray dst, double alpha, InputArray mask=noArray() )
117

118
.. ocv:pyfunction:: cv2.accumulateWeighted(src, dst, alpha[, mask]) -> None
119

120 121
.. ocv:cfunction:: void cvRunningAvg( const CvArr* image, CvArr* acc, double alpha, const CvArr* mask=NULL )
.. ocv:pyoldfunction:: cv.RunningAvg(image, acc, alpha, mask=None)-> None
122

123
    :param src: Input image as 1- or 3-channel, 8-bit or 32-bit floating point.
124

125
    :param dst: Accumulator image with the same number of channels as input image, 32-bit or 64-bit floating-point.
126

127
    :param alpha: Weight of the input image.
128

129
    :param mask: Optional operation mask.
130

131
The function calculates the weighted sum of the input image ``src`` and the accumulator ``dst`` so that ``dst`` becomes a running average of a frame sequence:
132 133 134

.. math::

135
    \texttt{dst} (x,y)  \leftarrow (1- \texttt{alpha} )  \cdot \texttt{dst} (x,y) +  \texttt{alpha} \cdot \texttt{src} (x,y)  \quad \text{if} \quad \texttt{mask} (x,y)  \ne 0
136

137 138
That is, ``alpha`` regulates the update speed (how fast the accumulator "forgets" about earlier images).
The function supports multi-channel images. Each channel is processed independently.
139

140
.. seealso::
141 142 143

    :ocv:func:`accumulate`,
    :ocv:func:`accumulateSquare`,
144
    :ocv:func:`accumulateProduct`
145 146 147 148



phaseCorrelate
149
--------------
150
The function is used to detect translational shifts that occur between two images. The operation takes advantage of the Fourier shift theorem for detecting the translational shift in the frequency domain. It can be used for fast image registration as well as motion estimation. For more information please see http://en.wikipedia.org/wiki/Phase\_correlation .
151

152
Calculates the cross-power spectrum of two supplied source arrays. The arrays are padded if needed with :ocv:func:`getOptimalDFTSize`.
153

154 155 156
.. ocv:function:: Point2d phaseCorrelate(InputArray src1, InputArray src2, InputArray window = noArray())

.. ocv:function:: Point2d phaseCorrelateRes(InputArray src1, InputArray src2, InputArray window, double* response = 0)
157

158 159 160
    :param src1: Source floating point array (CV_32FC1 or CV_64FC1)
    :param src2: Source floating point array (CV_32FC1 or CV_64FC1)
    :param window: Floating point array with windowing coefficients to reduce edge effects (optional).
161
    :param response: Signal power within the 5x5 centroid around the peak, between 0 and 1 (optional).
162 163

Return value: detected phase shift (sub-pixel) between the two arrays.
164 165 166

The function performs the following equations

167
* First it applies a Hanning window (see http://en.wikipedia.org/wiki/Hann\_function) to each image to remove possible edge effects. This window is cached until the array size changes to speed up processing time.
168

169 170 171
* Next it computes the forward DFTs of each source array:

     .. math::
172

173
        \mathbf{G}_a = \mathcal{F}\{src_1\}, \; \mathbf{G}_b = \mathcal{F}\{src_2\}
174

175 176 177 178
  where
  :math:`\mathcal{F}` is the forward DFT.

* It then computes the cross-power spectrum of each frequency domain array:
179

180
    .. math::
181

182 183 184
          R = \frac{ \mathbf{G}_a \mathbf{G}_b^*}{|\mathbf{G}_a \mathbf{G}_b^*|}

* Next the cross-correlation is converted back into the time domain via the inverse DFT:
185

186
    .. math::
187

188 189 190 191
          r = \mathcal{F}^{-1}\{R\}

* Finally, it computes the peak location and computes a 5x5 weighted centroid around the peak to achieve sub-pixel accuracy.

192
    .. math::
193

194
         (\Delta x, \Delta y) = \texttt{weightedCentroid} \{\arg \max_{(x, y)}\{r\}\}
195

196 197
* If non-zero, the response parameter is computed as the sum of the elements of r within the 5x5 centroid around the peak location. It is normalized to a maximum of 1 (meaning there is a single peak) and will be smaller when there are multiple peaks.

198 199 200 201 202 203 204 205 206 207 208 209
.. seealso::
    :ocv:func:`dft`,
    :ocv:func:`getOptimalDFTSize`,
    :ocv:func:`idft`,
    :ocv:func:`mulSpectrums`
    :ocv:func:`createHanningWindow`

createHanningWindow
-------------------------------
This function computes a Hanning window coefficients in two dimensions. See http://en.wikipedia.org/wiki/Hann\_function and http://en.wikipedia.org/wiki/Window\_function for more information.

.. ocv:function:: void createHanningWindow(OutputArray dst, Size winSize, int type)
210

211 212 213 214
    :param dst: Destination array to place Hann coefficients in
    :param winSize: The window size specifications
    :param type: Created array type

215 216
An example is shown below: ::

217
    // create hanning window of size 100x100 and type CV_32F
218 219 220 221 222
    Mat hann;
    createHanningWindow(hann, Size(100, 100), CV_32F);

.. seealso::
    :ocv:func:`phaseCorrelate`