Hog特征、Haar特征

2024-03-10 02:38
文章标签 特征 haar hog

本文主要是介绍Hog特征、Haar特征,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

HOG:

http://blog.csdn.net/abcjennifer/article/details/7365651(转载)

HOG即histogram of oriented gradient, 是用于目标检测的特征描述子,该技术将图像局部出现的方向梯度次数进行计数,该方法和边缘方向直方图、scale-invariant feature transform类似,不同的是hog的计算基于一致空间的密度矩阵来提高准确率。Navneet Dalal and Bill Triggs首先在05年的CVPR中提出HOG,用于静态图像or视频的行人检测。


HOG特征原理:

HOG的核心思想是所检测的局部物体外形能够被光强梯度或边缘方向的分布所描述。通过将整幅图像分割成小的连接区域(称为cells),每个cell生成一个方向梯度直方图或者cell中pixel的边缘方向,这些直方图的组合可表示出(所检测目标的目标)描述子。为改善准确率,局部直方图可以通过计算图像中一个较大区域(称为block)的光强作为measure被对比标准化,然后用这个值(measure)归一化这个block中的所有cells.这个归一化过程完成了更好的照射/阴影不变性。

与其他描述子相比,HOG得到的描述子保持了几何和光学转化不变性(除非物体方向改变)。因此HOG描述子尤其适合人的检测。

通俗的讲:

HOG特征提取方法就是将一个image:

1.            灰度化(将图像看做一个x,y,z(灰度)的三维图像)

2.            划分成小cells(2*2)

3.            计算每个cell中每个pixel的gradient(即orientation)

4.            统计每个cell的梯度直方图(不同梯度的个数),即可形成每个cell的descriptor

使用HOG训练样本方法步骤:http://blog.csdn.net/t1234xy4/article/details/51543452


1、HOG特征:http://www.open-open.com/lib/view/open1440832074794.html(转载)

(1)主要思想:

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

(2)具体的实现方法是:

首先将图像分成小的连通区域,我们把它叫细胞单元。然后采集细胞单元中各像素点的梯度的或边缘的方向直方图。最后把这些直方图组合起来就可以构成特征描述器。

(3)提高性能:

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

(4)优点:

与其他的特征描述方法相比,HOG有很多优点。首先,由于HOG是在图像的局部方格单元上操作,所以它对图像几何的和光学的形变都能保持很好的不 变性,这两种形变只会出现在更大的空间领域上。其次,在粗的空域抽样、精细的方向抽样以及较强的局部光学归一化等条件下,只要行人大体上能够保持直立的姿 势,可以容许行人有一些细微的肢体动作,这些细微的动作可以被忽略而不影响检测效果。因此HOG特征是特别适合于做图像中的人体检测的。

2、HOG特征提取算法的实现过程:
大概过程:

HOG特征提取方法就是将一个image(你要检测的目标或者扫描窗口):

1)灰度化(将图像看做一个x,y,z(灰度)的三维图像);

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

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

4)将图像划分成小cells(例如6*6像素/cell);

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

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

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


Haar特征:

1Haar特征:
   
Haar特征分为三类:边缘特征、线性特征、中心特征和对角线特征,组合成特征模板。特征模板内有白色和黑色两种矩形,并定义该模板的特征值为白色矩形像素和减去黑色矩形像素和。

1、Haar-like特征  http://www.open-open.com/lib/view/open1440832074794.html(转载)

Haar-like特征最早是由Papageorgiou等应用于人脸表示,Viola和Jones在此基础上,使用3种类型4种形式的特征。

Haar特征分为三类:边缘特征、线性特征、中心特征和对角线特征,组合成特征模板。特征模板内有白色和黑色两种矩形,并定义该模板的特征值为白 色矩形像素和减去黑色矩形像素和。Haar特征值反映了图像的灰度变化情况。例如:脸部的一些特征能由矩形特征简单的描述,如:眼睛要比脸颊颜色要深,鼻 梁两侧比鼻梁颜色要深,嘴巴比周围颜色要深等。但矩形特征只对一些简单的图形结构,如边缘、线段较敏感,所以只能描述特定走向(水平、垂直、对角)的结 构。

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

对于图中的A, B和D这类特征,特征数值计算公式为:v=Sum白-Sum黑,而对于C来说,计算公式如下:v=Sum白-2*Sum黑;之所以将黑色区域像素和乘以2,是为了使两种矩形区域中像素数目一致。

通过改变特征模板的大小和位置,可在图像子窗口中穷举出大量的特征。上图的特征模板称为“特征原型”;特征原型在图像子窗口中扩展(平移伸缩)得到的特征称为“矩形特征”;矩形特征的值称为“特征值”。

应用:http://blog.csdn.net/sunboyiris/article/details/38168111

haar特征检测流程  http://blog.csdn.net/nongfu_spring/article/details/38977555

