Main Content

オプティカル フローの速度の計算

この例では、ビデオやイメージ シーケンス内で移動するオブジェクトのオプティカル フローの速度を計算する方法を示します。

イメージ シーケンスから 2 つのイメージ フレームを MATLAB ワークスペースに読み取ります。

I1 = imread('car_frame1.png');
I2 = imread('car_frame2.png');

Simulink® モデルを開きます。

modelname = 'ex_blkopticalflow.slx';
open_system(modelname)

モデルは、Image From Workspaceブロックを使用してイメージを読み取ります。オプティカル フローの速度を計算するには、まずColor Space Conversionブロックを使用して入力カラー イメージを強度イメージに変換しなければなりません。次に、以下のパラメーター値に設定した Optical Flow ブロックを使用して速度を求めます。

  • メソッド - Horn-Schunck

  • 次の範囲のオプティカル フローを計算 - Two images

  • 平滑度係数 - 1

  • 反復法の停止 - When maximum number of iterations is reached

  • 最大反復回数 - 10

  • 速度出力 - Horizontal and vertical components in complex form

Compositingブロックを使用して両方のイメージ フレームを重ね合わせ、重ね合わせたイメージを使用して結果をプロットします。

モデルを実行します。

out = sim(modelname);

出力速度と重ね合わせたイメージを読み取ります。

Vx = real(out.simout);
Vy = imag(out.simout);
img = out.simout1;

関数opticalFlowを使用してオプティカル フロー オブジェクトを作成します。

flow = opticalFlow(Vx,Vy);

重ね合わせたイメージを表示し、関数plotを使用して速度ベクトルをプロットします。

figure
imshow(img)
hold on
plot(flow,'DecimationFactor',[5 5],'ScaleFactor',40)