HOG特征算法

简介

HOG(Histogram of Oriented Gridients的简写)特征检测算法,最早是由法国研究员Dalal等在CVPR-2005上提出来的,一种解决人体目标检测的图像描述子,是一种用于表征图像局部梯度方向和梯度强度分布特性的描述符。

其主要思想是:在边缘具体位置未知的情况下,边缘方向的分布也可以很好的表示行人目标的外形轮廓。

Dalal等提出的HOG+SVM算法,在进行行人检测取得了极大地成功后,更多新算法不断涌现,不过大都是以HOG+SVM的思路为主线。

HOG算法

HOG特征检测算法可分为几个步骤:颜色空间归一化—>梯度计算—>梯度方向直方图—>重叠快直方图归一化—>HOG特征。下面分别对其进行介绍。

1、颜色空间归一化

由于图像的采集环境、装置等因素,采集到的人脸图像效果可能不是很好,容易出现误检或漏检的情况,所以需要对采集到的人脸进行图像预处理,主要是处理光线太暗或太强的情况,这里有两次处理:图像灰度化、Gamma校正。

①图像灰度化

对于彩色图像,将RGB分量转化成灰度图像,其转化公式为:

②Gamma校正

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

代码:

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_8UC1);//归一化像素值[0,255]
	imshow("原图", picture);
	imshow("Gamma校正", img);
	waitKey(0);

	return 0;
}

结果:

2、梯度计算

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

代码:

/*****************************************
Copyright (c) 2015 Jingshuang Hu

@filename:intrins.cpp
@datetime:2015.08.05
@author:HJS
@e-mail:[email protected]
@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>
#include "histogram.h"

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(0);

    return 0;
}

结果:

3、梯度方向直方图

参考资料:

1、维基百科:Histogram of oriented gradients

2、原论文:Histograms of Oriented Gradients for Human Detection

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-09 17:45:00

HOG特征算法的相关文章

Harr-like特征算法

简介: 对于Harr特征以及Adaboost的讲解,网上有很多分析,在此记录一些较好的博客. 较好的文章: 两篇原文: 1.Rapid Object Detection using a Boosted Cascade of Simple Features 2.An Extended Set of Haar-like Features for Rapid Object Detection 维基百科: Viola–Jones object detection framework 小魏的修行路: 1.

Opencv学习之路—Opencv下基于HOG特征的KNN算法分类训练

在计算机视觉研究当中,HOG算法和LBP算法算是基础算法,但是却十分重要.后期很多图像特征提取的算法都是基于HOG和LBP,所以了解和掌握HOG,是学习计算机视觉的前提和基础. HOG算法的原理很多资料都可以查到,简单来说,就是将图像分成一个cell,通过对每个cell的像素进行梯度处理,进而根据梯度方向和梯度幅度来得到cell的图像特征.随后,将每个cell的图像特征连接起来,得到一个BLock的特征,进而得到一张图片的特征.Opencv当中自带HOG算法,可以直接调用,进行图像的特征提取.但

目标检测的图像特征提取之(一)HOG特征(转载)

目标检测的图像特征提取之(一)HOG特征 [email protected] http://blog.csdn.net/zouxy09 1.HOG特征: 方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子.它通过计算和统计图像局部区域的梯度方向直方图来构成特征.Hog特征结合SVM分类器已经被广泛应用于图像识别中,尤其在行人检测中获得了极大的成功.需要提醒的是,HOG+SVM进行行人检测的方法是法

图像特征提取三大法宝:HOG特征,LBP特征,Haar特征

(一)HOG特征 1.HOG特征: 方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子.它通过计算和统计图像局部区域的梯度方向直方图来构成特征.Hog特征结合 SVM分类器已经被广泛应用于图像识别中,尤其在行人检测中获得了极大的成功.需要提醒的是,HOG+SVM进行行人检测的方法是法国研究人员Dalal 在2005的CVPR上提出的,而如今虽然有很多行人检测算法不断提出,但基本都是以HOG+SVM

paper :80 目标检测的图像特征提取之(一)HOG特征

1.HOG特征: 方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子.它通过计算和统计图像局部区域的梯度方向直方图来构成特征.Hog特征结合SVM分类器已经被广泛应用于图像识别中,尤其在行人检测中获得了极大的成功.需要提醒的是,HOG+SVM进行行人检测的方法是法国研究人员Dalal在2005的CVPR上提出的,而如今虽然有很多行人检测算法不断提出,但基本都是以HOG+SVM的思路为主. (1)主

目标检測的图像特征提取之(一)HOG特征

1.HOG特征: 方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检測的特征描写叙述子.它通过计算和统计图像局部区域的梯度方向直方图来构成特征.Hog特征结合SVM分类器已经被广泛应用于图像识别中,尤其在行人检測中获得了极大的成功.须要提醒的是,HOG+SVM进行行人检測的方法是法国研究人员Dalal在2005的CVPR上提出的,而现在尽管有非常多行人检測算法不断提出,但基本都是以HOG+SVM的思路为主. (

SVM+HOG特征训练分类器

#1,概念 在机器学习领域,支持向量机SVM(Support Vector Machine)是一个有监督的学习模型,通常用来进行模式识别.分类.以及回归分析. SVM的主要思想可以概括为两点:⑴它是针对线性可分情况进行分析,对于线性不可分的情况,通过使用非线性映射算法将低维输入空间线性不可分的样本转化为高维特征空间使其线性可分,从而 使得高维特征空间采用线性算法对样本的非线性特征进行线性分析成为可能: 方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是

HOG特征(毕业论文节选)

各位看客,如发现错误(应该还有一些),望不吝指教.因为有删减,所以不是特别详细具体 以前写的内容: Opencv HOG行人检测 源码分析(一) HOG(Histograms of Oriented Gradients)特征是Dalal于2005年针对行人检测问题提出的特征,能够大体描述行人的轮廓[12].HOG特征是目前行人检测领域最常用的特征.对于其它非行人目标的检测,HOG特征也取得了突出效果,可以说是目标检测邻域,单一特征中效果最好的特征[26].此外,HOG特征还被应用到姿态估计[62

利用Hog特征和SVM分类器进行行人检测

在2005年CVPR上,来自法国的研究人员Navneet Dalal 和Bill Triggs提出利用Hog进行特征提取,利用线性SVM作为分类器,从而实现行人检测.而这两位也通过大量的测试发现,Hog+SVM是速度和效果综合平衡性能较好的一种行人检测方法.后来,虽然很多研究人员也提出了很多改进的行人检测算法,但基本都以该算法为基础框架.因此,Hog+SVM也成为一个里程表式的算法被写入到OpenCV中.在OpenCV2.0之后的版本,都有Hog特征描述算子的API,而至于SVM,早在OpenC