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

vision.CascadeObjectDetector

Viola-Jones アルゴリズムを使用したオブジェクトの検出

説明

カスケード型オブジェクト検出器は、Viola-Jones アルゴリズムを使用して人の顔、鼻、目、口、上半身などを検出します。イメージ ラベラーを使用して、この System object で使用するカスタム分類器の学習を行うこともできます。この関数の動作の詳細については、オブジェクトのカスケード検出器の学習を参照してください。

イメージ内の顔の特徴または上半身を検出するには、次の手順を実行します。

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

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

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

作成

構文

detector = vision.CascadeObjectDetector
detector = vision.CascadeObjectDetector(model)
detector = vision.CascadeObjectDetector(XMLFILE)
detector = vision.CascadeObjectDetector(Name,Value)

説明

detector = vision.CascadeObjectDetector は、Viola-Jones アルゴリズムを使用してオブジェクトを検出する検出器を作成します。

detector = vision.CascadeObjectDetector(model) は、入力文字ベクトル model によって定義されたオブジェクトを検出するように構成された検出器を作成します。

detector = vision.CascadeObjectDetector(XMLFILE) は検出器を作成して、XMLFILE 入力が指定されたカスタム分類モデルを使用するように構成します。

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

プロパティ

すべて展開する

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

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

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

学習済みのカスケード分類モデル。文字ベクトルとして指定します。ClassificationModel プロパティは、検出するオブジェクトのタイプを制御します。既定の設定では、検出器は顔を検出するように構成されています。

この文字ベクトルは、カスタム分類モデルが含まれる XML ファイル、または以下の一覧に示すいずれかの有効なモデルの文字ベクトルに設定できます。関数 trainCascadeObjectDetector を使用して、カスタム分類モデルの学習を行うことができます。この関数は、Haar-like 特徴、勾配方向ヒストグラム (HOG) またはローカル バイナリ パターン (LBP) を使用してモデルを学習させることができます。この関数の使用法の詳細については、オブジェクトのカスケード検出器の学習を参照してください。

分類モデルモデルの学習に使用されるイメージ サイズモデルの説明
'FrontalFaceCART' (既定の設定)[20 20]直立で正面に向いた顔を検出します。このモデルは、分類木および回帰木解析 (CART) に基づく弱分類器で構成されます。これらの分類器は、Haar 特徴を使用して顔の特徴を符号化します。CART に基づく分類器を使用すると、顔の特徴の高次の依存関係をモデル化できます。[1]
'FrontalFaceLBP'[24 24]直立で正面に向いた顔を検出します。このモデルは、決定株に基づく弱分類器で構成されます。これらの分類器は、ローカル バイナリ パターン (LBP) を使用して顔の特徴を符号化します。LBP 特徴を使うと、明るさの変動に対するロバスト性が向上します。[2]
'UpperBody'[18 22]頭と肩の領域として定義される上半身領域を検出します。このモデルは、Haar 特徴を使用して、頭と肩の領域の詳細を符号化します。このモデルでは頭の周りの特徴がより多く使用されるため、頭の向きを変えたり傾けたりする姿勢の変化に対するロバスト性が向上します。[3]
'EyePairBig'
'EyePairSmall'
[11 45]
[5 22]
両目を検出します。'EyePairSmall' モデルの学習には、小さいイメージが使用されます。これにより、'EyePairBig' モデルで検出できるサイズより小さい目を検出できるようになります。[4]
'LeftEye'
'RightEye'
[12 18]左右の目を個別に検出します。これらのモデルは、決定株に基づく弱分類器で構成されます。これらの分類器は、Haar 特徴を使用して詳細を符号化します。[4]
'LeftEyeCART'
'RightEyeCART'
[20 20]左右の目を個別に検出します。これらのモデルを構成する弱分類器は、CART ツリーです。CART ツリーに基づく分類器は、決定株と比べて、高次の依存関係をより適切にモデル化できます。[5]
'ProfileFace'[20 20]直立の横顔を検出します。このモデルは、決定株に基づく弱分類器で構成されます。これらの分類器は、Haar 特徴を使用して顔の詳細を符号化します。
'Mouth'[15 25]口を検出します。このモデルは、決定株に基づく弱分類器で構成されます。これらの分類器は、Haar 特徴を使用して口の詳細を符号化します。[4]
'Nose'[15 18]このモデルは、決定株に基づく弱分類器で構成されます。これらの分類器は、Haar 特徴を使用して鼻の詳細を符号化します。[4]

最小の検出可能なオブジェクトのサイズ。2 要素ベクトル [height width] として指定します。オブジェクトが含まれる領域の最小サイズを指定するには、このプロパティをピクセル単位で設定します。値には、モデルの学習に使用されるイメージ サイズ以上のサイズを指定しなければなりません。イメージを処理する前にオブジェクトの最小サイズがわかっている場合には、このプロパティを使用して計算時間を短縮できます。このプロパティに値を指定しない場合、検出器によって分類モデルの学習に使用されるイメージのサイズに設定されます。

検出可能なオブジェクトのサイズの設定と ScaleFactor プロパティの設定間における関係の詳細については、アルゴリズムの節を参照してください。

調整可能: Yes

最大の検出可能なオブジェクトのサイズ。2 要素ベクトル [height width] として指定します。検出する最大オブジェクトのサイズをピクセル単位で指定します。イメージを処理する前にオブジェクトの最大サイズがわかっている場合には、このプロパティを使用して計算時間を短縮できます。このプロパティに値を指定しない場合、検出器によって size(I) に設定されます。

