HOG算法介绍
梯度方向直方图  (Histogram of Oriented Gradient, HOG) 是图像处理经典的特征提取算法。HOG 特征是直接将图像像素点的方向梯度作为图像特征,包括梯度大小和方向。通过计算图像局部区域的梯度直方图特征,然后将局部的特征串联起来,构成整幅图像的 HOG 特征,其原理图如图1所示。

HOG特征的实现步骤如下:

1.图像标准化。图像标准化如公式1所示, 表示图像(x,y)位置处的像素值,gamma表示压缩系数,通常取值为 0.5。

I(x,y) = I(x,y)^{gamma}

2. 计算梯度。在图像的(x,y)位置,计算图像梯度。包括水平方向的梯度和垂直方向的梯度,并据此计算每个像素位置的梯度方向值 。水平和垂直方向的梯度算子计算公式分别为:

                                                                      水平方向:[-1 0 1]                         

                                                                      垂直方向:[-1 0 1]T                        

根据两个方向的梯度算子,计算像素点(x,y)处的梯度。I(x,y)表示像素点(x,y)处像素值,水平方向梯度 G_{\rm{x}} (x,y)、垂直方向梯度G_{\rm{y}} (x,y)分别为

                                                                

                                                                G_{\rm{x}} (x,y){\rm{ = }}I({\rm{x}} + 1,y) - I(x,y)

G_{\rm{y}} (x,y){\rm{ = }}I({\rm{x}},y + 1) - I(x,y)

像素点(x,y)处的梯度幅值G_{} (x,y)和梯度方向分别为

G(x,y){\rm{ = }}\sqrt {G_{\rm{x}} (x,y)^2 {\rm{ + }}G_{\rm{y}} (x,y)^2 }

\alpha (x,y){\rm{ = }}\tan ^{​{\rm{ - }}1} \left( {\frac{​{G_{\rm{y}} (x,y)}}{​{G_{\rm{x}} (x,y)}}} \right)

3.划分单元格。将图像分成多个单元格cell,给每个cell构建梯度方向直方图。梯度直方图的横坐标表示梯度方向,纵坐标表示对应梯度方向的幅值。

如图2所示为9通道示意图。梯度直方图的横坐标通常有9个直方图通道,是把梯度方向划分为9个方向块。梯度直方图的纵坐标表示对应梯度方向的幅值,梯度幅值与梯度大小有紧密联系。梯度幅值越大,对应该方向上的权值越大,则这个方向的纵坐标取值越大。

4. 划分区域。把细胞单元cell组合成大的区域block,区域内归一化梯度直方图。如图 3所示为3x3模式,一个block中有9个cell单元格,一个block的 HOG 特征是这 9个cell的特征串联而得到的。

5.收集 HOG 特征。将所有块中特征集合在一起,组成图像 HOG 特征。

 实验介绍

使用如a所示的人物图像,使用MATLAB集成的HOG特征提取函数,可以得到如图所示b所示的特征,可以看出已经画出了图像的梯度方向图,图c为放大特征图像得到的结果。

以上通过一个简单的matlab函数就可以实现。

clc;
clear all;
close all;
img = imread('2.png');
[featureVector,hogVisualization] = extractHOGFeatures(img);
figure;
imshow(img);
hold on;
plot(hogVisualization);

.