Вычислить скорость объекта в видеокадрах — Optical Flow (Matlab)

Я не могу понять, как Matlab вычисляет матрицу скорости видеокадра с помощью Optical Flow, используя только текущий кадр. Скорость не будет зависеть от положения разных пикселей. меняющиеся во времени, что будет включать в себя анализ двух и более кадров за раз?

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

person Jéssica Soares    schedule 05.05.2016    source источник
comment
Я думаю, это зависит от того, что делает функция step. Но просто взглянув на код, похоже, что он получает следующий кадр? потому что для получения rgbdata код использует step, а в следующей строке он снова использует step, поэтому я предполагаю, что эта строка захватывает следующий кадр и вместе вычисляет оптический поток   -  person Ander Biguri    schedule 05.05.2016


Ответы (1)


vision.OpticalFlow — это класс. Когда вы создаете объект vision.OpticalFlow и вызываете его метод step, он запоминает кадр, который вы ему передаете. Затем при каждом последующем вызове step он вычисляет оптический поток между сохраненным кадром из последнего вызова и текущим кадром.

Кстати, vision.OpticalFlow устарел. Если у вас установлена ​​последняя версия MATLAB, вы можете использовать семейство функций оптического потока: opticalFlowFarneback, opticalFlowHS, opticalFlowLK и opticalFlowLKDoG.

person Dima    schedule 05.05.2016
comment
Большое спасибо за Вашу помощь! Я обязательно попробую эти два метода, чтобы проверить, как они будут работать в моем реальном проекте. - person Jéssica Soares; 07.05.2016