1、简介
HOG(Histogram of Oriented Gridients的简写)特征检测算法,最早是由法国研究员Dalal等在CVPR-2005上提出来的,一种解决人体目标检测的图像描述子,是一种用于表征图像局部梯度方向和梯度强度分布特性的描述符。其主要思想是:在边缘具体位置未知的情况下,边缘方向的分布也可以很好的表示行人目标的外形轮廓。
2、检测步骤
HOG特征检测算法的几个步骤:颜色空间归一化—>梯度计算—>梯度方向直方图—>重叠块直方图归一化—>HOG特征。

2.1、颜色空间归一化
由于图像的采集环境、装置等因素,采集到的人脸图像效果可能不是很好,容易出现误检或漏检的情况,所以需要对采集到的人脸进行图像预处理,主要是处理光线太暗或太强的情况,这里有两次处理:图像灰度化、Gamma校正。
①图像灰度化
对于彩色图像,将RGB分量转化成灰度图像,其转化公式为:

②Gamma校正
在图像照度不均匀的情况下,可以通过Gamma校正,将图像整体亮度提高或降低。在实际中可以采用两种不同的方式进行Gamma标准化,平方根、对数法。这里我们采用平方根的办法,公式如下(其中γ=0.5):

2.2、梯度计算
对经过颜色空间归一化后的图像,求取其梯度及梯度方向。分别在水平和垂直方向进行计算,梯度算子为:

gamma和梯度代码:
/*****************************************
Copyright (c) 2015 Jingshuang Hu
@filename:demo.cpp
@datetime:2015.08.06
@author:HJS
@e-mail:eleftheria@163.com
@blog:http://blog.csdn.net/hujingshuang
*****************************************/
#include <iostream>
#include <cv.h>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>using namespace cv;
using namespace std;
int main()
{Mat picture = imread("test.jpg", 0);//灰度Mat img;picture.convertTo(img, CV_32F); //转换成浮点sqrt(img, img);                 //gamma校正normalize(img, img, 0, 255, NORM_MINMAX, CV_32F);//归一化[0,255]浮点数Mat gradient = Mat::zeros(img.rows, img.cols, CV_32F);//梯度Mat theta = Mat::zeros(img.rows, img.cols, CV_32F);//角度for (int i = 1; i < img.rows - 1; i++){for (int j = 1; j < img.cols - 1; j++){float Gx, Gy;Gx = img.at<float>(i, j + 1) - img.at<float>(i, j - 1);Gy = img.at<float>(i + 1, j) - img.at<float>(i - 1, j);gradient.at<float>(i, j) = sqrt(Gx * Gx + Gy * Gy);//梯度模值theta.at<float>(i, j) = float(atan2(Gy, Gx) * 180 / CV_PI);//梯度方向[-180°,180°]}}normalize(gradient, gradient, 0, 255, NORM_MINMAX, CV_8UC1);//归一化[0,255] 无符号整型normalize(img, img, 0, 255, NORM_MINMAX, CV_8UC1);imshow("原图", picture);imshow("Gamma校正", img);imshow("梯度图", gradient);waitKey();return 0;
}

2.3、梯度方向直方图
将图像划分成若干个cells(单元),8x8=64个像素为一个cell,相邻的cell之间不重叠。在每个cell内统计梯度方向直方图,将所有梯度方向划分为9个bin(即9维特征向量),作为直方图的横轴,角度范围所对应的梯度值累加值作为直方图纵轴,每个bin的角度范围如下。

2.4、重叠块直方图归一化
HOG的图像分割策略,一般来说有overlap和non-overlap两种。overlap指的是分割出的区块(patch)互相交叠,有重合的区域。non-overlap指的是区块不交叠,没有重合的区域。这两种策略各有各的好处。先说overlap,这种分割方式可以防止对一些物体的切割,以眼睛为例,如果分割的时候正好把眼睛从中间切割并且分到了两个patch中,提取完HOG特征之后,这会影响接下来的分类效果,但是如果两个patch之间overlap,那么至少在一个patch会有完整的眼睛。overlap的缺点是计算量大,因为重叠区域的像素需要重复计算。再说non-overlap,缺点就是上面提到的,有时会将一个连续的物体切割开,得到不太“好”的HOG特征,优点是计算量小,尤其是与Pyramid(金字塔)结合时,这个优点更为明显。

