Stabilize image sequence using coarse optical flow estimation. Perform weak image sequence stabilization as described in: D. Park, C. Zitnick, D. Ramanan and P. Dollár "Exploring Weak Stabilization for Motion Feature Extraction", CVPR 2013. The approach stabilizes coarse motion due to camera movement but leaves independent object motions intact. This code performs weak sequence stabilization only (no feature extraction), see section 3.1 of the paper. Please cite the above paper if you end up using the stabilization code. Optical flow is computed between all pairs of frames using opticalFlow.m with params 'pFlow'. Flow across multiple frames is accumulated and flow at integer locations at each stage is obtained either using either nearest neighbor (if type==1) or bilinear interpolation (if type==2) which is slightly more accurate but slower. Finally, all images in I are warped to the last frame of the sequence using the accumulated flows. If type==-1, a homography computed via imagesAlign.m with params pFlow is used instead. If videos have black boundaries use bndThr to ignore dark boundaries for flow estimation (with average pixel values under bndThr). USAGE [J,Vxs,Vys] = imagesAlignSeq( I, pFlow, [type], [bndThr] ) INPUTS I - HxWxN or HxWx3xN input image sequence pFlow - parameters to use for optical flow computation type - [1] interpolation type 1:nearest, 2:bilinear bndThr - [0] fill in black areas around image boundaries OUTPUTS J - HxWxN or HxWx3xN stabilized image sequence Vxs - HxWxN-1 x-components of flow fields Vys - HxWxN-1 y-components of flow fields EXAMPLE I = seqIo(which('peds30.seq'),'toImgs'); I=I(:,:,:,1:15); pFlow={'smooth',1,'radius',25,'type','LK','maxScale',1}; tic, J = imagesAlignSeq( I, pFlow, 1, 20 ); toc playMovie([I J],15,-10,struct('hasChn',1)) EXAMPLE % Requires Caltech Pedestrian Dataset to be installed [pth,ss,vs]=dbInfo; s=randi(length(ss)); v=randi(length(vs{s})); nm=sprintf('%s/videos/set%02i/V%03i.seq',pth,ss(s),vs{s}(v)); f=seqIo(nm,'getinfo'); f=f.numFrames; f=randi(f-30); I=seqIo(nm,'toImgs',[],1,f,f+9); pFlow={'smooth',1,'radius',25,'type','LK','maxScale',1}; tic, J = imagesAlignSeq( I, pFlow, 1, 20 ); toc playMovie([I J],15,-10,struct('hasChn',1)) See also opticalFlow, imtransform2, imagesAlign Piotr's Computer Vision Matlab Toolbox Version 3.24 Copyright 2014 Piotr Dollar. [pdollar-at-gmail.com] Licensed under the Simplified BSD License [see external/bsd.txt]