早教吧作业答案频道 -->其他-->
MATLAB求助就是这样的在调用函数L=LK(A,B,windowsize)后为什么L值为u的矩阵而不是既有u又有vfunction[u,v]=LK(im1,im2,windowSize);%LucasKanadelucaskanadealgorithm,withoutpyramids(only1level);%REVISION:NaNvalsa
题目详情
MATLAB求助 就是这样的 在调用函数L=LK(A,B,windowsize)后 为什么L值为u的矩阵而不是既有u又有v
function [u,v] = LK(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);
%k=0;
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);
% k=k+1;
%UU(:,k)=U(1);
%VV(:,k)=U(2);
end;
end;
size(u)
size(v)
UU1=reshape(u,1,196);
A1=sum(UU1)
VV1=reshape(v,1,196);
B1=sum(VV1)
u(isnan(u))=0;
v(isnan(v))=0;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [fx,fy,ft] = ComputeDerivatives(im1,im2);
fx = conv2(double(im1),double(0.25* [-1 1; -1 1])) + conv2(double(im2),double(0.25*[-1 1; -1 1]));
fy = conv2(double(im1),double(0.25*[-1 -1; 1 1])) + conv2(double(im2),double(0.25*[-1 -1; 1 1]));
ft = conv2(double(im1),double(0.25*ones(2))) + conv2(double(im2),double(-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);
function [u,v] = LK(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);
%k=0;
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);
% k=k+1;
%UU(:,k)=U(1);
%VV(:,k)=U(2);
end;
end;
size(u)
size(v)
UU1=reshape(u,1,196);
A1=sum(UU1)
VV1=reshape(v,1,196);
B1=sum(VV1)
u(isnan(u))=0;
v(isnan(v))=0;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [fx,fy,ft] = ComputeDerivatives(im1,im2);
fx = conv2(double(im1),double(0.25* [-1 1; -1 1])) + conv2(double(im2),double(0.25*[-1 1; -1 1]));
fy = conv2(double(im1),double(0.25*[-1 -1; 1 1])) + conv2(double(im2),double(0.25*[-1 -1; 1 1]));
ft = conv2(double(im1),double(0.25*ones(2))) + conv2(double(im2),double(-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);
▼优质解答
答案和解析
function [u,v] = LK(im1,im2,windowSize);会返回2个矩阵,u和v.
运行L=LK(A,B,windowsize)后,函数只返回第一个参数u给L
你改写成[u,v] = LK(im1,im2,windowSize);就没问题了
运行L=LK(A,B,windowsize)后,函数只返回第一个参数u给L
你改写成[u,v] = LK(im1,im2,windowSize);就没问题了
看了MATLAB求助就是这样的在调...的网友还看了以下:
请问英语里“—”和“/”在发音上怎么念的?比如音频audio和video的简写“A/V”里的“/” 2020-04-07 …
信息安全数学基础证明题:证明:a,0=|a|(但是我的理解是这样的:因为a,b=ab/(a,b), 2020-05-22 …
这种说法有道理么,全集U=A∪B则CuB=A上面是别人说的,我觉得这样不对比如U={1,2,3,4 2020-07-30 …
设非空集合A{1,2,3,4,5,6,7},且当a∈A时必有8-a∈A,这样的A共有(15)个.{ 2020-08-01 …
下列句子中,没有错别字的一组是A.同样的故事,同样的戏台,同样的演员,同样的观众,人类的猾稽戏在不惮 2020-11-03 …
下列句子中,没有错别字的一组是()A.同样的故事,同样的戏台,同样的演员,同样的观众,人类的猾稽戏在 2020-11-24 …
英语比较级,问.肯定.陈述.否定···句式,拜托各位了3Q小学阶段的就好,句式要完整,不要只是“be 2020-11-26 …
关于加速度表达式a=△v△t的下列说法,正确的是()A.△v△t表示速度的变化率,是标量B.加速度a 2020-11-29 …
设非空集合A{1,2,3,4,5,6,7},且当a∈A时必有8-a∈A,这样的A共有(15)个.{4 2020-12-07 …
在正六边形A周围画6个同样的正六边形,再在第一圈外面画十二个和正六边形A完全一样的正六边形,围成第二 2020-12-10 …