2016-05-05 7 views
3

現在のフレームを使用して、Matlabがオプティカルフローによるビデオフレームの速度マトリックスを計算する方法を理解できません。速度は、時間あたり2フレーム以上の解析を含む時間に変化する異なるピクセル位置の関係ではないでしょうか?ビデオフレーム内のオブジェクトの速度を計算する - オプティカルフロー(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 
+0

私はそれが 'step'関数が何をするかによって決まると思います。しかし、コードを見るだけで、次のフレームを取得するように見えますか? 'rgbdata'を得るためにコードは' step'を使い、次の行で 'step'をもう一度使うので、その行は次のフレームをキャプチャして一緒にオプティカルフローを計算します。 –

答えて

1

vision.OpticalFlowクラスです。 vision.OpticalFlowオブジェクトを作成し、そのstepメソッドを呼び出すと、渡されたフレームが覚えています。その後、stepへの呼び出しごとに、最後の呼び出しからの格納されたフレームと現在のフレームの間のオプティカルフローが計算されます。

ところで、vision.OpticalFlowは推奨されていません。最近のバージョンのMATLABを使用している場合は、opticalFlowFarneback,opticalFlowHS,opticalFlowLK、およびopticalFlowLKDoGのようなオプティカルフロー関数ファミリがあります。

+0

ありがとう!私は間違いなく、実際のプロジェクトでどのように動作するかを確認するために、これらの2つの方法を試してみます。 –

関連する問題