HOG人脸识别-matlab

本文不详细介绍HOG的原理,主要介绍HOG提取人脸特征的具体操作过程,程序采用matlab编写:

参考博客:http://blog.csdn.net/hujingshuang/article/details/47337707/(C++)

简单说一下思路:我们要提取整个人脸的hog特征,可以将人脸分成很多个block,通过提取block的hog特征,然后将所有的block的hog特征串联即可得到人脸特征,同理,要提取每个block的hog特征,我们又可以将block划分成多个cell,通过提取cell的hog特征,最后再通过串联组成block的cell的hog特征,即可获取block特征。

到底什么是hog特征,顾名思义,就是梯度方向直方图,你只要知道提取出的hog特征可以很好地表征行人目标的外形轮廓,至于整个原理,可以搜搜网上的资料。

1. 对输入图像求灰度图像并对其进行归一化:

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

我们假设输入的图像大小是M*N个像素,M代表图像宽度,N代表图像高度;比如一副图片220*310=68200个像素大小,即该图片由68200个点组成

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

我们可以分别用一个与图片等大小的矩阵来表征图片上每个像素点的梯度值和方向

梯度值的求法:1.可以用matlab自带的函数gradient。

                              [GradientX,GradientY]=gradient(G);  %G表示经过上诉步骤处理后的图像矩阵,大小同样为M*N,矩阵的每个位置的值就代表像素点的值

                             2. 也可以用卷积运算求梯度

                              kx=[-1 0 1]; %水平方向梯度算子
                              ky=[-1 0 1]';%垂直方向梯度算子
                              grad_x=conv2(G,kx,'valid'); %水平方向梯度
                              grad_y=conv2(G,ky,'valid'); %垂直方向梯度

Gr=sqrt(grad_x.^2+grad_y.^2);  %计算出了每个像素点的梯度值 

方向的求法:      

YX=grad_y./grad_x;
if angle==180
    grad_angle= ((atan(YX)+(pi/2))*180)./pi; 
elseif angle==360
    grad_angle= ((atan2(grad_y,grad_x)+pi).*180)./pi;
end

3.将图像划分成小cells,提取每个cell的hog特征
接下来就是将图片划分成cell,那么如何划分呢,那么我们就要确定一个cell的宽度和高度,通常取cell为8*8=64个像素,即该cell宽8个像素,高8个像素,共64个像素点。


                                                                                               图1
如上图1所示,假设整个黑色的正方形就代表人脸图片,每个小方格代表一个cell,可见上图人脸图片被分成了16个cell(注意:实际情况下并不是正方形,只是这里举例画成了正方形)
接下来就要统计每个cell的梯度方向直方图,将一个cell所有像素点,即16个像素点的梯度方向划分成9个bin(即9维特征向量), 作为直方图的横轴,角度范围所对应的梯度值累加值作为直方图纵轴,每个bin的角度范围如下。



% orient bin
%bin_num=9;
bin_angle=angle/bin_num; 
grad_orient=ceil(grad_angle./bin_angle);
将一个cell中的所有像素点统计可以得到一个9为的hog特征向量。
4.将cell组成block,提取每个block的hog特征
如图1所示,一般采用的是2*2cell组成一个block,即一个block由4个cell构成,每个cell包含9维特征向量,那么一个block就是4*9=36维特征向量,如图1所示,我们取左上角橘色的框,将cell1,cell2,cell3,cell4(也可以先排竖着的cell再排横的)的特征向量串联起来(排成一个36维的向量)就可以得到该橘色block的hog特征向量


5.搜集一个图片所有的block特征,提取图片的hog特征
如何才能获取整个图片的hog特征,图片是由block组成的,显然将block的hog的特征向量组合起来就能得到,实际上,在运用的时候,我们通常是选取一幅图像中的一个窗口(与block等大小)来进行特征提取,依然以上述M*N大小图像为例,但并不直接提取整个图像的HOG特征,而是用一个固定大小的窗口在图像上滑动,滑动的间隔为8个像素。如图1所示,按右边给出的block的箭头方向为窗口滑动依次经过的block(依然是按照从左到右从上到下的扫描方式),一共会经过9个block。将这9个block的特征hog特征串联起来即可得到一个图片的hog特征。

  • 0
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值