カスケード分類器で特徴量を求めるための基底クラス.
class CV_EXPORTS FeatureEvaluator
{
public:
enum { HAAR = 0, LBP = 1 }; // サポートされる特徴タイプ
virtual ~FeatureEvaluator(); // デストラクタ
virtual bool read(const FileNode& node);
virtual Ptr<FeatureEvaluator> clone() const;
virtual int getFeatureType() const;
virtual bool setImage(const Mat& img, Size origWinSize);
virtual bool setWindow(Point p);
virtual double calcOrd(int featureIdx) const;
virtual int calcCat(int featureIdx) const;
static Ptr<FeatureEvaluator> create(int type);
};
特徴量評価器の完全なコピーを返します.
特徴量タイプ(現在は HAAR か LBP)を返します.
CascadeClassifier::runAt()
現在の画像上に,特徴量を計算する探索窓をセットします( によって呼び出されます)
パラメタ: |
|
---|
順序付き(数値)特徴量の値を求めます.
パラメタ: |
|
---|
求められた順序付き特徴量の値を返します.
カテゴリ特徴量の値を求めます.
パラメタ: |
|
---|
求められたカテゴリ特徴量,つまり [0,... (カテゴリ数 - 1)] の範囲内の値を返します.
特徴量評価器を作成します.
パラメタ: |
|
---|
オブジェクト検出のためのカスケード分類器クラス.
class CascadeClassifier
{
public:
// 木ノードを表す構造体
struct CV_EXPORTS DTreeNode
{
int featureIdx; // 分岐となる特徴量インデックス
float threshold; // 順序付き特徴量に対する分岐の閾値
int left; // 木ノード配列において,左側にある子ノードのインデックス
int right; // 木ノード配列において,右側にある子ノードのインデックス
};
// 決定木を表す構造体
struct CV_EXPORTS DTree
{
int nodeCount; // ノード数
};
// カスケードステージ(現在のところ BOOST のみ)を表す構造体
struct CV_EXPORTS Stage
{
int first; // 木配列における,最初の木のインデックス
int ntrees; // 木の数
float threshold; // ステージの閾値
};
enum { BOOST = 0 }; // サポートされるステージの種類
// 検出のモード(HaarDetectObjects 関数のパラメータ flags を参照してください)
enum { DO_CANNY_PRUNING = CV_HAAR_DO_CANNY_PRUNING,
SCALE_IMAGE = CV_HAAR_SCALE_IMAGE,
FIND_BIGGEST_OBJECT = CV_HAAR_FIND_BIGGEST_OBJECT,
DO_ROUGH_SEARCH = CV_HAAR_DO_ROUGH_SEARCH };
CascadeClassifier(); // デフォルトコンストラクタ
CascadeClassifier(const string& filename);
~CascadeClassifier(); // デストラクタ
bool empty() const;
bool load(const string& filename);
bool read(const FileNode& node);
void detectMultiScale( const Mat& image, vector<Rect>& objects,
double scaleFactor=1.1, int minNeighbors=3,
int flags=0, Size minSize=Size());
bool setImage( Ptr<FeatureEvaluator>&, const Mat& );
int runAt( Ptr<FeatureEvaluator>&, Point );
bool is_stump_based; // 木が stump の場合は true
int stageType; // ステージの種類(現在は,BOOST のみ)
int featureType; // 特徴量の種類(現在は,HAAR または LBP のどちらか)
int ncategories; // カテゴリ数(カテゴリ特徴量の場合のみ)
Size origWinSize; // 学習画像のサイズ
vector<Stage> stages; // ステージの vector (現在は,BOOST のみ)
vector<DTree> classifiers; // 決定木の vector
vector<DTreeNode> nodes; // 木ノードの vector
vector<float> leaves; // 葉の値の vector
vector<int> subsets; // カテゴリ特徴量によって分けられた部分集合
Ptr<FeatureEvaluator> feval; // 特徴評価器へのポインタ
Ptr<CvHaarClassifierCascade> oldCascade; // pointer to old cascade
};
ファイルから分類器を読み込む.
パラメタ: |
|
---|
ファイルから分類器を読み込みます.以前の内容は破棄されます.
パラメタ: |
|
---|
入力画像中から異なるサイズのオブジェクトを検出します.検出されたオブジェクトは,矩形のリストとして返されます.
パラメタ: |
|
---|
画像をセットします(各レベルの画像において detectMultiScale から呼び出されます).
パラメタ: |
|
---|
画像の指定位置で検出器を実行します(検出器の動作対象となる画像は,setImage によってセットされている必要があります).
パラメタ: |
|
---|
以下を返します: 1 - カスケード分類器が,指定位置でオブジェクトを検出した場合. -si - それ以外の場合.si は,与えられた探索窓位置が背景画像であると最初に予測したステージのインデックスです.
オブジェクト候補を表す矩形をグループ化します.
パラメタ: |
|
---|
この関数は,汎用関数 partition() のラッパです.これは,矩形が同一と見なせるかどうかの基準を利用して,すべての入力矩形をクラスタリングします.つまり,同じようなサイズで同じような位置にある(この類似性は eps で定義されます)矩形を結合します. eps=0 の場合,クラスタリングは全く行われません. ならば,すべての矩形が1つのクラスタに入れられます. また, groupThreshold 個以下の矩形しか含まないような小さいクラスタは,棄却されます.それぞれのクラスタにおいて平均矩形が計算され,出力の矩形リストに書き出されます.