検出可能なオブジェクトのサイズの設定と ScaleFactor プロパティの設定間における関係の詳細については、アルゴリズムの節を参照してください。

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

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

検出器は、次の関係を使用して、MinSize から MaxSize の範囲の増分で探索領域をスケーリングします。

search region = round((Training Size)*(ScaleFactorN))

N は現在の増分 (0 より大きい整数) で、Training Size は分類モデルの学習に使用されるイメージ サイズです。

調整可能: Yes

検出しきい値。整数として指定します。しきい値は、オブジェクトの周囲で複数の検出が行われる領域で最終検出を宣言するのに必要な基準を定義します。しきい値を満たす同一場所の検出のグループがマージされ、ターゲット オブジェクトの周りに 1 つの境界ボックスが作成されます。このしきい値を大きくすると、マルチスケール検出段階でターゲット オブジェクトが複数回検出される必要があるため、誤検出を抑えることができます。このプロパティを 0 に設定すると、すべての検出がしきい値処理やマージ操作なしで返されます。このプロパティは調整可能です。

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

使用法

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

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

構文

bbox = detector(I)
bbox = detector(I,roi)

説明

bbox = detector(I) は、検出されたオブジェクトを含む M 個の境界ボックスを定義する M 行 4 列の行列 bbox を返します。検出器は、入力イメージ I に対してマルチスケール オブジェクト検出を実行します。

bbox = detector(I,roi) は、roi によって指定された四角形の探索領域内のオブジェクトを検出します。この構文を使用するには、'UseROI' プロパティを true に設定します。

入力引数

すべて展開する

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

分類モデル。文字ベクトルとして指定します。model 入力は、検出するオブジェクトのタイプを示します。有効な model 文字ベクトルには、'FrontalFaceCART'、'UpperBody'、'ProfileFace' などがあります。使用可能なモデルの一覧については、ClassificationModel プロパティの説明を参照してください。

カスタム分類モデル。XML ファイルとして指定します。XMLFILE は、関数 trainCascadeObjectDetector または OpenCV (Open Source Computer Vision) の学習機能を使用して作成できます。XMLFILE が MATLAB® パス上にない場合、このファイルへの絶対パスまたは相対パスを指定しなければなりません。

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

出力引数

すべて展開する

検出。M 行 4 列の要素の行列として返されます。出力行列の各行には、境界ボックスの左上隅とサイズをピクセル単位で指定する 4 要素ベクトル [x y width height] が含まれます。

オブジェクト関数

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

release(obj)

すべて展開する

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

すべて展開する

顔検出器オブジェクトを作成します。

faceDetector = vision.CascadeObjectDetector;

入力イメージを読み取ります。

I = imread('visionteam.jpg');

顔を検出します。

bboxes = faceDetector(I);

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

IFaces = insertObjectAnnotation(I,'rectangle',bboxes,'Face');   
figure
imshow(IFaces)
title('Detected faces');

体検出器オブジェクトを作成し、プロパティを設定します。

bodyDetector = vision.CascadeObjectDetector('UpperBody'); 
bodyDetector.MinSize = [60 60];
bodyDetector.MergeThreshold = 10;

入力イメージを読み取り、上半身を検出します。

I2 = imread('visionteam.jpg');
bboxBody = bodyDetector(I2);

検出された上半身に注釈を付けます。

IBody = insertObjectAnnotation(I2,'rectangle',bboxBody,'Upper Body');
figure
imshow(IBody)
title('Detected upper bodies');

アルゴリズム

すべて展開する

参照

[1] Lienhart R., Kuranov A., and V. Pisarevsky "Empirical Analysis of Detection Cascades of Boosted Classifiers for Rapid Object Detection." Proceedings of the 25th DAGM Symposium on Pattern Recognition. Magdeburg, Germany, 2003.

[2] Ojala Timo, Pietikäinen Matti, and Mäenpää Topi, "Multiresolution Gray-Scale and Rotation Invariant Texture Classification with Local Binary Patterns" . In IEEE Transactions on Pattern Analysis and Machine Intelligence, 2002. Volume 24, Issue 7, pp. 971-987.

[3] Kruppa H., Castrillon-Santana M., and B. Schiele. "Fast and Robust Face Finding via Local Context" . Proceedings of the Joint IEEE International Workshop on Visual Surveillance and Performance Evaluation of Tracking and Surveillance, 2003, pp. 157–164.

[4] Castrillón Marco, Déniz Oscar, Guerra Cayetano, and Hernández Mario, " ENCARA2: Real-time detection of multiple faces at different resolutions in video streams" . In Journal of Visual Communication and Image Representation, 2007 (18) 2: pp. 130-140.

[5] Yu Shiqi " Eye Detection." Shiqi Yu’s Homepage. http://yushiqi.cn/research/eyedetection.

[6] Viola, Paul and Michael J. Jones, " Rapid Object Detection using a Boosted Cascade of Simple Features" , Proceedings of the 2001 IEEE Computer Society Conference on Computer Vision and Pattern Recognition, 2001. Volume: 1, pp.511–518.

[7] Dalal, N., and B. Triggs, " Histograms of Oriented Gradients for Human Detection" . IEEE Computer Society Conference on Computer Vision and Pattern Recognition. Volume 1, (2005), pp. 886–893.

[8] Ojala, T., M. Pietikainen, and T. Maenpaa, " Multiresolution Gray-scale and Rotation Invariant Texture Classification With Local Binary Patterns" . IEEE Transactions on Pattern Analysis and Machine Intelligence. Volume 24, No. 7 July 2002, pp. 971–987.

拡張機能

R2012a で導入