机器学习讲堂 skimage.feature.hog

scikit-image HOG feature
原文:https://blog.csdn.net/vola9527/article/details/52802837  

原理:


Hog 特征比较直观好懂,本质是提取图片内的梯度统计信息。

其提取图片特征的层次,可以分为:图片/Block/cell 这三个层次,每个层次有下属层次的多个单位构成,
例如图片被分为N个block 具体是采用滑动窗口
每个block又被分为多个cell,其中cell 作为最底层是提取梯度信息的最基本单位。
统计cell内所有像素的梯度方向信息并将其划分到预设的梯度方向范围内,便形成了基本的梯度直方图信息。
接下来就是一个逆向的组合过程,即,底层cell的梯度信息不断地组合在一起(还有归一化)形成block的特征,block的特征在组合在一起就成了image的feature,这里说的组合值得是拼接的意思。
归一化目的是去除光噪声的影响,这个好理解,因为均匀光源对图片的影响是加性的,并不改变相对大小,引起归一化是起一点抗燥作用的。
 


扯原理太多了,这里主要是说明我使用scikit-image 中 HOG函数的心得。

 

函数用法:


scikit-image 里面的hog函数是这样的:

    ft.hog(image, orientations=orientations,
 pixels_per_cell=pixels_per_cell, transform_sqrt=is_transform,
 feature_vector=is_feature_vector,
    cells_per_block=cells_per_block, visualise=is_visualise)

pixels_per_cell= [ 像素宽度,像素高度], cell_per_block= [ 宽度,高度】

eg:

 size = 128

  ft. hog(gray, orientations=12,block_norm='L1', pixels_per_cell=[8, 8], cells_per_block=[4, 4], visualize=False,

         transform_sqrt=True)

每个cell 8,8 像素,
每个block 4,4 个cell,
每个block 32,32 个像素

可以有4个block

 


其中的参数名称我已写的直观易懂了。问题来了,希望大家注意以下几点:


1 整个函数的参数使用的是类似opencv 的参数格式,即【宽度,高度】而非python numpy 中的[行数,列数], 因此pixels_per_cell= [ 像素宽度,像素高度], cell_per_block= [ 宽度,高度】


2 cell 尺寸和block尺寸问题:  

        cell尺寸的倍数只能比block小,不能比之大,否则就会越界,返回空列表。
       
        例如:img=[11,11], pixel_per_cell=[5,5], cell_per_block= [2,2] 是可以的。将pixel_per_cell设置为 [6,6]其他不变,就是不行。
        想想也奇怪,真是宁可漏掉都不能重叠。
        ( 每个cell的像素是5,5,每个block里面的cell是2,2,一共是10,10个像素,小于img的11,11)


3 函数使用中参数设置错误,不会报错,只会给你返回一个空列表。这点最令人无法忍受,一点都不友好。

 

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值