物体検出

gpu::HOGDescriptor

Comments from the Wiki

gpu::HOGDescriptor

Histogram of Oriented Gradients dalal_hog ディスクリプタおよび検出器.

struct CV_EXPORTS HOGDescriptor
{
    enum { DEFAULT_WIN_SIGMA = -1 };
    enum { DEFAULT_NLEVELS = 64 };
    enum { DESCR_FORMAT_ROW_BY_ROW, DESCR_FORMAT_COL_BY_COL };

    HOGDescriptor(Size win_size=Size(64, 128), Size block_size=Size(16, 16),
                  Size block_stride=Size(8, 8), Size cell_size=Size(8, 8),
                  int nbins=9, double win_sigma=DEFAULT_WIN_SIGMA,
                  double threshold_L2hys=0.2, bool gamma_correction=true,
                  int nlevels=DEFAULT_NLEVELS);

    size_t getDescriptorSize() const;
    size_t getBlockHistogramSize() const;

    void setSVMDetector(const vector<float>& detector);

    static vector<float> getDefaultPeopleDetector();
    static vector<float> getPeopleDetector48x96();
    static vector<float> getPeopleDetector64x128();

    void detect(const GpuMat& img, vector<Point>& found_locations,
                double hit_threshold=0, Size win_stride=Size(),
                Size padding=Size());

    void detectMultiScale(const GpuMat& img, vector<Rect>& found_locations,
                          double hit_threshold=0, Size win_stride=Size(),
                          Size padding=Size(), double scale0=1.05,
                          int group_threshold=2);

    void getDescriptors(const GpuMat& img, Size win_stride,
                        GpuMat& descriptors,
                        int descr_format=DESCR_FORMAT_COL_BY_COL);

    Size win_size;
    Size block_size;
    Size block_stride;
    Size cell_size;
    int nbins;
    double win_sigma;
    double threshold_L2hys;
    bool gamma_correction;
    int nlevels;

private:
    // Hidden
}

すべてのメソッドのインタフェースは,CPU HOG ディスクリプタおよび検出器にできる限り似せてあります.

cv::gpu::HOGDescriptor::HOGDescriptor

Comments from the Wiki

HOGDescriptor::HOGDescriptor(Size win_size=Size(64, 128), Size block_size=Size(16, 16), Size block_stride=Size(8, 8), Size cell_size=Size(8, 8), int nbins=9, double win_sigma=DEFAULT_WIN_SIGMA, double threshold_L2hys=0.2, bool gamma_correction=true, int nlevels=DEFAULT_NLEVELS)

HOG ディスクリプタおよび検出器を作成します.

パラメタ:
  • win_size – 検出窓サイズ.ブロックのサイズと移動量に合わせる必要があります.
  • block_size – ピクセル単位で表されるブロックサイズ.セルサイズに合わせる必要があります.現在, (16, 16) のみがサポートされています.
  • block_stride – ブロックの移動量.セルサイズの倍数でなければいけません.
  • cell_size – セルサイズ.現在, (8, 8) のみがサポートされています.
  • nbins – ビンの個数.現在,1セル毎に 9 個のビンがサポートされています.
  • win_sigma – ガウシアン平滑化窓パラメータ.
  • threshold_L2Hys – L2-Hys 正規化縮小処理の閾値.
  • gamma_correction – 前処理としてガンマ補正を行うか否か,を指定します.
  • nlevels – 検出窓拡大回数の最大値.

cv::gpu::HOGDescriptor::getDescriptorSize

Comments from the Wiki

size_t HOGDescriptor::getDescriptorSize() const

分類に必要な係数の個数を返します.

cv::gpu::HOGDescriptor::getBlockHistogramSize

Comments from the Wiki

size_t HOGDescriptor::getBlockHistogramSize() const

ブロックのヒストグラムサイズを返します.

cv::gpu::HOGDescriptor::setSVMDetector

Comments from the Wiki

void HOGDescriptor::setSVMDetector(const vector<float>& detector)

線形SVM分類器に,係数をセットします.

cv::gpu::HOGDescriptor::getDefaultPeopleDetector

Comments from the Wiki

static vector<float> HOGDescriptor::getDefaultPeopleDetector()

(デフォルトの窓サイズで)人検出用に学習された分類器の係数を返します.

cv::gpu::HOGDescriptor::getPeopleDetector48x96

Comments from the Wiki

static vector<float> HOGDescriptor::getPeopleDetector48x96()

(48x96 の窓サイズで)人検出用に学習された分類器の係数を返します.

cv::gpu::HOGDescriptor::getPeopleDetector64x128

Comments from the Wiki

static vector<float> HOGDescriptor::getPeopleDetector64x128()

(64x128 の窓サイズで)人検出用に学習された分類器の係数を返します.

cv::gpu::HOGDescriptor::detect

Comments from the Wiki

void HOGDescriptor::detect(const GpuMat& img, vector<Point>& found_locations, double hit_threshold=0, Size win_stride=Size(), Size padding=Size())

検出窓サイズ固定で,物体検出を行います.

パラメタ:
  • img – 入力画像.現在は, CV_8UC1 および CV_8UC4 型の画像のみをサポートします.
  • found_locations – 検出された物体を囲む境界矩形の,左上のコーナー点が格納されます.
  • hit_threshold – 特徴点とSVMの分割平面との距離の閾値.通常は,これを0にして,検出器の係数(最後の3つの係数)が使われるようにするべきですが,フリー係数がない場合は,ここで指定することもできます.
  • win_stride – 検出窓の移動量.ブロックの移動量の倍数でなければいけません.
  • padding – CPUインタフェースとの互換性を保つためのモックパラメータ.必ず (0, 0) にしてください.

