OpenCV中 关于hog特征向量的个数的计算

本文详细解析了HOG特征的基本原理,包括构造函数参数的含义、特征向量的生成方式以及如何计算一张图像的特征向量总数。通过实例演示了如何使用OpenCV库中的HOGDescriptor类来实现HOG特征的提取,并解释了padding参数的作用以及其对特征数量的影响。

转自:http://gz-ricky.blogbus.com/logs/85326280.html



今天脑袋终于开窍了,把hog的特征个数弄懂了一点

  •  
    其实原理是很简单的,在OpenCV实现的是R-HOG,即对图像img->窗口window->块block->细胞单元cell进行向量统计
    首先看描述器的构造函数,我用
    HOGDescriptor *desc=new HOGDescriptor(cvSize(40,80),cvSize(10,20),cvSize(5,10),cvSize(5,5),9);
    进行测试。
     
    这里的window为(40, 80), block为(10, 20),block的步进stride是(5, 10), 细胞单元cell是5 * 5像素,每个cell的直方图bin是9。
    于是, 对每一个cell, 有9个向量
  •  
    对每一个block,有2*4个cell,所以有72个向量
  •  
    对于window而言,计算block个数的方法是,对两个方向计算 (window_size - block_size)/block_stride + 1,算得共有7*7 个block,共有72*49=3528个向量
     
     
  •  
  • 在搜索img,计算图片特征的时候, 调用desc->compute(img,w,cvSize(10,20),cvSize(0,0));
    其中img是输入图像, w是保存向量的vector,第三个是window的步进,第四个是padding, 用于填充图片以适应大小的。  
  •  
    当设置padding为默认(0,0)时, 计算(img_size - window_size) / window_stride +1 不一定为整数
  •  
    在compute函数中可以看到:
        padding.width = (int)alignSize(std::max(padding.width, 0), cacheStride.width);
        padding.height = (int)alignSize(std::max(padding.height, 0), cacheStride.height);
    即padding的大小会自动适应stride的值。
  •  
    gz_ricky输入的图片是96*160的,对应了5.6 * 5, 经函数调整后变成6 * 5 =30
     
     所以对这张96*160的图片, 共有 3528 * 30 = 105840个特征向量
     
    PS,如果设置了padding的值,图片就会先伸展padding*2,或许是和内部那个paddingTL和paddingBR两个有关,即在Top-Left和Button-Right两个方向都扩展。计算特征数方法同上。
     

    hog特征值会生成以后,可以转入svm训练的阶段了。。。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值