假设有一幅图像大小为220x310,将其划分成若干个8x8的cells,显然220÷8=27.5、310÷8=38.75不是整数,也就是说划分之后依然还有多余像素不能构成cell。处理办法是将图像缩放成能被8整除的长宽(如216x304),再划分。216÷8=27,304÷8=38,因此,216x304的图像可以得到27x38个cells,没有重叠。
由于图像中光照情况和背景的变化多样,梯度值的变化范围会比较大,因而良好的特征标准化对于检测率的提高相当重要。标准化的方法多种多样,大多数的都是将celll放在block中,然后标准化每个block。
以上述缩放后的图像为例,共得到27x38个cell,也就是将图像划分成了27x38个单元;将上下左右相邻的2x2个cells当做一个block整体,如下所示(为方便观察,每个颜色框故意错开了一点),黑色的8x8像素为一个cell,红、蓝、黄、粉红、绿框都是一个block,即每个框内2x2的cell组成一个block。故27x38个cell可划分成26x37个block,每个block为16x16像素。相邻block之间是有重叠的,这样有效的利用了相邻像素信息,对检测结果有很大的帮助。

接下分别对每个block进行标准化,一个block内有4个cell,每个cell含9维特征向量,故每个block就由4x9=36维特征向量来表征。

由于L2-norm简单且在检测中效果相对较好,故一般采用它。

经过上述对有重叠部分block的直方图归一化之后,将所有block的特征向量都组合起来,则形成26x37x36=34632维特征向量,这就是HOG特征,这个特征向量就可以用来表征整个图像了。
实际上,在运用的时候,我们通常是选取一幅图像中的一个窗口来进行特征提取,依然以上述220X310大小图像为例,经过缩放处理后为216x304,但并不直接提取整个图像的HOG特征,而是用一个固定大小的窗口在图像上滑动,滑动的间隔为8个像素,opencv中默认的窗口大小为128x64(高128,宽64),即有(128÷8)x(64÷8)=16x8个cell,也即有15x7个block,这样一来一幅图像就可以取到(27-16)x(38-8)=11x30=330个窗口。现在提取每个窗口的HOG特征,则可得到105x36=3780维HOG特征向量。
将这330个3780维的HOG特征当做测试样本,用支持向量机(SVM)分类器来判别出,这些窗口的HOG特征是否有行人,有行人的用矩形框标记起来。HOG行人特征及所对应的SVM分类器的参数,在opencv中已经训练好了,我们只需要得到HOG特征,然后调用SVM即可得到判别结果。

参考:
http://blog.csdn.net/hujingshuang/article/details/47337707/
http://blog.sina.com.cn/s/blog_60e6e3d50101bkpn.html
https://www.cnblogs.com/hrlnw/archive/2013/08/06/2826651.html

