繁体   English   中英

如何在图像上应用逆光流矢量?

[英]how to apply inverse optical flow vector on an image?

我有一个关于运动相机中运动物体检测的小项目,在该项目中,我必须使用负光流矢量来最大程度地减少自我运动补偿。 我有一个视频和一些特定的连续帧,其中必须计算负光流矢量的平均值。 我已经计算了第(k-1)和第k帧之间的光流。 另外,我已经计算出光流矢量的平均值V = [u,v],其中v是水平光流的平均值,而u是垂直光流的平均值。 现在,我必须对第(k-1)帧应用反光流矢量,即-V。 我是Matlab的新手,对此我不太了解。 请帮忙

我已经尝试过此代码段来执行此操作,但结果与预期不符

function I1=reverseOF(I,V) R=I(:,:,1); G=I(:,:,2); B=I(:,:,3); [m,n]=size(rgb2gray(I)); for i=1:m for j=1:n v1=[j i]; v2=-V; v3=v1.*v2; R(floor(1+abs(v3(1,2))),floor(1+abs(v3(1,2))))=R(i,j); G(floor(1+abs(v3(1,2))),floor(1+abs(v3(1,2))))=G(i,j); B(floor(1+abs(v3(1,2))),floor(1+abs(v3(1,2))))=B(i,j); I1(floor(1+abs(v3(1,2))),floor(1+abs(v3(1,2))))=I(i,j); end end I1=cat(3,R,G,B); enter code here

我使用了abs()函数,因为否则会发生一些错误,例如“试图访问负位置;索引必须为正或逻辑”。

图像A和图像B是我用来估计光流的图像。 在此处输入图片说明

这是我应用上述功能后获得的结果。 在此处输入图片说明

不幸的是,您不能轻易做到这一点。 这是一个相当高级的研究问题,因为在网格网格上获得矢量场的逆并不是一个容易的问题,实际上是相当困难的。

请注意,矢量场(光流)以网格网格开始,但不以网格网格结束,而是以随机子像素位置结束。 如果仅反转此字段,那么执行-V是不够的! 结果不会是相反的!

这是一个开放的研究问题,例如,可以在2010年的一篇论文中确切地解决此问题,并提出一种创建“伪逆”的方法。

假设您有逆,因为您以某种方式对其进行了计算。 您的代码对此非常不利,解决方案(绝对!)表明(没有冒犯)您并没有真正了解自己在做什么。 对于已知的矢量场{Vx,Vy} ,大小等于图像大小(如果不是,则可以很容易地找出如何在unsig interp2进行插值),代码如下所示:

newimg=zeros(size(I));

[ix,iy]=meshgrid(1:size(I,1),1:size(I,2));

newimg(:,:,1)=interp2(I(:,:,1),ix+Vx,iy+Vy); % this is your whole loop.
newimg(:,:,2)=interp2(I(:,:,3),ix+Vx,iy+Vy); % this is your whole loop.
newimg(:,:,3)=interp2(I(:,:,2),ix+Vx,iy+Vy); % this is your whole loop.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM