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

vision.BlockMatcher

イメージ間またはビデオ フレーム間の動きの推定

説明

イメージ間またはビデオ フレーム間の動きを推定します。

  1. vision.BlockMatcher オブジェクトを作成し、そのプロパティを設定します。

  2. 関数と同様に、引数を指定してオブジェクトを呼び出します。

System object の機能の詳細については、System object とは (MATLAB)を参照してください。

作成

説明

blkMatcher = vision.BlockMatcher は、2 つのイメージ間または 2 つのビデオ フレーム間の動きを推定するオブジェクト blkMatcher を返します。このオブジェクトは、探索領域上でピクセルのブロックを動かし、ブロック マッチング法を使用してこの推定を実行します。

blkMatcher = vision.BlockMatcher(Name,Value) は、1 つ以上の名前と値のペアを使用してプロパティを設定します。各プロパティ名を引用符で囲みます。たとえば、blkMatcher = vision.BlockMatcher('ReferenceFrameSource','Input port') です。

プロパティ

すべて展開する

特に指定がない限り、プロパティは "調整不可能" です。つまり、オブジェクトの呼び出し後に値を変更することはできません。オブジェクトは呼び出すとロックされ、ロックを解除するには関数 release を使用します。

プロパティが "調整可能" の場合、その値をいつでも変更できます。

プロパティ値の変更の詳細については、System object を使用した MATLAB でのシステム設計 (MATLAB)を参照してください。

基準フレームのソース。'Input port' または 'Property' として指定します。ReferenceFrameSource プロパティを 'Input port' に設定した場合、基準フレームの入力はブロック マッチング オブジェクトの step メソッドに指定しなければなりません。

基準フレームと現在のフレームの間のフレーム数。0 以上のスカラー整数として指定します。このプロパティは、ReferenceFrameSource プロパティを 'Property' に設定した場合に適用されます。

最適一致検索法。'Exhaustive' または 'Three-step' として指定します。フレーム k 内のピクセルのブロックに最もよく一致するフレーム k+1 内のピクセルのブロックを特定する方法を指定します。このプロパティを 'Exhaustive' に設定した場合、ブロック マッチング オブジェクトはフレーム k+1 内のピクセルのブロックの位置を選択します。これは探索領域上でブロックを 1 ピクセルずつ動かすことで行われるため、計算量が増大します。

このプロパティを 'Three-step' に設定した場合、ブロック マッチング オブジェクトは徐々に減少するステップ サイズを使用して、フレーム k 内のピクセルのブロックに最もよく一致するフレーム k+1 内のピクセルのブロックを検索します。まず、最大探索範囲の半分とほぼ等しいステップ サイズから始めます。各ステップで、探索領域の中心点と領域の境界にある 8 つの探索点を比較し、中心点の値に最も近い値をもつ探索点に中心点を移動します。次に、ステップ サイズを半分に減らしてプロセスを再開します。このオプションでは計算量が少なくなりますが、最適な解を求められない場合があります。

入力イメージのサブ分割のオーバーラップ。2 要素のベクトルとしてピクセル単位で指定します。

最大変位検索。2 要素ベクトルとして指定します。ピクセルのブロック内の中心ピクセルがイメージ間またはフレーム間で移動できる最大ピクセル数を指定します。ブロック マッチング オブジェクトは、このプロパティを使用して探索領域のサイズを特定します。

ブロック間の一致条件。'Mean square error (MSE)' または 'Mean absolute difference (MAD') として指定します。

動きの出力形式。'Magnitude-squared' または 'Horizontal and vertical components in complex form' として指定します。

入力イメージのサブ分割のオーバーラップ。2 要素のベクトルとしてピクセル単位で指定します。

固定小数点プロパティ

固定小数点演算の丸め手法。'Floor''Ceiling''Convergent''Nearest''Round''Simplest'、または 'Zero' として指定します。

整数入力が範囲外の場合に実行するアクション。'Wrap' または 'Saturate' として指定します。

積のデータ型。'Same as input' または 'Custom' として指定します。

乗算の語長と小数部の長さ。スケーリングされた numerictype オブジェクトとして指定します。このプロパティは、AccumulatorDataType プロパティを 'Custom' に設定した場合にのみ適用されます。

アキュムレータのデータ型。'Same as product''Same as input'、または 'Custom' として指定します。

アキュムレータの語長と小数部の長さ。スケーリングされた numerictype オブジェクトとして指定します。このプロパティは、AccumulatorDataType プロパティを 'Custom' に設定した場合にのみ適用されます。

使用法

R2016b より前のバージョンでは、関数 step を使用して System object™ アルゴリズムを実行します。step に対する引数は作成したオブジェクトであり、この節で示す引数が次に続きます。

たとえば、y = step(obj,x)y = obj(x) は同等の演算を実行します。

説明

V = blkMatcher(I) は、あるビデオ フレームから別のビデオ フレームへの入力イメージ I の動きを計算し、速度の振幅の行列として V を返します。

C = blkMatcher(I) は、OutputValue プロパティが Horizontal and vertical components in complex form に設定されている場合に、あるビデオ フレームから別のビデオ フレームへの入力イメージ I の動きを計算し、水平成分と垂直成分の複素行列として C を返します。

Y = blkMatcher(I,iref) は、ReferenceFrameSource プロパティが Input port に設定されている場合に、入力イメージ I と参照イメージ iref の間の動きを計算します。

入力引数

すべて展開する

入力データ。強度値のスカラー、ベクトル、または行列として指定します。

入力参照データ。強度値のスカラー、ベクトル、または行列として指定します。

出力引数

すべて展開する

速度の振幅。行列として返されます。

水平成分と垂直成分。複素行列として返されます。

イメージと参照イメージの間の動き。行列として返されます。

オブジェクト関数

オブジェクト関数を使用するには、System object を最初の入力引数として指定します。たとえば、obj という名前の System object のシステム リソースを解放するには、次の構文を使用します。

release(obj)

すべて展開する

stepSystem object のアルゴリズムの実行
releaseリソースを解放し、System object のプロパティ値と入力特性の変更を可能にします。
resetSystem object の内部状態のリセット

すべて展開する

RGB イメージを読み取ってグレースケールに変換します。

img1 = im2double(rgb2gray(imread('onion.png')));

ブロック マッチング オブジェクトとアルファ ブレンダー オブジェクトを作成します。

hbm = vision.BlockMatcher('ReferenceFrameSource',...
        'Input port','BlockSize',[35 35]);
hbm.OutputValue = 'Horizontal and vertical components in complex form';
halphablend = vision.AlphaBlender;

最初のイメージを [5 5] ピクセルだけオフセットして 2 番目のイメージを作成します。

img2 = imtranslate(img1,[5,5]);

2 つのイメージの動きを計算します。

motion = hbm(img1,img2);

2 つのイメージをブレンドします。

img12 = halphablend(img2,img1);

Quiver プロットを使用してイメージの動きの方向を示します。

[X,Y] = meshgrid(1:35:size(img1,2),1:35:size(img1,1));         
imshow(img12)
hold on
quiver(X(:),Y(:),real(motion(:)),imag(motion(:)),0)
hold off

R2012a で導入