opticalFlow

PURPOSE ^

Coarse-to-fine optical flow using Lucas&Kanade or Horn&Schunck.

SYNOPSIS ^

function [Vx,Vy,reliab]=opticalFlow( I1, I2, varargin )

DESCRIPTION ^

 Coarse-to-fine optical flow using Lucas&Kanade or Horn&Schunck.

 Implemented 'type' of optical flow estimation:
  LK: http://en.wikipedia.org/wiki/Lucas-Kanade_method
  HS: http://en.wikipedia.org/wiki/Horn-Schunck_method
 LK is a local, fast method (the implementation is fully vectorized).
 HS is a global, slower method (an SSE implementation is provided).

 Common parameters for LK and HS: 'smooth' determines smoothing prior to
 flow computation and can make flow estimation more robust. 'resample' can
 be used to downsample an image for faster but lower quality results, e.g.
 resample=.5 makes flow computation about 4x faster. LK: 'radius' controls
 integration window size (and smoothness of flow). HS: 'alpha' controls
 tradeoff between data and smoothness term (and smoothness of flow) and
 'nIter' determines number of gradient decent steps.

 USAGE
  [Vx,Vy,reliab] = opticalFlow( I1, I2, pFlow )

 INPUTS
  I1, I2   - input images to calculate flow between
  pFlow    - parameters (struct or name/value pairs)
   .type       - ['LK'] may be either 'LK' or 'HS'
   .smooth     - [1] smoothing radius for triangle filter (may be 0)
   .resample   - [1] resampling amount (must be a power of 2)
   .radius     - [5] integration radius for weighted window [LK only]
   .alpha      - [1] smoothness constraint [HS only]
   .nIter      - [250] number of iterations [HS only]

 OUTPUTS
  Vx, Vy   - x,y components of flow  [Vx>0->right, Vy>0->down]
  reliab   - reliability of flow in given window [LK only]

 EXAMPLE - compute LK flow on test images
  load opticalFlowTest;
  [Vx,Vy]=opticalFlow(I1,I2,'smooth',1,'radius',10,'type','LK');
  figure(1); im(I1); figure(2); im(I2);
  figure(3); im([Vx Vy]); colormap jet;

 EXAMPLE - rectify I1 to I2 using computed flow
  load opticalFlowTest;
  [Vx,Vy]=opticalFlow(I1,I2,'smooth',1,'radius',10,'type','LK');
  I1=imtransform2(I1,[],'vs',-Vx,'us',-Vy,'pad','replicate');
  figure(1); im(I1); figure(2); im(I2);

 EXAMPLE - compare LK and HS flow
  load opticalFlowTest;
  prm={'smooth',1,'radius',10,'alpha',20,'nIter',200,'type'};
  tic, [Vx1,Vy1]=opticalFlow(I1,I2,prm{:},'LK'); toc
  tic, [Vx2,Vy2]=opticalFlow(I1,I2,prm{:},'HS'); toc
  figure(1); im([Vx1 Vy1; Vx2 Vy2]); colormap jet;

 See also convTri, imtransform2

 Piotr's Image&Video Toolbox      Version 3.01
 Copyright 2012 Piotr Dollar.  [pdollar-at-caltech.edu]
 Please email me if you find bugs, or have suggestions or questions!
 Licensed under the Simplified BSD License [see external/bsd.txt]

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:
Generated by m2html © 2003