如何在matlab中将图像速度转换为物体速度?

时间:2014-09-07 14:17:55

标签: image matlab

我正在为我的项目使用" LucasKanade" matlab中的代码。它给出了输出2矩阵(u和v)。这些(我相信如此)分别是x和y轴上的图像的速度。现在我如何将这些速度转换为物体速度(例如以米/秒为单位)? 提前致谢

" LucasKanade"代码:

  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);

0 个答案:

没有答案