Main Content

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

vision.CascadeObjectDetector

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

説明

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

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

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

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

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

作成

説明

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 でのシステム設計を参照してください。

学習済みのカスケード分類モデル。文字ベクトルとして指定します。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 または true として指定します。入力イメージ内の四角形の関心領域にあるオブジェクトを検出するには、このプロパティを true に設定します。

使用法

説明

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

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

detectionResults = detector(ds) は、入力データストアの関数 read によって返されるすべてのイメージ内のオブジェクトを検出します。

入力引数

すべて展開する

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

データストア。イメージ コレクションを含む datastore オブジェクトとして指定します。各イメージはグレースケールか RGB でなければなりません。関数は、データストアの最初の列のみを処理します。この列にはイメージが含まれていなければならず、複数の列をもつ cell 配列または table でなければなりません。したがって、データストアの関数 read は、最初の列のイメージ データを返さなければなりません。

分類モデル。文字ベクトルとして指定します。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] が含まれます。

検出結果。変数名、Boxes、Scores、および Labels を含む 3 列の table として返されます。Boxes 列には、イメージで検出されたオブジェクトに対する M 個の境界ボックスで構成される M 行 4 列の行列が含まれています。各行には、[x,y,width,height] 形式の 4 要素ベクトルとして境界ボックスが格納されています。この形式は、対応するイメージにおける境界ボックスの左上隅の位置とサイズをピクセル単位で指定します。

オブジェクト関数

オブジェクト関数を使用するには、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');

Figure contains an axes object. The axes object with title Detected faces contains an object of type image.

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

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');

Figure contains an axes object. The axes object with title Detected upper bodies contains an object of type image.

アルゴリズム

すべて展開する

参照

[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 で導入