カスケード型分類器

FeatureEvaluator

Comments from the Wiki

FeatureEvaluator

カスケード分類器で特徴量を求めるための基底クラス.

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

cv::FeatureEvaluator::read

Comments from the Wiki

bool FeatureEvaluator::read(const FileNode& node)

FileStorage ノードから,特徴量パラメータを読み込みます.

パラメタ:
  • node – ファイルノード.ここから特徴量パラメータが読み出されます

cv::FeatureEvaluator::clone

Comments from the Wiki

Ptr<FeatureEvaluator> FeatureEvaluator::clone() const

特徴量評価器の完全なコピーを返します.

cv::FeatureEvaluator::getFeatureType

Comments from the Wiki

int FeatureEvaluator::getFeatureType() const

特徴量タイプ(現在は HAAR か LBP)を返します.

cv::FeatureEvaluator::setImage

Comments from the Wiki

bool FeatureEvaluator::setImage(const Mat& img, Size origWinSize)

特徴量を求める対象となる画像をセットします.

パラメタ:
  • imgCV_8UC1 型の行列.ここにセットされた画像の特徴を求めます
  • origWinSize – 学習画像のサイズ

cv::FeatureEvaluator::setWindow

Comments from the Wiki

CascadeClassifier::runAt()

bool FeatureEvaluator::setWindow(Point p)

現在の画像上に,特徴量を計算する探索窓をセットします( によって呼び出されます)

パラメタ:
  • p – 探索窓の左上角の座標.この探索窓の中の特徴量が計算されます.探索窓のサイズは,学習画像と同じです

cv::FeatureEvaluator::calcOrd

Comments from the Wiki

double FeatureEvaluator::calcOrd(int featureIdx) const

順序付き(数値)特徴量の値を求めます.

パラメタ:
  • featureIdx – 値を求める特徴量のインデックス

求められた順序付き特徴量の値を返します.

cv::FeatureEvaluator::calcCat

Comments from the Wiki

int FeatureEvaluator::calcCat(int featureIdx) const

カテゴリ特徴量の値を求めます.

パラメタ:
  • featureIdx – 値を求める特徴量のインデックス

求められたカテゴリ特徴量,つまり [0,... (カテゴリ数 - 1)] の範囲内の値を返します.

cv::FeatureEvaluator::create

Comments from the Wiki

static Ptr<FeatureEvaluator> FeatureEvaluator::create(int type)

特徴量評価器を作成します.

パラメタ:
  • type – カスケードによって評価される特徴量の種類(現在は,HAAR または LBP のどちらか)

CascadeClassifier

Comments from the Wiki

CascadeClassifier

オブジェクト検出のためのカスケード分類器クラス.

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
};

cv::CascadeClassifier::CascadeClassifier

Comments from the Wiki

CascadeClassifier::CascadeClassifier(const string& filename)

ファイルから分類器を読み込む.

パラメタ:
  • filename – ファイル名.ここから分類器を読み込みます

cv::CascadeClassifier::empty

Comments from the Wiki

bool CascadeClassifier::empty() const

分類器が読み込まれたか否かをチェックします.

cv::CascadeClassifier::load

Comments from the Wiki

bool CascadeClassifier::load(const string& filename)

ファイルから分類器を読み込みます.以前の内容は破棄されます.

パラメタ:
  • filename – ファイル名.ここから分類器を読み込みます.ファイルには(haartraining アプリケーションによって学習された)古い haar 分類器,または(traincascade アプリケーションによって学習された)新しいカスケード分類器が保存されている場合があります

cv::CascadeClassifier::read

Comments from the Wiki

bool CascadeClassifier::read(const FileNode& node)

ファイルストレージノードから分類器を読み込みます.ファイルには,(traincascade アプリケーションによって学習された)新しいカスケード分類器しか保存されていません.

cv::CascadeClassifier::detectMultiScale

Comments from the Wiki

void CascadeClassifier::detectMultiScale(const Mat& image, vector<Rect>& objects, double scaleFactor=1.1, int minNeighbors=3, int flags=0, Size minSize=Size())

入力画像中から異なるサイズのオブジェクトを検出します.検出されたオブジェクトは,矩形のリストとして返されます.

パラメタ:
  • imageCV_8U 型の行列.ここに格納されている画像中からオブジェクトが検出されます
  • objects – 矩形を要素とするベクトル.それぞれの矩形は,検出したオブジェクトを含みます
  • scaleFactor – 各画像スケールにおける縮小量を表します
  • minNeighbors – オブジェクト候補となる矩形は,最低でもこの数だけの近傍矩形を含む必要があります
  • flags – このパラメータは,新しいカスケードでは利用されません.古いカスケードに対しては,cvHaarDetectObjects 関数の場合と同じ意味を持ちます
  • minSize – オブジェクトが取り得る最小サイズ.これよりも小さいオブジェクトは無視されます

cv::CascadeClassifier::setImage

Comments from the Wiki

bool CascadeClassifier::setImage(Ptr<FeatureEvaluator>& feval, const Mat& image)

画像をセットします(各レベルの画像において detectMultiScale から呼び出されます).

パラメタ:
  • feval – 特徴量を計算するために用いられる特徴評価器へのポインタ
  • imageCV_8UC1 型の行列.ここに格納されている画像中の特徴量が求められます

cv::CascadeClassifier::runAt

Comments from the Wiki

int CascadeClassifier::runAt(Ptr<FeatureEvaluator>& feval, Point pt)

画像の指定位置で検出器を実行します(検出器の動作対象となる画像は,setImage によってセットされている必要があります).

パラメタ:
  • feval – 特徴量を計算するために用いられる特徴評価器へのポインタ
  • pt – 探索窓の左上角の座標.この探索窓の中の特徴量が計算されます.探索窓のサイズは,学習画像と同じです

以下を返します: 1 - カスケード分類器が,指定位置でオブジェクトを検出した場合. -si - それ以外の場合.si は,与えられた探索窓位置が背景画像であると最初に予測したステージのインデックスです.

cv::groupRectangles

Comments from the Wiki

void groupRectangles(vector<Rect>& rectList, int groupThreshold, double eps=0.2)

オブジェクト候補を表す矩形をグループ化します.

パラメタ:
  • rectList – 矩形の入出力ベクトル.出力の場合,グループ化された矩形を格納します.
  • groupThreshold – 矩形グループにおいて最低限保持すべき矩形の数 - 1 の値.
  • eps – 1つのグループにマージするための,矩形端同士の相対的差異.

この関数は,汎用関数 partition() のラッパです.これは,矩形が同一と見なせるかどうかの基準を利用して,すべての入力矩形をクラスタリングします.つまり,同じようなサイズで同じような位置にある(この類似性は eps で定義されます)矩形を結合します. eps=0 の場合,クラスタリングは全く行われません. \texttt{eps}\rightarrow +\inf ならば,すべての矩形が1つのクラスタに入れられます. また, groupThreshold 個以下の矩形しか含まないような小さいクラスタは,棄却されます.それぞれのクラスタにおいて平均矩形が計算され,出力の矩形リストに書き出されます.