open cvHOG特征检测


什么是HOG特征

方向梯度直方图(Histogram of Oriented Gradient, HOG)
特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子 它通过计算和统计图像局部区域的梯度方向直方图来构成特征。Hog特征结合SVM分类器已经被广泛应用于图像识别中,尤其在行人检测中获得了极大的成功
目标检测是用来确定图像上某个区域是否有我们要识别的对象,目标识别是用来判断图片上这个对象是什么。识别通常只处理已经检测到对象的区域,例如,人们总是会使在已有的人脸图像的区域去识别人脸
是与SIFT、SURF、ORB属于同一类型的描述符 HOG不是基于颜色值而是基于梯度来计算直方图的,它通过计算和统计图像局部区域的梯度方向直方图来构建特征


原理:

主要思想:在一副图像中,局部目标的表象和形状(appearance and shape)能够被梯度或边缘的方向密度分布很好地描述。(本质:梯度的统计信息,而梯度主要存在于边缘的地方

具体的实现方法是:首先将图像分成小的连通区域,我们把它叫细胞单元。然后采集细胞单元中各像素点的梯度的或边缘的方向直方图。最后把这些直方图组合起来就可以构成特征描述器(梯度方向计算和获取描述子)

提高性能:把这些局部直方图在图像的更大的范围内(我们把它叫区间或block)进行对比度归一化(contrast-normalized),所采用的方法是:先计算各直方图在这个区间(block)中的密度,然后根据这个密度对区间中的各个细胞单元做归一化
过这个归一化后,能对光照变化和阴影获得更好的效果(对描述子进行归一化处理)


HOG特征的特性

优点:

  1. 与其他的特征描述方法相比,HOG有很多优点。首先,由于HOG是在图像的局部方格单元上操作,所以它对图像几何的和光学的形变都能保持很好的不变性 这两种形变只会出现在更大的空间领域上
    2.粗的空域抽样、精细的方向抽样以及较强的局部光学归一化等条件下,只要行人大体上能够保持直立的姿势,可以容许行人有一些细微的肢体动作,这些细微的动作可以被忽略而不影响检测效果。因此HOG特征是特别适合于做图像中的人体检测的
    缺点:
    1.很难处理遮挡问题,人体姿势动作幅度过大或物体方向改变也不易检测(这个问题后来在DPM中采用可变形部件模型的方法得到了改善
    2.跟SIFT相比,HOG没有选取主方向,也没有旋转梯度方向直方图,因而本身不具有旋转不变性(较大的方向变化),其旋转不变性是通过采用不同旋转方向的训练样本来实现的
    3.跟SIFT相比,HOG本身不具有尺度不变性,其尺度不变性是通过缩放检测窗口图像的大小来实现的
    4.由于梯度的性质,**HOG对噪点相当敏感 **在实际应用中,在block和cell划分之后,对于得到各个区域,有时候还会做一次高斯平滑去除噪点。(有时候去噪后会大大降低准确度哦!!)

HOG特征提取算法的实现过程
1)灰度化(将图像看做一个x,y,z(灰度)的三维图像)

2)采用Gamma校正法对输入图像进行颜色空间的标准化(归一化)目的是调节图像的对比度,降低图像局部的阴影和光照变化所造成的影响,同时可以抑制噪音的干扰;

3)计算图像每个像素的梯度(包括大小和方向)主要是为了捕获轮廓信息,同时进一步弱化光照的干扰

4)将图像划分成小cells(例如6*6像素/cell)分网格的梯度方向直方图

5)统计每个cell的梯度直方图(不同梯度的个数),即可形成每个cell的descriptor描述子

6)将每几个cell组成一个block(例如2*2个cell/block),一个block内所有cell的特征descriptor描述子串联起来便得到该block的HOG特征descriptor

7)将图像image内的所有block的HOG特征descriptor串联起来就可以得到该image(你要检测的目标)的HOG特征descriptor了。这个就是最终的可供分类使用的特征向量了

HOG+SVM目标检测
1.将检测窗口中的所有块的HOG描述子组合起来就形成了最终的特征向量
2.然后使用SVM分类器进行行人检测

#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui_c.h>
#include <iostream>
#include <math.h>

using namespace cv;
using namespace std;

Mat src, dst;
void HOGDescriptors(int, void*);
int main()
{
   

	src = imread("D:/实验台/机器视觉/测试图片/行人检测4.jpg");
	if (src.empty())//如果src这个数据库属性为空
	{
   
		cout << "无法打开" << endl
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值