⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lucaskanade.m

📁 matlab实现的lucas-kanade光流迭代算法
💻 M
字号:
function [u, v] = LucasKanade(im1, im2, windowSize);%LucasKanade  lucas kanade algorithm, without pyramids (only 1 level);
%REVISION: NaN vals are replaced by zeros
[fx, fy, ft] = ComputeDerivatives(im1, im2);
u = zeros(size(im1));v = zeros(size(im2));halfWindow = floor(windowSize/2);for i = halfWindow+1:size(fx,1)-halfWindow   for j = halfWindow+1:size(fx,2)-halfWindow      curFx = fx(i-halfWindow:i+halfWindow, j-halfWindow:j+halfWindow);      curFy = fy(i-halfWindow:i+halfWindow, j-halfWindow:j+halfWindow);      curFt = ft(i-halfWindow:i+halfWindow, j-halfWindow:j+halfWindow);            curFx = curFx';      curFy = curFy';      curFt = curFt';      curFx = curFx(:);      curFy = curFy(:);      curFt = -curFt(:);            A = [curFx curFy];            U = pinv(A'*A)*A'*curFt;            u(i,j)=U(1);      v(i,j)=U(2);   end;end;u(isnan(u))=0;v(isnan(v))=0;%u=u(2:size(u,1), 2:size(u,2));%v=v(2:size(v,1), 2:size(v,2));      %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function [fx, fy, ft] = ComputeDerivatives(im1, im2);
%ComputeDerivatives	Compute horizontal, vertical and time derivative
%							between two gray-level images.

if (size(im1,1) ~= size(im2,1)) | (size(im1,2) ~= size(im2,2))
   error('input images are not the same size');
end;

if (size(im1,3)~=1) | (size(im2,3)~=1)
   error('method only works for gray-level images');
end;


fx = conv2(im1,0.25* [-1 1; -1 1]) + conv2(im2, 0.25*[-1 1; -1 1]);
fy = conv2(im1, 0.25*[-1 -1; 1 1]) + conv2(im2, 0.25*[-1 -1; 1 1]);
ft = conv2(im1, 0.25*ones(2)) + conv2(im2, -0.25*ones(2));
% make same size as input
fx=fx(1:size(fx,1)-1, 1:size(fx,2)-1);fy=fy(1:size(fy,1)-1, 1:size(fy,2)-1);ft=ft(1:size(ft,1)-1, 1:size(ft,2)-1);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -