Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

estimateFlow

オプティカル フローの推定

説明

flow = estimateFlow(opticFlow,I) は、2 つの連続するビデオ フレーム間のオプティカル フローを推定します。

すべて折りたたむ

入力ビデオ ファイル visiontraffic.aviVideoReader オブジェクトを作成します。読み取るフレームのタイムスタンプを 11 と指定します。

vidReader = VideoReader('visiontraffic.avi','CurrentTime',11);

オプティカル フロー推定法を opticalFlowHS と指定します。出力はオブジェクトで、オプティカル フロー推定法とそのプロパティを指定します。

opticFlow = opticalFlowHS
opticFlow = 
  opticalFlowHS with properties:

            Smoothness: 1
          MaxIteration: 10
    VelocityDifference: 0

カスタム Figure ウィンドウを作成して、オプティカル フロー ベクトルを可視化します。

h = figure;
movegui(h);
hViewPanel = uipanel(h,'Position',[0 0 1 1],'Title','Plot of Optical Flow Vectors');
hPlot = axes(hViewPanel);

イメージ フレームを VideoReader オブジェクトから読み取って、グレースケール イメージに変換します。連続するイメージ フレームからオプティカル フローを推定します。現在のイメージ フレームを表示して、オプティカル フロー ベクトルを Quiver プロットとしてプロットします。

while hasFrame(vidReader)
    frameRGB = readFrame(vidReader);
    frameGray = im2gray(frameRGB);  
    flow = estimateFlow(opticFlow,frameGray);
    imshow(frameRGB)
    hold on
    plot(flow,'DecimationFactor',[5 5],'ScaleFactor',60,'Parent',hPlot);
    hold off
    pause(10^-3)
end

Figure contains an axes object and an object of type uipanel. The axes object contains 2 objects of type image, quiver.

Figure contains an axes object and an object of type uipanel. The axes object contains 2 objects of type image, quiver.

入力引数

すべて折りたたむ

オプティカル フローを推定するオブジェクト。次のいずれかとして指定します。

入力 opticFlow は、オプティカル フローの推定法と、オプティカル フロー速度行列の推定に使用されるプロパティを定義します。

現在のビデオ フレーム。サイズ m×n の 2 次元グレースケール イメージとして指定します。入力イメージは、VideoReader オブジェクトを使用して読み取られた現在のビデオ フレームから生成されます。オプティカル フローを推定するには、RGB 形式のビデオ フレームを 2 次元グレースケール イメージに変換しなければなりません。

出力引数

すべて折りたたむ

オプティカル フロー速度行列を格納するオブジェクト。opticalFlow オブジェクトとして返されます。

アルゴリズム

この関数は、入力オブジェクト opticFlow で指定された方法を使用して、入力ビデオのオプティカル フローを推定します。オプティカル フローは、2 つの連続するビデオ フレーム間の動きとして推定されます。指定の瞬間 tcurrent におけるビデオ フレーム T は現在のフレームと呼ばれ、ビデオ フレーム T-1 は前のフレームと呼ばれます。時刻 tcurrent = 0 における前のフレームの初期値は、グレースケール値 0 の一様なイメージとして設定されます。

メモ

opticFlowopticalFlowLKDoG オブジェクトとして指定すると、推定はビデオ フレーム数に比例して遅延します。遅延量は、opticalFlowLKDoG オブジェクトで定義された NumFrames の値によって異なります。tcurrent でビデオ フレームに対して推定されたオプティカル フローは、時刻 tflow=(tcurrent(NumFrames1)/2) のビデオ フレームに対応します。tcurrent は、現在のビデオ フレームの時刻です。

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

バージョン履歴

R2015a で導入

参考