繁体   English   中英

计算视频帧中对象的速度 - 光流(Matlab)

[英]Calculate object's velocity in video frames - Optical Flow (Matlab)

我无法理解Matlab如何使用当前帧通过光流计算视频帧的速度矩阵 速度不是不同像素位置在时间变化的关系,包括每帧两帧或更多帧的分析?

http://www.mathworks.com/help/imaq/examples/live-motion-detection-using-optical-flow.html?requestedDomain=www.mathworks.com

http://www.mathworks.com/help/vision/ref/vision.opticalflow-class.html

% Set up for stream
nFrames = 0;
while (nFrames<100)     % Process for the first 100 frames.
    % Acquire single frame from imaging device.
    rgbData = step(vidDevice);

    % Compute the optical flow for that particular frame.
    optFlow = step(optical,rgb2gray(rgbData)); %***HERE IS THE DOUBT! iT JUST USES ONE FRAME!!!***

    % Downsample optical flow field.
    optFlow_DS = optFlow(r, c);
    H = imag(optFlow_DS)*50;
    V = real(optFlow_DS)*50;

    % Draw lines on top of image
    lines = [Y(:)'; X(:)'; Y(:)'+V(:)'; X(:)'+H(:)'];
    rgb_Out = step(shapes, rgbData,  lines');

    % Send image data to video player
    % Display original video.
    step(hVideoIn, rgbData);
    % Display video along with motion vectors.
    step(hVideoOut, rgb_Out);

    % Increment frame count
    nFrames = nFrames + 1;
end

vision.OpticalFlow是一个类。 当您创建vision.OpticalFlow对象并调用其step方法时,它会记住您传递给它的帧。 然后在每次后续调用step ,它计算最后一次调用的存储帧与当前帧之间的光流。

顺便说一句, vision.OpticalFlow已被弃用。 如果你有最新版本的MATLAB,你可以使用一系列光流功能: opticalFlowFarnebackopticalFlowHSopticalFlowLKopticalFlowLKDoG

暂无
暂无

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

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