Main Content

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

vision.HistogramBasedTracker

ヒストグラムベースのオブジェクト追跡

説明

ヒストグラムベースのトラッカーには、オブジェクト追跡用の CAMShift (continuously adaptive mean shift) アルゴリズムが組み込まれています。ピクセル値のヒストグラムを使用して、追跡されるオブジェクトを識別します。

オブジェクトを追跡するには、次を行います。

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

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

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

作成

説明

hbtracker = vision.HistogramBasedTracker は、CAMShift アルゴリズムを使用してオブジェクトを追跡するトラッカーを返します。ピクセル値のヒストグラムを使用して、追跡されるオブジェクトを識別します。追跡プロセスを初期化するには、関数 initializeObject を使用して、オブジェクトの見本イメージを指定しなければなりません。

hbtracker = vision.HistogramBasedTracker(Name,Value) は、名前と値のペアを 1 つ以上使用してプロパティを設定します。各プロパティ名を引用符で囲みます。例: hbtracker = vision.HistogramBasedTracker('ObjectHistogram',[])

プロパティ

すべて展開する

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

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

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

正規化されたピクセル値のヒストグラム。N 要素ベクトルとして指定します。このベクトルは、オブジェクトのピクセル値の正規化されたヒストグラムを指定します。ヒストグラム値は、01 の値に正規化しなければなりません。initializeObject メソッドを使用してプロパティを設定できます。

調整可能: Yes

使用法

説明

bbox = hbtracker(I) は、追跡されるオブジェクトの境界ボックスを返します。トラッカーを使用する前に、追跡するオブジェクトを識別し、初期検索ウィンドウを設定しなければなりません。これを行うには、関数 initializeObject を使用します。

[bbox,orientation] = hbtracker(I) はさらに、x 軸と、オブジェクトと同じ 2 次モーメントをもつ楕円の長軸との角度を返します。返される角度は –pi/2 ~ pi/2 になります。

[bbox,orientation,score] = hbtracker(I) はさらに、追跡されるオブジェクトを含む、返される境界ボックスの信頼度スコアを返します。

入力引数

すべて展開する

ビデオ フレーム。グレースケール、または背景からオブジェクトを区別する任意の 2 次元特徴マップとして指定します。たとえば、I を HSV 色空間の色相チャネルにすることができます。

出力引数

すべて展開する

境界ボックス。[x y width height] の形式の 4 要素ベクトルとして返されます。

方向。–pi/2 ~ pi/2 の角度として返されます。この角度は、x 軸と、オブジェクトと同じ 2 次モーメントを持つ楕円の長軸から測定されます。

スコア。範囲 [0 1] のスカラーとして返されます。値 1 は、最高信頼度 1 に対応します。

オブジェクト関数

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

release(obj)

すべて展開する

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

すべて折りたたむ

入力ビデオの各フレームで顔を追跡して表示します。

ビデオの読み取りと表示およびオブジェクトの境界ボックスの描画を行う System object をそれぞれ作成します。

videoReader = VideoReader('vipcolorsegmentation.avi');
videoPlayer = vision.VideoPlayer();
shapeInserter = vision.ShapeInserter('BorderColor','Custom', ...
    'CustomBorderColor',[1 0 0]);

オブジェクトを含む最初のビデオ フレームを読み取ります。イメージを HSV 色空間に変換します。次に、オブジェクト領域を定義して表示します。

objectFrame = im2single(readFrame(videoReader));
objectHSV = rgb2hsv(objectFrame);
objectRegion = [40, 45, 25, 25];
objectImage = shapeInserter(objectFrame, objectRegion);

figure
imshow(objectImage)
title('Red box shows object region')

(オプションとして、マウスを使用してオブジェクト領域を選択できます。オブジェクトは領域の大部分を占めていなければなりません。次のコマンドを使用します。)

figure; imshow(objectFrame); objectRegion=round(getPosition(imrect))

最初のビデオ フレームの色相チャネルに基づいてオブジェクトを設定します。

tracker = vision.HistogramBasedTracker;
initializeObject(tracker, objectHSV(:,:,1) , objectRegion);

各ビデオ フレームでオブジェクトを追跡して表示します。while ループでは、各イメージ フレームを読み取り、イメージを HSV 色空間に変換してから、背景とは異なる色相チャネルでオブジェクトを追跡します。例では最後に、オブジェクトの周りにボックスを描画し、結果を表示します。

while hasFrame(videoReader)
  frame = im2single(readFrame(videoReader));
  hsv = rgb2hsv(frame);
  bbox = tracker(hsv(:,:,1));

  out = shapeInserter(frame,bbox);
  videoPlayer(out);
end

ビデオ プレーヤーを解放します。

release(videoPlayer);

参照

[1] Bradsky, G.R. "Computer Vision Face Tracking For Use in a Perceptual User Interface." Intel Technology Journal. January 1998.

拡張機能

バージョン履歴

R2012a で導入

参考

関数