下面为HAAR特征检测的具体流程

一.在计算每个窗口的haar值时,使用CvHidHaarClassifierCascade结构的casecade,因此需要以下步骤。

1. 创建CvHidHaarClassifierCascade结构对应的casecade

     即申请内存,并填写casecade中相关的头信息,如有多少个stage,每个stage下有多少个tree,每个tree下有多少个node,以及相关的阈值等信息。


2. 填写每个haar feature对应的积分图中矩形框的指针。

     包括casecade指向的积分图的指针sum,更多的是相应haar特征对应的矩形框指针以及权重。每个haar特征对应着2个或者3个带权重的矩形框,分别用p0,p1,p2,p3指向每个矩形框的四个顶点在积分图中的相应位置。


另外,这里haar特征对应的矩形框是根据窗口大小变化的。如样本是20*20,某个haar特征对应的某一个矩形框是4*4,当scanWindow的窗口放大为40*40时,该矩形框也扩大为8*8

所有的矩形框顶点的指针都是基于原图的积分图的,当窗口缩放时,其haar特征对应的矩形框的顶点位置也会发生相应的缩放。


二.有了CvHidHaarClassifierCascade结构的casecade,就可以计算每个window对应的stage值了。实际上,在每一个window尺寸上创建好casecade后,就会计算该window大小下所有窗口的stage值,保存满足条件的那些窗口。然后再创建下一个缩放window尺寸上的casecade,并替换掉上一个尺寸的casecade,再计算新window大小下所有窗口的stage值,继续保存满足条件的那些窗口。如此循环,直至缩放的窗口小于样本的尺寸,或者缩放的窗口大于原图的尺寸。其中计算每个固定尺寸窗口的stage值的过程见三中详述。


三.计算每一个window尺寸上所有窗口的stage值。将满足条件的窗口保存下来。这个过程用cvRunHaarClassifierCascadeSum函数判断,当cvRunHaarClassifierCascadeSum返回值大于0,才会保存此时检测的窗口位置,作为备选,参与后面的聚类过程。

1. static int cvRunHaarClassifierCascadeSum ( const CvHaarClassifierCascade* _cascade,CvPoint pt, int start_stage )

其中入参cascade为分类器,pt为检测窗口的左上角的坐标。其中窗口大小已经在外层保存了。start_stage为计算串口haar值的起始stage,若为0,则所有的stage都参与计算。

        该函数计算指定窗口中分类器对应的haar值,并根据分类器的结果判定是否满足要求。满足返回1,不满足返回0


2. cvRunHaarClassifierCascadeSum函数调用icvEvalHidHaarClassifier来计算出每个树对应节点的haar特征值,然后再和该节点的阈值比较,如果小于阈值,就进去左边分支;如果大于阈值,就进入右边分支;直至分支的索引小于等于0,此时得到的alpha为该树的计算结果。


            icvEvalHidHaarClassifier函数在计算指定窗口中分类器对应的haar值,使用了积分图。即使用该windown尺寸下casecade中所有haar特征的p0,p1,p2,p3。每移动一次窗口,p0,p1,p2,p3指针移动相应的位置,再计算(*p0+*p3-*p1-*p2),其值为图像中矩形框位置的灰度和。将其乘以相应的权重,即可得到haar特征值。下面为相应的代码:

do

{

CvHidHaarTreeNode* node = classifier->node + idx;

double t = node->threshold * variance_norm_factor;

double sum = calc_sum(node->feature.rect[0],p_offset) * node->feature.rect[0].weight;

sum += calc_sum(node->feature.rect[1],p_offset) * node->feature.rect[1].weight;

if( node->feature.rect[2].p0 )

    sum += calc_sum(node->feature.rect[2],p_offset) * node->feature.rect[2].weight;

idx = sum < t ? node->left : node->right;

}

while( idx > 0 );

3. 当用icvEvalHidHaarClassifier计算所有树的节点后,再判断所有树的累积和(所有树的alpha之和)是否大于stage阈值,如果大于阈值则返回1,否则返回负值。返回1,则再进行下一个stage计算,直至所有的stage计算完毕,并且每个累积和都大于每个stage相应的阈值,则cvRunHaarClassifierCascadeSum返回1

这时一个窗口计算完毕,保存此时检测的窗口位置,作为备选,参与后面的聚类过程。

然后平移窗口,重复上述,2,3的步骤,直至窗口移动到图像的右下边界。

四.当所有满足尺寸要求的窗口遍历完毕,并将满足条件的窗口保存完毕后,再对保存的窗口进行聚类,和最小邻域过滤。


这篇关于Hog特征、Haar特征的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/792758

相关文章

OmniGlue论文详解(特征匹配)

