www.pudn.com > Tikhonov_Regularization_for_super_resolution.rar > PyramidalLKOpticalFlow.m, change:2010-05-11,size:1790b

```% d=PyramidalLKOpticalFlow(img1, img2, roi)
%
% Computes the Lucas-Kanade optical flow using a gaussian pyramid.
% The function builds a pyramid for images 1 and 2 and computes the flow
% in each level, and using the flow an lower levels as initial estimates
% for the flow in higher levels. The flow is computed as the displacement
% from img2 to img1.
%
% Inputs:
% img1 - The source image.
% img2 - The destination image.
% roi  - A region in img1 in which the flow should be computed.
%
% Outpus:
% d - The computed displacement
function  d=PyramidalLKOpticalFlow(img1, img2, roi)

img1=double(img1);
img2=double(img2);

roiSize = 1+roi(3:4)-roi(1:2);

% Compute boundry for number of levels. We define two bounds. K<=6. In most
% cases more than 6 levels is not needed => the image becomes too small.
% Also, the roi at level k should not be too small. We define here that roi
% should not become less than 4x4 pixels.
%
% Since the size of the ROI at level k is Roiwidth/2^k we have
% Roiwidth/2^k >= 4 => 2^k<=Roiwidth/4 => k<log2(Roiwidth/4) =
% log2(Roiwidth)-2

levels = min([floor(log2(min(roiSize))-2), 6]);

% Compute Pyramids for image 1 and 2
pyramid1 = GuassianPyramid(img1, levels);
pyramid2 = GuassianPyramid(img2, levels);

d=[0 ; 0];

for l=levels:-1:1

% Transform displacement to current level
d=d*2;

% Compute current location of ROI
tl=ceil(roi(1:2)./2^(l-1));

% Compute current size of ROI
sz=floor(roiSize./2^(l-1));

% Make sure origin is at least 2
tl=max(tl, [2 2]);
br=min(tl+sz-1, size(pyramid1{l})-1);

% Compute displacement at current level
d=IterativeLKOpticalFlow(pyramid1{l}, pyramid2{l}, [tl br], d);

end

```