关闭

OpenCV关于hog特征向量的个数

649人阅读 评论(0) 收藏 举报
分类:
  • 其实原理是很简单的, 在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的图片, 共有105840个特征向量
     
    PS. 如果设置了padding的值, 图片就会先伸展padding*2, 或许是和内部那个paddingTL和paddingBR两个有关, 即在Top-Left和Button-Right两个方向都扩展. 计算特征数方法同上.
     

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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:706972次
    • 积分:7644
    • 等级:
    • 排名:第2951名
    • 原创:88篇
    • 转载:324篇
    • 译文:8篇
    • 评论:64条
    最新评论