特征检测之HOG

参考:

http://blog.csdn.net/liulina603/article/details/8291093

http://blog.csdn.net/woxincd/article/details/18351807

http://hi.baidu.com/nokltkmtsfbnsyq/item/f4b73d06f066cd193a53eec3

http://www.tuicool.com/articles/fM3Mvu

http://blog.csdn.net/yangtrees/article/details/7463431

http://www.cnblogs.com/tornadomeet/archive/2012/08/15/2640754.html(源码解读)

 

下面给出opencv的HOG特征提取代码:

HOGDescriptor类可以完成HOG的特征提取过程,构造函数

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

  win_size 检测窗口大小为128*64;

  block_size Block大小为16*16

  block_stride Block在检测窗口中上下移动尺寸为8*8

  cell_size Cell大小为8*8

  1个cell的梯度直方图化成9个bin

  //滑动窗口在检测图片中滑动的尺寸为8*8

代码中的一个hog描述子是针对一个检测窗口而言的,所以一个检测窗口共有105= ((128-16)/8+1)*((64-16)/8+1)个block;一个block中有4个cell,而一个cell的hog描述子向量的长度为 9;所以检测窗口的hog向量长度=3780=105*4*9维。

void main()
{
    Mat trainImg; //需要分析的图片  
    trainImg=imread("test.png",0);   //读取图片  
    resize(trainImg, trainImg,Size(64, 128));
    HOGDescriptor *hog=new HOGDescriptor(cvSize(64,128),cvSize(16,16),cvSize(8,8),cvSize(8,8),9);  //具体意思见参考文献和opencv的api文档  
    vector<float>descriptors;//结果数组  
    hog->compute(trainImg, descriptors,Size(1,1), Size(0,0)); //调用计算函数开始计算  
    printf("%d\n",descriptors.size()); //打屏一下结果数组的大小,看看是否符合文献的预估, 发现完全一样,那篇文章很给力 
  //打印结果 3780
}

 

posted on 2015-04-21 09:42  Maddock  阅读(628)  评论(0编辑  收藏  举报

导航