物体検出 ============ .. highlight:: cpp .. index:: gpu::HOGDescriptor .. _gpu::HOGDescriptor: gpu::HOGDescriptor ------------------ `id=0.931821736679 Comments from the Wiki `__ .. ctype:: gpu::HOGDescriptor Histogram of Oriented Gradients dalal_hog ディスクリプタおよび検出器. .. code-block:: c 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& detector); static vector getDefaultPeopleDetector(); static vector getPeopleDetector48x96(); static vector getPeopleDetector64x128(); void detect(const GpuMat& img, vector& found_locations, double hit_threshold=0, Size win_stride=Size(), Size padding=Size()); void detectMultiScale(const GpuMat& img, vector& 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 ディスクリプタおよび検出器にできる限り似せてあります. .. index:: gpu::HOGDescriptor::HOGDescriptor cv::gpu::HOGDescriptor::HOGDescriptor ------------------------------------- `id=0.543724719528 Comments from the Wiki `__ .. cfunction:: 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 ディスクリプタおよび検出器を作成します. :param win_size: 検出窓サイズ.ブロックのサイズと移動量に合わせる必要があります. :param block_size: ピクセル単位で表されるブロックサイズ.セルサイズに合わせる必要があります.現在, (16, 16) のみがサポートされています. :param block_stride: ブロックの移動量.セルサイズの倍数でなければいけません. :param cell_size: セルサイズ.現在, (8, 8) のみがサポートされています. :param nbins: ビンの個数.現在,1セル毎に 9 個のビンがサポートされています. :param win_sigma: ガウシアン平滑化窓パラメータ. :param threshold_L2Hys: L2-Hys 正規化縮小処理の閾値. :param gamma_correction: 前処理としてガンマ補正を行うか否か,を指定します. :param nlevels: 検出窓拡大回数の最大値. .. index:: gpu::HOGDescriptor::getDescriptorSize cv::gpu::HOGDescriptor::getDescriptorSize ----------------------------------------- `id=0.761838070569 Comments from the Wiki `__ .. cfunction:: size_t HOGDescriptor::getDescriptorSize() const 分類に必要な係数の個数を返します. .. index:: gpu::HOGDescriptor::getBlockHistogramSize cv::gpu::HOGDescriptor::getBlockHistogramSize --------------------------------------------- `id=0.125671981213 Comments from the Wiki `__ .. cfunction:: size_t HOGDescriptor::getBlockHistogramSize() const ブロックのヒストグラムサイズを返します. .. index:: gpu::HOGDescriptor::setSVMDetector cv::gpu::HOGDescriptor::setSVMDetector -------------------------------------- `id=0.243548757071 Comments from the Wiki `__ .. cfunction:: void HOGDescriptor::setSVMDetector(const vector\& detector) 線形SVM分類器に,係数をセットします. .. index:: gpu::HOGDescriptor::getDefaultPeopleDetector cv::gpu::HOGDescriptor::getDefaultPeopleDetector ------------------------------------------------ `id=0.357350834035 Comments from the Wiki `__ .. cfunction:: static vector HOGDescriptor::getDefaultPeopleDetector() (デフォルトの窓サイズで)人検出用に学習された分類器の係数を返します. .. index:: gpu::HOGDescriptor::getPeopleDetector48x96 cv::gpu::HOGDescriptor::getPeopleDetector48x96 ---------------------------------------------- `id=0.545454181143 Comments from the Wiki `__ .. cfunction:: static vector HOGDescriptor::getPeopleDetector48x96() (48x96 の窓サイズで)人検出用に学習された分類器の係数を返します. .. index:: gpu::HOGDescriptor::getPeopleDetector64x128 cv::gpu::HOGDescriptor::getPeopleDetector64x128 ----------------------------------------------- `id=0.0507297915754 Comments from the Wiki `__ .. cfunction:: static vector HOGDescriptor::getPeopleDetector64x128() (64x128 の窓サイズで)人検出用に学習された分類器の係数を返します. .. index:: gpu::HOGDescriptor::detect cv::gpu::HOGDescriptor::detect ------------------------------ `id=0.419969775865 Comments from the Wiki `__ .. cfunction:: void HOGDescriptor::detect(const GpuMat\& img, vector\& found_locations, double hit_threshold=0, Size win_stride=Size(), Size padding=Size()) 検出窓サイズ固定で,物体検出を行います. :param img: 入力画像.現在は, ``CV_8UC1`` および ``CV_8UC4`` 型の画像のみをサポートします. :param found_locations: 検出された物体を囲む境界矩形の,左上のコーナー点が格納されます. :param hit_threshold: 特徴点とSVMの分割平面との距離の閾値.通常は,これを0にして,検出器の係数(最後の3つの係数)が使われるようにするべきですが,フリー係数がない場合は,ここで指定することもできます. :param win_stride: 検出窓の移動量.ブロックの移動量の倍数でなければいけません. :param padding: CPUインタフェースとの互換性を保つためのモックパラメータ.必ず (0, 0) にしてください. .. index:: gpu::HOGDescriptor::detectMultiScale cv::gpu::HOGDescriptor::detectMultiScale ---------------------------------------- `id=0.990350873814 Comments from the Wiki `__ .. cfunction:: void HOGDescriptor::detectMultiScale(const GpuMat\& img, vector\& found_locations, double hit_threshold=0, Size win_stride=Size(), Size padding=Size(), double scale0=1.05, int group_threshold=2) 検出窓サイズ可変で,物体検出を行います. :param img: 入力画像.型の制限については, :func:`gpu::HOGDescriptor::detect` を参照してください. :param found_locations: 検出された物体を囲む境界矩形が格納されます. :param hit_threshold: 特徴点とSVMの分割平面との距離の閾値.詳細は, :func:`gpu::HOGDescriptor::detect` を参照してください. :param win_stride: 検出窓の移動量.ブロックの移動量の倍数でなければいけません. :param padding: CPUインタフェースとの互換性を保つためのモックパラメータ.必ず (0, 0) にしてください. :param scale0: 検出窓拡大係数. :param group_threshold: 検出後,物体上に多数の矩形が重なり合うことがあります.この係数は,類似閾値を調整するものです.0 は,グループ化を行わないことを意味します. 詳細は, :func:`groupRectangles` を参照してください. .. index:: gpu::HOGDescriptor::getDescriptors cv::gpu::HOGDescriptor::getDescriptors -------------------------------------- `id=0.0380337365646 Comments from the Wiki `__ .. cfunction:: void HOGDescriptor::getDescriptors(const GpuMat\& img, Size win_stride, GpuMat\& descriptors, int descr_format=DESCR_FORMAT_COL_BY_COL) 画像全体に対して求められたブロックディスクリプタを返します.主に,分類学習を行う場合に利用されます. :param img: 入力画像.型の制限については, :func:`gpu::HOGDescriptor::detect` を参照してください. :param win_stride: 検出窓の移動量.ブロックの移動量の倍数でなければいけません. :param descriptors: ディスクリプタの2次元配列. :param descr_format: ディスクリプタ格納時のフォーマット: * **DESCR_FORMAT_ROW_BY_ROW** 行順. * **DESCR_FORMAT_COL_BY_COL** 列順. .. index:: gpu::CascadeClassifier_GPU .. _gpu::CascadeClassifier_GPU: gpu::CascadeClassifier_GPU -------------------------- `id=0.950570760341 Comments from the Wiki `__ .. ctype:: gpu::CascadeClassifier_GPU 物体検出のためのカスケード分類器クラス. .. code-block:: c 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; }; .. .. index:: cv::gpu::CascadeClassifier_GPU::CascadeClassifier_GPU .. _cv::gpu::CascadeClassifier_GPU::CascadeClassifier_GPU: cv::gpu::CascadeClassifier_GPU::CascadeClassifier_GPU ----------------------------------------------------- `id=0.662895366462 Comments from the Wiki `__ .. cfunction:: cv::CascadeClassifier_GPU(const string\& filename) ファイルから分類器を読み込みます. :param filename: ファイル名.このファイルから分類器が読み込まれます.(haartraining アプリケーションで学習された)旧式の haar 分類器,および NVidia の nvbin をサポートしています. .. index:: cv::gpu::CascadeClassifier_GPU::empty .. _cv::gpu::CascadeClassifier_GPU::empty: cv::gpu::CascadeClassifier_GPU::empty ------------------------------------- `id=0.343551692323 Comments from the Wiki `__ .. cfunction:: bool CascadeClassifier_GPU::empty() const 分類器が読み込まれているか否かをチェックします. .. index:: cv::gpu::CascadeClassifier_GPU::load .. _cv::gpu::CascadeClassifier_GPU::load: cv::gpu::CascadeClassifier_GPU::load ------------------------------------ `id=0.883281456469 Comments from the Wiki `__ .. cfunction:: bool CascadeClassifier_GPU::load(const string\& filename) ファイルから分類器を読み込みます.以前の内容は破棄されます. :param filename: ファイル名.このファイルから分類器が読み込まれます.(haartraining アプリケーションで学習された)旧式の haar 分類器,および NVidia の nvbin をサポートしています. .. index:: cv::gpu::CascadeClassifier_GPU::release .. _cv::gpu::CascadeClassifier_GPU::release: cv::gpu::CascadeClassifier_GPU::release --------------------------------------- `id=0.41393870004 Comments from the Wiki `__ .. cfunction:: void CascadeClassifier_GPU::release() 読み込まれた分類器を破棄します. .. index:: cv::gpu::CascadeClassifier_GPU::detectMultiScale .. _cv::gpu::CascadeClassifier_GPU::detectMultiScale: cv::gpu::CascadeClassifier_GPU::detectMultiScale ------------------------------------------------ `id=0.767960481234 Comments from the Wiki `__ .. cfunction:: int CascadeClassifier_GPU::detectMultiScale(const GpuMat\& image, GpuMat\& objectsBuf, double scaleFactor=1.2, int minNeighbors=4, Size minSize=Size()) 入力画像中の異なるサイズの物体を検出します.検出された物体は,矩形のリストとして返されます. :param image: ``CV_8U`` 型の行列.ここに含まれる画像から,物体を検出します. :param objects: 検出された物体(矩形)を格納するバッファ.これが空の場合は,デフォルトサイズが割り当てられます.そうでない場合は,N 個以下の物体を探します.このN は,次のように決まります:N = sizeof(objectsBufer's data)/sizeof(cv::Rect) :param scaleFactor: 各スケール毎に,画像が縮小される割合を指定します. :param minNeighbors: それぞれの候補矩形に対して,何個の近接矩形があればよいかを指定します. :param minSize: とり得る最小の物体サイズ.これより小さな物体は無視されます. この関数は,検出された物体の個数を返すので,次例のようにして,それを取り出すことができます. .. code-block:: c 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(); for(int i = 0; i < detections_num; ++i) cv::rectangle(image_cpu, faces[i], Scalar(255)); imshow("Faces", image_cpu); .. 参考: :func:`CascadeClassifier::detectMultiScale` . o