📄 move.m
字号:
function F=move(y2,y1)
[m,n]=size(y1);
%求出图中每个点对x,y,t的导数,所有边界的点导数取0
for n1=2:m-1
for n2=2:n-1
pdx1(n1-1,n2-1)=(1/4)*(y1(n1,n2+1)-y1(n1,n2)+y1(n1+1,n2+1)-y1(n1+1,n2)+y2(n1,n2+1)-y2(n1,n2)+y2(n1+1,n2+1)-y2(n1+1,n2));
pdy1(n1-1,n2-1)=(1/4)*(y1(n1+1,n2)-y1(n1,n2)+y1(n1+1,n2+1)-y1(n1,n2+1)+y2(n1+1,n2)-y2(n1,n2)+y2(n1+1,n2+1)-y2(n1,n2+1));
pdt1(n1-1,n2-1)=(1/4)*(y2(n1,n2)-y1(n1,n2)+y2(n1,n2+1)-y1(n1,n2+1)+y2(n1+1,n2)-y1(n1+1,n2)+y2(n1+1,n2+1)-y1(n1+1,n2+1));
end
end
pdx=zeros(m,n);
pdy=zeros(m,n);
pdt=zeros(m,n);
pdx(2:m-1,2:n-1)=pdx1;
pdy(2:m-1,2:n-1)=pdy1;
pdt(2:m-1,2:n-1)=pdt1;
% 将导数都写成向量的形式
for i=1:m
for j=1:n
pdx2(n*(i-1)+j)=pdx(i,j);
pdy2(n*(i-1)+j)=pdy(i,j);
pdt2(n*(i-1)+j)=pdt(i,j);
end
end
%估计出每个点的运动矢量,即速度vxx,vyy,一共有m*n个点
vx(1)=0;
vy(1)=0;
a=100;
mm=5;
k=1;
for k=1:m*n
for s=1:mm
vx(s+1)=vx(s)-(pdx2(k)*(pdx2(k)*vx(s)+pdy2(k)*vy(s)+pdt2(k))/(a^2+pdx2(k)^2+pdy2(k)^2));
vy(s+1)=vy(s)-(pdy2(k)*(pdx2(k)*vx(s)+pdy2(k)*vy(s)+pdt2(k))/(a^2+pdx2(k)^2+pdy2(k)^2));
end
vxx(k)=vx(mm+1);
vyy(k)=vy(mm+1);
vxx(k)=round(vxx(k));
vyy(k)=round(vyy(k));
vx(1)=0;
vy(1)=0;
end
%将运动矢量写成矩阵的形式vxxx,vyyy
%figure;
for iii=1:m
for jjj=1:n
vxxx(iii,jjj)=vxx((iii-1)*n+jjj);
vyyy(iii,jjj)=vyy((iii-1)*n+jjj);
%drawx=[jjj,jjj+vxxx(iii,jjj)];
%drawy=[iii,iii+vyyy(iii,jjj)];
%line(drawx,drawy);
end
end
%test
for u=1:m
for v=1:n
y1y( u+vyyy(u,v),v+vxxx(u,v))=y1(u,v);
end
end
figure,imshow(y1y,[])
t=y2-y1y;
%for uu=1:m
% for vv=1:n
% if (t(uu,vv))<=50
% t(uu,vv) =0;
% end
% end
%end
%估计出F矩阵
%for ii=1:m*n
%FF(ii)=ii-n*vyy(ii)-vxx(ii);
%FF(ii)=ii+n*vyy(ii)+vxx(ii);
%if FF(ii)<=0
% FF(ii)=1;
% elseif FF(ii)>=m*n
% FF(ii)=m*n;
% end
%end
%FF=uint(FF);
%F=sparse(1:m*n,FF,ones(1,m*n),m*n,m*n,m*n);
%test
%uu=showshow(y1,F);
%figure,imshow(uu,[]);
%aa=uu-y2;
%b=3;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -