最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

opticalFlowHS

Horn-Schunck 法を使用してオプティカル フローを推定するオブジェクト

説明

Horn-Schunck 法を使用して移動するオブジェクトの方向と速度を推定するオプティカル フロー オブジェクトを作成します。オブジェクト関数 estimateFlow を使用して、オプティカル フロー ベクトルを推定します。オブジェクト関数 reset を使用すると、オプティカル フロー オブジェクトの内部状態をリセットできます。

作成

説明

opticFlow = opticalFlowHS は、ビデオ内の移動するオブジェクトの方向と速度の推定に使用できるオプティカル フロー オブジェクトを返します。オプティカル フローは Horn-Schunck 法を使用して推定されます。

opticFlow = opticalFlowHS(Name,Value) は、1 つ以上の Name,Value のペアの引数として指定されたプロパティを使用してオプティカル フロー オブジェクトを返します。指定していないプロパティはすべて既定値になります。各プロパティ名を引用符で囲みます。

たとえば、opticalFlowHS('Smoothness',1.5) です。

プロパティ

すべて展開する

オプティカル フローの必要な平滑度。正のスカラーとして指定します。連続フレーム間に動きの増加がある場合はこの値を大きくします。'Smoothness' の標準値は約 1 です。

最大反復回数。正の整数値スカラーとして指定します。低速のオブジェクトのオプティカル フローを推定するには、この値を大きくします。

反復的な計算は、反復回数が 'MaxIteration' の値と等しくなるか、アルゴリズムが 'VelocityDifference' に設定された値に達すると停止します。'MaxIteration' のみを使用して計算を停止するには、'VelocityDifference' の値を 0 に設定します。

最小速度差の絶対値。正のスカラーとして指定します。この値は入力データ型によって異なります。低速のオブジェクトのオプティカル フローを推定するには、この値を小さくします。

反復的な計算は、アルゴリズムが 'VelocityDifference' に設定された値に達するか、反復回数が 'MaxIteration' と等しくなると停止します。'VelocityDifference' のみを使用して計算を停止するには、'MaxIteration'Inf に設定します。

オブジェクト関数

estimateFlowEstimate optical flow
resetReset the internal state of the optical flow estimation object

すべて折りたたむ

入力ビデオ ファイル 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 = rgb2gray(frameRGB);  
    flow = estimateFlow(opticFlow,frameGray);
    imshow(frameRGB)
    hold on
    plot(flow,'DecimationFactor',[5 5],'ScaleFactor',60,'Parent',hPlot);
    hold off
    pause(10^-3)
end

アルゴリズム

すべて展開する

2 つのイメージ間のオプティカル フローを計算するには、次のオプティカル フロー拘束方程式を解かなければなりません。

Ixu+Iyv+It=0

  • IxIy および It は、時空間イメージの明るさの導関数です。

  • u は水平方向のオプティカル フローです。

  • v は垂直方向のオプティカル フローです。

参照

[1] Barron, J. L., D. J. Fleet, S. S. Beauchemin, and T. A. Burkitt. “ Performance of optical flow techniques.” In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR),236-242. Champaign, IL: CVPR, 1992.

拡張機能

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

R2015a で導入