Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

vision.PeopleDetector

HOG 特徴を使用した直立の人物の検出

説明

人物検出器オブジェクトは、勾配方向ヒストグラム (HOG) 特徴と学習済みサポート ベクター マシン (SVM) 分類器を使用して、入力イメージ内の人物を検出します。このオブジェクトは、隠れていない、直立姿勢の人物を検出します。

イメージ内の人物を検出するには、次の手順を実行します。

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

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

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

作成

説明

peopleDetector = vision.PeopleDetector は、ビデオ内の一連の点を追跡する人物検出器オブジェクト peopleDetector を返します。

peopleDetector = vision.PeopleDetector(model) は人物検出器オブジェクトを作成し、ClassificationModel プロパティを model に設定します。

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

プロパティ

すべて展開する

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

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

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

分類モデルの名前。'UprightPeople_128x64' または 'UprightPeople_96x48' として指定します。ピクセル寸法は、学習に使用されるイメージ サイズを示します。

モデルの学習に使用されるイメージには、人物の周りの背景のピクセルが含まれます。そのため、検出された人物の実際のサイズは、学習イメージのサイズより小さくなります。

人物分類しきい値。非負のスカラー値として指定します。このしきい値を使用して、マルチスケール検出中に個々のイメージのサブ領域の分類を制御します。このしきい値は、サブ領域が人物として分類されるかどうかを制御します。誤検出が多い場合には、この値を大きくすることができます。しきい値を大きくすると、分類の要件がより厳密になります。値の範囲に対するしきい値を変化させて、データ セットに最適な値を求めます。一般的な値の範囲は、04 です。

調整可能: Yes

人物が含まれる最小領域。2 要素ベクトル [height width] としてピクセル単位で指定します。人物が含まれる領域の最小サイズを指定するには、このプロパティを設定します。このプロパティを設定すると、計算時間を削減できます。これを行うには、このプロパティを分類モデルの学習に使用されるイメージ サイズより大きい値に設定します。このプロパティを指定しない場合、検出器によって分類モデルの学習に使用されるイメージのサイズに設定されます。

調整可能: Yes

人物が含まれる最大領域。2 要素ベクトル [height width] としてピクセル単位で指定します。人物が含まれる最大領域を指定するには、このプロパティを設定します。このプロパティを設定すると、計算時間を削減できます。これを行うには、このプロパティを入力イメージのサイズより小さい値に設定します。このプロパティを指定しない場合、検出器によって入力イメージのサイズに設定されます。このプロパティは調整可能です。

マルチスケール オブジェクト検出のスケーリング。1.0001 より大きい値として指定します。スケール係数によって、MinSize から MaxSize の範囲で検出解像度がインクリメンタルにスケーリングされます。スケール係数は、次の方法で理想的な値に設定できます。

size(I)/(size(I)-0.5)

オブジェクトは、増分ごとの検出解像度を計算します。

round(TrainingSize*(ScaleFactorN))

この場合、TrainingSize は、'UprightPeople_128x64' モデルでは [128 64]'UprightPeople_96x48' モデルでは [96 48] になります。N は増分です。スケール係数を小さくすると、検出の精度を上げることができます。ただし、その際には計算時間が長くなります。このプロパティは調整可能です。

検出ウィンドウのストライド (ピクセル単位)。スカラーまたは 2 要素ベクトル [x y] として指定します。検出器は、ウィンドウのストライドを使用して、検出ウィンドウをイメージ全体にスライドさせます。この値をベクトルとして指定すると、1 番目と 2 番目の要素は x および y 方向のストライド サイズになります。この値をスカラーとして指定すると、ストライドは x と y の両方で同じになります。ウィンドウのストライドを小さくすると、検出の精度を向上できます。ただし、その際には計算時間が長くなります。ウィンドウのストライドが [8 8] を超えると、検出漏れが多くなる場合があります。このプロパティは調整可能です。

検出のマージの制御。true または false として指定します。このプロパティは、類似した検出がマージされるかどうかを制御します。このプロパティを true に設定すると、平均変化に基づくアルゴリズムを使用して境界ボックスがマージされます。このプロパティを false に設定すると、マージされていない境界ボックスが出力されます。

MergeDetections アルゴリズムの代わりに関数 selectStrongestBbox を使用すると、マージ パラメーターの柔軟性と制御性を高めることができます。これを行うには、MergeDetections プロパティを false に設定します。人物検出器と関数 selectStrongestBbox の使用方法については、走行中の自動車からの歩行者の追跡の例を参照してください。

関心領域の使用。true または false として指定します。入力イメージ内の四角形の関心領域にあるオブジェクトを検出するには、このプロパティを true に設定します。

使用法

説明

bboxes = peopleDetector(I) は、入力イメージ I でマルチスケール オブジェクト検出を実行して、M 境界ボックスを定義する M 行 4 列の行列を返します。M は検出された人物の数を表します。出力行列 BBOXES の各行には、4 要素ベクトル [x y width height] が含まれます。このベクトルは、境界ボックスの左上隅とサイズをピクセル単位で指定します。人物が検出されない場合、step メソッドは空のベクトルを返します。入力イメージ I は、グレースケール イメージまたはトゥルーカラー (RGB) イメージでなければなりません。

[bboxes, scores] = peopleDetector(I) は、検出の信頼度の値も返します。

[___] = peopleDetector(I,roi) は、四角形の探索領域 roi 内の人物を検出します。

入力引数

すべて展開する

入力イメージ。グレースケールまたはトゥルーカラー (RGB) として指定します。

イメージ I 内の四角形の関心領域。4 要素ベクトル [x y width height] として指定します。

分類モデル。'UprightPeople_128x64' または 'UprightPeople_96x48' として指定します。

出力引数

すべて展開する

人物検出器オブジェクト。オブジェクトとして返されます。検出器は、勾配方向ヒストグラム (HOG) 特徴と学習済み SVM 分類器を使用して、入力イメージ内の人物を検出します。このオブジェクトは、隠れていない、直立姿勢の人物を検出します。

オブジェクト関数

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

release(obj)

すべて展開する

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

すべて折りたたむ

人物検出器を作成して、入力イメージを読み込みます。

peopleDetector = vision.PeopleDetector;
I = imread('visionteam1.jpg');

人物検出器オブジェクトを使用して人物を検出します。

[bboxes,scores] = peopleDetector(I);

検出された人物に注釈を付けます。

I = insertObjectAnnotation(I,'rectangle',bboxes,scores);
figure, imshow(I)
title('Detected people and detection scores');

参照

[1] Dalal, N. and B. Triggs. “Histograms of Oriented Gradients for Human Detection,”Proceedings of IEEE Conference on Computer Vision and Pattern Recognition, June 2005, pp. 886-893.

拡張機能

R2012b で導入