HOG简介和OpenCV HOGDescriptor的用法

来源:互联网 发布:机房教学控制软件 编辑:程序博客网 时间:2024/04/27 16:46

HOG简介和OpenCV HOGDescriptor的用法

前言
本文是为另一篇博文A服务的,A还没写好.

正文

  • HOG简介
    HOG是 Histogram of Oriented Gradient 简称, 即 “方向梯度直方图”.
    维基百科: https://en.wikipedia.org/wiki/Histogram_of_oriented_gradients
    百度百科: https://baike.baidu.com/item/HOG/9738560?fr=aladdin
  • OpenCV HOG的使用
    OpenCV doc 网址: https://www.docs.opencv.org/

HOGDescriptor的用法

下面是来自OpenCV文档的定义

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}

这是它的构造函数 :
这里写图片描述

部分参数解析 :

win_size 是检测窗口的大小

这里写图片描述

在检测的时候即(使用 gpu::HOGDescriptor::detectMultiScale)的时候, 窗口是以步长 win_stride 沿着img图像滑动的.

block_size 是窗口中可滑动的块的大小

这里写图片描述

由于局部光照的变化以及前景-背景对比度的变化,使得梯度强度的变化范围非常大。这就需要对梯度强度做归一化。归一化能够进一步地对光照、阴影和边缘进行压缩。
作者采取的办法是:把各个细胞单元组合成大的、空间上连通的区间(blocks)。这样,一个block内所有cell的特征向量串联起来便得到该block的HOG特征。这些区间是互有重叠的,这就意味着:每一个单元格的特征会以不同的结果多次出现在最后的特征向量中。我们将归一化之后的块描述符(向量)就称之为HOG描述符。[1]

cell_size block中细胞单元的大小

这里写图片描述

nbins bins的数量

这里写图片描述

参考文献
[1] http://blog.csdn.net/zouxy09/article/details/7929348

原创粉丝点击