OmniGlue论文详解(特征匹配) 摘要1. 引言2. 相关工作2.1. 广义局部特征匹配2.2. 稀疏可学习匹配2.3. 半稠密可学习匹配2.4. 与其他图像表示匹配 3. OmniGlue3.1. 模型概述3.2. OmniGlue 细节3.2.1. 特征提取3.2.2. 利用DINOv2构建图形。3.2.3. 信息传播与新的指导3.2.4. 匹配层和损失函数3.2.5. 与Super

《计算机视觉工程师养成计划》 ·数字图像处理·数字图像处理特征·概述~

1 定义         从哲学角度看:特征是从事物当中抽象出来用于区别其他类别事物的属性集合,图像特征则是从图像中抽取出来用于区别其他类别图像的属性集合。         从获取方式看:图像特征是通过对图像进行测量或借助算法计算得到的一组表达特性集合的向量。 2 认识         有些特征是视觉直观感受到的自然特征,例如亮度、边缘轮廓、纹理、色彩等。         有些特征需要通

HalconDotNet中的图像特征与提取详解

文章目录 简介一、边缘特征提取二、角点特征提取三、区域特征提取四、纹理特征提取五、形状特征提取 简介   图像特征提取是图像处理中的一个重要步骤,用于从图像中提取有意义的特征,以便进行进一步的分析和处理。HalconDotNet提供了多种图像特征提取方法,每种方法都有其特定的应用场景和优缺点。 一、边缘特征提取   边缘特征提取是图像处理中最基本的特征提取方法之一,通过检

WebShell流量特征检测_哥斯拉篇

90后用菜刀,95后用蚁剑,00后用冰蝎和哥斯拉,以phpshell连接为例,本文主要是对后三款经典的webshell管理工具进行流量分析和检测。 什么是一句话木马? 1、定义 顾名思义就是执行恶意指令的木马,通过技术手段上传到指定服务器并可以正常访问,将我们需要服务器执行的命令上传并执行 2、特点 短小精悍,功能强大,隐蔽性非常好 3、举例 php一句话木马用php语言编写的,运行

图特征工程实践指南:从节点中心性到全局拓扑的多尺度特征提取

图结构在多个领域中扮演着重要角色,它能有效地模拟实体间的连接关系,通过从图中提取有意义的特征,可以获得宝贵的信息提升机器学习算法的性能。 本文将介绍如何利用NetworkX在不同层面(节点、边和整体图)提取重要的图特征。 本文将以NetworkX库中提供的Zachary网络作为示例。这个广为人知的数据集代表了一个大学空手道俱乐部的社交网络,是理解图特征提取的理想起点。 我们先定义一些辅助函数

【ML--05】第五课 如何做特征工程和特征选择

一、如何做特征工程? 1.排序特征:基于7W原始数据,对数值特征排序,得到1045维排序特征 2. 离散特征:将排序特征区间化(等值区间化、等量区间化),比如采用等量区间化为1-10,得到1045维离散特征 3. 计数特征:统计每一行中,离散特征1-10的个数,得到10维计数特征 4. 类别特征编码:将93维类别特征用one-hot编码 5. 交叉特征:特征之间两两融合,x+y、x-y、

【机器学习 sklearn】特征筛选feature_selection

特征筛选更加侧重于寻找那些对模型的性能提升较大的少量特征。 继续沿用Titannic数据集,这次试图通过特征刷选来寻找最佳的特征组合,并且达到提高预测准确性的目标。 #coding:utf-8from __future__ import divisionimport sysreload(sys)sys.setdefaultencoding('utf-8')import timest

【python 走进pytotch】pytorch实现用Resnet提取特征

无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂, 而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。人工智能教程 准备一张图片,pytorch可以方便地实现用预训练的网络提取特征。 下面我们用pytorch提取图片采用预训练网络resnet50,提取图片特征。 # -*- coding: utf-8 -*-import os

快手HBase在千亿级用户特征数据分析中的应用与实践

声明:本文的原文是来自Hbase技术社区的一个PPT分享,个人做了整理和提炼。大家注意哈,这种会议PPT类的东西能学习到的更多的是技术方案和他人在实践过程中的经验。希望对大家有帮助。 背景 快手每天产生数百亿用户特征数据,分析师需要在跨30-90天的数千亿特征数据中,任意选择多维度组合(如:城市=北京&性别=男),秒级分析用户行为。针对这一需求, 快手基于HBase自主研发了支持bitmap转

【大数据Java基础-JAVA 面向对象15】面向对象的特征三:多态性

1.多态性的理解:可以理解为一个事物的多种形态。 2.何为多态性: 对象的多态性:父类的引用指向子类的对象(或子类的对象赋给父类的引用) 举例: Person p = new Man(); Object obj = new Date(); 3.多态性的使用:虚拟方法调用 > 有了对象的多态性以后,我们在编译期,只能调用父类中声明的方法,但在运行期,我们实际执行的是子类重写父类的方法。 > 总结