使用光流的汽车跟踪。为啥向量不能正确绘制

Posted

技术标签:

【中文标题】使用光流的汽车跟踪。为啥向量不能正确绘制【英文标题】:Car Tracking using Optical Flow. Why isnt the vectors plotting properly使用光流的汽车跟踪。为什么向量不能正确绘制 【发布时间】:2014-07-01 22:44:21 【问题描述】:

总的来说,我是光流和计算机视觉的新手,我开始使用 Matlab 中的一个简单演示示例。

它的目的是使用视频并将运动矢量绘制到屏幕上。我正在使用以下代码:

%% initialization
close all
clear all

% Create reader

reader = vision.VideoFileReader;
reader.Filename = 'viptraffic.avi';

   % Create viewer
   viewer = vision.DeployableVideoPlayer;
   %%viewer.FrameRate = 10;

%Create Optical Flow
optical = vision.OpticalFlow; %how pixels are moving from one frame to the next
optical.OutputValue = 'Horizontal and vertical components in complex form'; %will allow         us to draw a vector
%%%on the vision so that we see how the pixels are moving from one frame to the next

%%We pass the horizontal and vertical components to the shape inserter
%%below

% Display vector fields
shapes = vision.ShapeInserter;
shapes.Shape = 'Lines';
shapes.BorderColor = 'white';

R = 1:4:120;%%downsample the optical flow field
C = 1:4:160;%%downsample the optical flow field

[Cv, Rv] = meshgrid (C, R); %%% display a grid on the image and take every fourth value


Rv = Rv(:)';
Cv = Cv(:)';

 %% Execution
 reset(reader)

 %Set up for stream
 while ~isDone(reader)

 I = step(reader);
 of = step(optical,rgb2gray(I));
 size(of)

 ofd = of(R,C);
 size(ofd)


 H = imag(ofd)*20;
 V = real(ofd)*20;


 %Draw lines on top of image
 lines = [Rv;Cv; Rv+H(:)'; Cv+V(:)']; %%start and a finish , start+movement,   end+movement
 % lines = [Cv;Rv;Cv;Rv];
 Ishp = step(shapes,I,lines);

 step(viewer,Ishp);

 end
 release(viewer);

我不知道为什么矢量线没有正确绘制。

谁能帮帮我?

谢谢

PS:结果如下:

【问题讨论】:

你得到了什么。你能告诉我们吗? 【参考方案1】:

尝试使用

lines = [Rv(:); Cv(:); Rv(:)+H(:); Cv(:)+V(:)];

而不是

lines = [Rv;Cv; Rv+H(:)'; Cv+V(:)'];

更好的是,如果您有最新版本的 Matlab,请尝试使用 insertShape 函数而不是 vision.ShapeInserter

编辑: 如果您有最新版本的计算机视觉系统工具箱,请尝试新的光流函数:opticalFlowHSopticalFlowLKopticalFlowLKDoGopticalFlowFarneback

【讨论】:

谢谢;但这似乎不能解决它。还有其他建议吗? 尝试绘制一个矢量。确保线条正确表示。

以上是关于使用光流的汽车跟踪。为啥向量不能正确绘制的主要内容,如果未能解决你的问题,请参考以下文章

运行光流跟踪时在每帧中的点之间绘制一条线

从 haar 检测结果中使用光流 PyrLK 跟踪多个对象

干货 | OpenCV中KLT光流跟踪原理详解与代码演示

图像稳定光流

目标跟踪之Lukas-Kanade光流法

使用光流的 OpenCV 跟踪