cv::gpu::HOGDescriptor::detectMultiScale

Comments from the Wiki

void HOGDescriptor::detectMultiScale(const GpuMat& img, vector<Rect>& found_locations, double hit_threshold=0, Size win_stride=Size(), Size padding=Size(), double scale0=1.05, int group_threshold=2)

検出窓サイズ可変で,物体検出を行います.

パラメタ:
  • img – 入力画像.型の制限については, gpu::HOGDescriptor::detect() を参照してください.
  • found_locations – 検出された物体を囲む境界矩形が格納されます.
  • hit_threshold – 特徴点とSVMの分割平面との距離の閾値.詳細は, gpu::HOGDescriptor::detect() を参照してください.
  • win_stride – 検出窓の移動量.ブロックの移動量の倍数でなければいけません.
  • padding – CPUインタフェースとの互換性を保つためのモックパラメータ.必ず (0, 0) にしてください.
  • scale0 – 検出窓拡大係数.
  • group_threshold – 検出後,物体上に多数の矩形が重なり合うことがあります.この係数は,類似閾値を調整するものです.0 は,グループ化を行わないことを意味します. 詳細は, groupRectangles() を参照してください.

cv::gpu::HOGDescriptor::getDescriptors

Comments from the Wiki

void HOGDescriptor::getDescriptors(const GpuMat& img, Size win_stride, GpuMat& descriptors, int descr_format=DESCR_FORMAT_COL_BY_COL)

画像全体に対して求められたブロックディスクリプタを返します.主に,分類学習を行う場合に利用されます.

パラメタ:
  • img – 入力画像.型の制限については, gpu::HOGDescriptor::detect() を参照してください.
  • win_stride – 検出窓の移動量.ブロックの移動量の倍数でなければいけません.
  • descriptors – ディスクリプタの2次元配列.
  • descr_format

    ディスクリプタ格納時のフォーマット:

    • DESCR_FORMAT_ROW_BY_ROW 行順.
    • DESCR_FORMAT_COL_BY_COL 列順.

gpu::CascadeClassifier_GPU

Comments from the Wiki

gpu::CascadeClassifier_GPU

物体検出のためのカスケード分類器クラス.

class CV_EXPORTS CascadeClassifier_GPU
{
public:
        CascadeClassifier_GPU();
        CascadeClassifier_GPU(const string& filename);
        ~CascadeClassifier_GPU();

        bool empty() const;
        bool load(const string& filename);
        void release();

        /* 検出された物体の個数を返します. */
        int detectMultiScale( const GpuMat& image, GpuMat& objectsBuf, double scaleFactor=1.2, int minNeighbors=4, Size minSize=Size());

        /* 最大の物体のみを返します.学習時に必要な,特別なモードです. */
        bool findLargestObject;

        /* 入力画像上に矩形を描画します. */
        bool visualizeInPlace;

        Size getClassifierSize() const;
};

cv::gpu::CascadeClassifier_GPU::CascadeClassifier_GPU

Comments from the Wiki

cv::CascadeClassifier_GPU(const string& filename)

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

パラメタ:
  • filename – ファイル名.このファイルから分類器が読み込まれます.(haartraining アプリケーションで学習された)旧式の haar 分類器,および NVidia の nvbin をサポートしています.

cv::gpu::CascadeClassifier_GPU::empty

Comments from the Wiki

bool CascadeClassifier_GPU::empty() const

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

cv::gpu::CascadeClassifier_GPU::load

Comments from the Wiki

bool CascadeClassifier_GPU::load(const string& filename)

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

パラメタ:
  • filename – ファイル名.このファイルから分類器が読み込まれます.(haartraining アプリケーションで学習された)旧式の haar 分類器,および NVidia の nvbin をサポートしています.

cv::gpu::CascadeClassifier_GPU::release

Comments from the Wiki

void CascadeClassifier_GPU::release()

読み込まれた分類器を破棄します.

cv::gpu::CascadeClassifier_GPU::detectMultiScale

Comments from the Wiki

int CascadeClassifier_GPU::detectMultiScale(const GpuMat& image, GpuMat& objectsBuf, double scaleFactor=1.2, int minNeighbors=4, Size minSize=Size())

入力画像中の異なるサイズの物体を検出します.検出された物体は,矩形のリストとして返されます.

パラメタ:
  • imageCV_8U 型の行列.ここに含まれる画像から,物体を検出します.
  • objects – 検出された物体(矩形)を格納するバッファ.これが空の場合は,デフォルトサイズが割り当てられます.そうでない場合は,N 個以下の物体を探します.このN は,次のように決まります:N = sizeof(objectsBufer’s data)/sizeof(cv::Rect)
  • scaleFactor – 各スケール毎に,画像が縮小される割合を指定します.
  • minNeighbors – それぞれの候補矩形に対して,何個の近接矩形があればよいかを指定します.
  • minSize – とり得る最小の物体サイズ.これより小さな物体は無視されます.

この関数は,検出された物体の個数を返すので,次例のようにして,それを取り出すことができます.

cv::gpu::CascadeClassifier_GPU cascade_gpu(...);

Mat image_cpu = imread(...)
GpuMat image_gpu(image_cpu);

GpuMat objbuf;
int detections_number = cascade_gpu.detectMultiScale( image_gpu,
          objbuf, 1.2, minNeighbors);

Mat obj_host;
// 矩形の検出数だけをダウンロードします.
objbuf.colRange(0, detections_number).download(obj_host);

Rect* faces = obj_host.ptr<Rect>();
for(int i = 0; i < detections_num; ++i)
   cv::rectangle(image_cpu, faces[i], Scalar(255));

imshow("Faces", image_cpu);

参考: CascadeClassifier::detectMultiScale() .

o