使用由OpticalFlowLKDoG生成的运动贴图扭曲图像(Matlab 2015A)

时间:2015-06-23 12:37:10

标签: matlab image-processing matlab-cvst opticalflow

此问题基于版本2015a中光流系统对象的在线文档中的修改后的Matlab代码,如opticalFlowLK class中所示

clc; clearvars; close all;
inputVid = VideoReader('viptraffic.avi');
opticFlow = opticalFlowLKDoG('NumFrames',3);
inputVid.currentTime = 2;
k = 1;
while inputVid.currentTime<=2 + 1/inputVid.FrameRate
 frameRGB{k} = readFrame(inputVid);
 frameGray{k} = rgb2gray(frameRGB{k});    
 flow{k} = estimateFlow(opticFlow,frameGray{k});
 k = k+1;
end

通过查看流{2} .Vx和流{2}。我得到了描述从frameGray {1}到frameGray {2}的运动的运动图U和V.

我想直接使用flow {2} .Vx和flow {2}。直接对frameGray {1}中的数据进行处理,以便使frameGray {1}在视觉上与frameGray {2}类似。

我试过这段代码:

[x, y] = meshgrid(1:size(frameGray{1},2), 1:size(frameGray{1},1));
frameGray1Warped = interp2(double(frameGray{1}) , x-flow{2}.Vx , y-flow{2}.Vy);

但除了破坏图像质量之外,它似乎并没有做太多事情(但是物体不会在frameGray {2}中向其位置显示任何真实的动作。

我添加了3张图像,显示了2张原始帧,然后使用运动场扭曲第1帧,看起来与第2帧类似:

frame 1

frame 2

frame 1 warped to 2

可以很容易地看出,框架1翘曲到2基本上是框架1,质量下降,但汽车根本没有移动。也就是说 - 汽车的位置是相同的:查看靠近摄像机的汽车相对于靠近它的道路分隔线;它在第1帧和第1帧中几乎相同,但是在第2帧中有所不同。

0 个答案:

没有答案