特征提取——HOG方向梯直方图相关推荐

  1. Histogram of Oriented Gridients(HOG) 方向梯度直方图

    from: Histogram of Oriented Gridients(HOG) 方向梯度直方图 Histogram of Oriented Gridients,缩写为HOG,是目前计算机视觉.模 ...

  2. 【计算机视觉】Histogram of Oriented Gridients(HOG) 方向梯度直方图

    Histogram of Oriented Gridients(HOG) 方向梯度直方图 Histogram of Oriented Gridients,缩写为HOG,是目前计算机视觉.模式识别领域很 ...

  3. 深度学习----CNN的图像学习之HOG(方向梯度直方图)详解

    一.原理 二.参数的理解 2.1.灰度值 2.2.归一化 2.3.细胞 2.4.窗口 2.5.类型 2.6.Gamma标准化 2.7.图像梯度及梯度算子 2.8.直方图 2.9.高斯空域加窗 三.步骤 ...

  4. 【图像特征提取1】方向梯度直方图HOG---从理论到实践------附带积分图像的解析

    (一)特征检测算法的综述 计算机视觉理论中的特征描述是常见的目标分析技术之一,关键点的检测和关键点的提取是目标分析的重要手段和重要步骤之一.局部图像特征描述的核心问题是不变性和可分析性,不变性是基于特 ...

  5. 特征描述子(feature descriptor) —— HOG(方向梯度直方图)

    HOG(Histogram of Oriented Gradients),描述的是图像的局部特征,其命名也暗示了其计算方法,先计算图像中某一区域不同方向上梯度的值,然后累积计算频次,得到直方图,该直方 ...

  6. HOG特征提取原理and计算步骤,方向梯度直方图

    HOG简介 方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子.它通过计算和统计图像局部区域的梯度方 ...

  7. 图像特征提取算法:方向梯度直方图HOG

    1.基本介绍 HOG,全称是方向梯度直方图(Histogram Of Gradient),是目前计算机视觉.模式识别领域很常用的一种描述图像局部纹理的特征.这个特征名字起的也很直白,就是说先计算图片某 ...

  8. python 方向梯度直方图_手动绘制方向梯度直方图(HOG)

    HOG(Histogram of Oriented Gradients)--方向梯度直方图,是一种表示图像特征量的方法,特征量是表示图像的状态等的向量集合. 在图像识别(图像是什么)和检测(物体在图像 ...

  9. 手动绘制方向梯度直方图(HOG)

    HOG(Histogram of Oriented Gradients)--方向梯度直方图,是一种表示图像特征量的方法,特征量是表示图像的状态等的向量集合. 在图像识别(图像是什么)和检测(物体在图像 ...

最新文章

  1. 漂亮的验证码(.Net MVC)
  2. Xamarin Essentials教程陀螺仪Gyroscope
  3. Struts 2的基石——拦截器(Interceptor)
  4. MySQL获取每个分类下面的前三条数据
  5. 使用 CXF 做 webservice 简单例子
  6. 使用EL表达式获得session中内容
  7. 不用wp-pagenav,wordpress自带分页代码调用
  8. Autofac Webapi 的依赖注入
  9. vue 封装dialog_GitHub - 1014156094/vue-mobile-dialog: Vue移动端基础组件 - 对话框
  10. 网页选项卡应用4-12
  11. 【记得交作业】波波离散实验报告一(python实现)
  12. 曙光服务器I620-G10安装windows server 2012 教程,附raid卡驱动
  13. android 广告轮播图片+视频+音频
  14. oppor11st升Android p,OPPO R11st刷机教程_OPPO R11st卡刷升级更新官方系统包
  15. 全能在线APP一款开源的多功能在线学习考试智慧软件系统
  16. JVM-SandBox使用入门
  17. 无线传感网络的基本结构
  18. 时间字符串解析(格式问题如2020-04-25T07:00:00+00:00)
  19. 图书馆客流统计计数器的作用是什么?
  20. 基于深度学习的公交客流统计解决方案简介

热门文章

  1. SharedPreferences 的使用,commit和apply两个方法的区别
  2. Microsoft System Center Configuration Manager 2007 工作流中文版
  3. win10万能触摸屏驱动_教你win10系统设置usb鼠标驱动的方法
  4. linux显卡驱动版本最好,Linux 用户如何安装 Nvidia 331.67 显卡驱动稳定版本
  5. oracle统计每日归档大小,Oracle查询最近几天每小时归档日志产生数量的脚本写法...
  6. python hbase_Python操作Hbase
  7. app把信息添加到mysql_如何将数据从iphone app上传到mysql数据库
  8. 阿里妈妈技术团队 6 篇论文入选 CIKM 2021
  9. TCP文件上传Java_java 基于TCP协议的文件上传
  10. redis php ismember,Spring StringRedisTemplate 配置