The Gunnar-Farneback optical flow
The Gunnar-Farneback algorithm was developed to produce dense Optical Flow technique results (that is, on a dense grid of points). The first step is to approximate each neighborhood of both frames by quadratic polynomials. Afterwards, considering these quadratic polynomials, a new signal is constructed by a global displacement. Finally, this global displacement is calculated by equating the coefficients in the quadratic polynomials' yields.
Let's now see the implementation of this method, which uses the calcOpticalFlowFarneback()
function. The following is an example (maxMovementFarneback
) that uses this function to detect the maximum movement as shown in the previous example:
void maxMovementFarneback(Mat& prev_frame, Mat& frame)
{
// 1-Set the Parameters
Mat optical_flow = Mat(prev_frame.size(), COLOR_BGR2GRAY);
double pyr_scale = 0.5;
int levels = 3;
int win_size = 5;
int iterations = 5;
int poly_n = 5;
double poly_sigma...