Haar-like特征来龙去脉
Haar-like特征来龙去脉
声明:引用请注明出处http://blog.csdn.net/lg1259156776/
haar-like特征概念
haar-like特征是是计算机视觉领域一种常用的特征描述算子。它最早是由Papageorigiou等人用于人脸描述。目前常用的Haar-like特征可以分为三类:线性特征、边缘特征、点特征(中心特征)、对角线特征。如下图所示

Haar特征(Haar-like features) 是用于物体识别的一种数字图像特征。它们因为与Haar小波转换极为相似而得名,是第一种实时的人脸检测算子。
haar-like特征的特点
Haar特征值反映了图像的灰度变化情况。例如:脸部的一些特征能由矩形特征简单的描述,如:眼睛要比脸颊颜色要深,鼻梁两侧比鼻梁颜色要深,嘴巴比周围颜色要深等。但矩形特征只对一些简单的图形结构,如边缘、线段较敏感,所以只能描述特定走向(水平、垂直、对角)的结构。
通过改变特征模板的大小和位置,可在图像子窗口中穷举出大量的特征。上图的特征模板称为“特征原型”;特征原型在图像子窗口中扩展(平移伸缩)得到的特征称为“矩形特征”;矩形特征的值称为“特征值”。
矩形特征可位于图像任意位置,大小也可以任意改变,所以矩形特征值是矩形模版类别、矩形位置和矩形大小这三个因素的函数。故类别、大小和位置的变化,使得很小的检测窗口含有非常多的矩形特征,如:在24*24像素大小的检测窗口内矩形特征数量可以达到16万个。这样就有两个问题需要解决了:(1)如何快速计算那么多的特征?—积分图;(2)哪些矩形特征才是对分类器分类最有效的?如通过AdaBoost算法来训练。
通过积分图快速计算haar-like特征
这方面的内容比较简单熟悉,不做过多总结。从下图和公式中可以看出:
设D的四个顶点分别为α、β、γ、δ,则D的像素和可以表示为
而Haar-like特征值无非就是两个矩阵像素和的差,同样可以在常数时间内完成。
AdaBoost算法训练人脸分类器
最初的弱分类器可能只是一个最基本的Haar-like特征,计算输入图像的Haar-like特征值,和最初的弱分类器的特征值比较,以此来判断输入图像是不是人脸。这样一个弱分类实际上就是一个decision stump,决策树桩,就是说大于输入特征大于阈值就认为是人脸,小于则认为不是。
AdaBoost算法只需要求每个decision stump有略微比随机猜测要好的概率就行,也就是说略微大于50%。只要保证每个decision stump能够分别照顾不同的方面,也就是说decision stump之间具有差异性。举一个经典的例子如下:
老师问学生什么是苹果,每个同学说一个其它同学没说过的苹果的特点,比如同学A说苹果是圆的(形状特征),同学B说苹果是甜的(口味特征),同学C说苹果大多数是红色的(颜色特征)等等,当有足够多的同学对苹果进行了不同的描述后,这些描述合在一起就能充分的帮助不认识苹果的新同学来认识苹果。
关于AdaBoost的具体算法可以参考我的博文《机器学习技法总结(五)Adaptive Boosting, AdaBoost-Stump,决策树》和《 机器学习技法实现(一):AdaBoost- Decision Stump (AdaBoost - 决策树的基于Matlab的实现)》。
最后得到的实际上是一个决策树,每个树的节点都是一个决策树桩,很简单的弱分类器。关于决策树也可以参看上面的两篇博文,下面是引用维基百科的解释:
“机器学习中,决策树是一个预测模型;他代表的是对象属性与对象值之间的一种映射关系。树中每个节点表示某个对象,而每个分叉路径则代表的某个可能的属性值,而每个叶结点则对应从根节点到该叶节点所经历的路径所表示的对象的值。决策树仅有单一输出,若欲有复数输出,可以建立独立的决策树以处理不同输出。从数据产生决策树的机器学习技术叫做决策树学习,通俗说就是决策树。”(来自《维基百科》)
下面的这张图就是训练完毕的用于人脸检测识别的决策树:

只有通过所有的决策树桩检测的才会被认定为人脸,就好像是只有满足所有同学对苹果的描述特点的东西,新同学才会认为它是苹果。
2015-9-23 艺少
Haar-like特征来龙去脉的更多相关文章
- opencv - haar人脸特征的训练
step 1: 把正样品,负样品,opencv_createsamples,opencv_haartraining放到一个文件夹下面,利于后面的运行.step 2: 生成正负样品的描述文件 正样品描述 ...
- OpenCV开发笔记(五十五):红胖子8分钟带你深入了解Haar、LBP特征以及级联分类器识别过程(图文并茂+浅显易懂+程序源码)
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- 第九节、人脸检测之Haar分类器
人脸检测属于计算机视觉的范畴,早期人们的主要研究方向是人脸识别,即根据人脸来识别人物的身份,后来在复杂背景下的人脸检测需求越来越大,人脸检测也逐渐作为一个单独的研究方向发展起来. 目前人脸检测的方法主 ...
- opencv 61篇
(一)--安装配置.第一个程序 标签: imagebuildincludeinputpathcmd 2011-10-21 16:16 41132人阅读 评论(50) 收藏 举报 分类: OpenCV ...
- 基于MATLAB的adaboost级联形式的人脸检测实现
很早之前就做过一些关于人脸检测和目标检测的课题,一直都没有好好总结出来,趁着这个机会,写个总结,希望所写的内容能给研究同类问题的博友一些见解和启发!!博客里面涉及的公式太繁琐了,直接截图了. 转载请注 ...
- Adaboost 卡口车辆检测训练
之前做了SVM的车脸检测,主要是针对车脸,接下来尝试利用Adaboost和Haar进行车脸的检测.我利用的主要是opencv中的cascade,其已经把Adaboost相关的算法做成了exe,直接调用 ...
- Python学习案例之视频人脸检测识别
前言 上一篇博文与大家分享了简单的图片人脸识别技术,其实在实际应用中,很多是通过视频流的方式进行识别,比如人脸识别通道门禁考勤系统.人脸动态跟踪识别系统等等. 案例 这里我们还是使用 opencv 中 ...
- Python学习案例之人脸检测识别
前言 随着科技的发展,人脸识别技术在许多领域得到的非常广泛的应用,手机支付.银行身份验证.手机人脸解锁等等. 识别 废话少说,这里我们使用 opencv 中自带了 haar人脸特征分类器,利用训练好的 ...
- Python视频人脸检测识别
案例 这里我们还是使用 opencv 中自带了 haar人脸特征分类器,通过读取一段视频来识别其中的人脸. 代码实现: 动图有点花,讲究着看吧: 如果是捕捉摄像头,只需要改变以下代码即可: c ...
随机推荐
- [Angular] Show a Loading Indicator for Lazy Routes in Angular
We can easily code split and lazy load a route in Angular. However when the user then clicks that la ...
- Bootstrap 表单布局示例
<html> <head> <link href="../../dist/css/bootstrap.min.css" rel="style ...
- 【安卓进阶】Product Flavor基础玩法
在安卓项目开发中,大多时候总是有测试环境.生产环境之类的区别,在不使用Product Flavor时,我们一般都是通过手工改动代码来实现测试环境.生产环境的切换. 这样就造成了项目管理上的不便,频繁的 ...
- 记录从裸机到TensorFlow GPU版运行 的配置过程
实验室原来有一台装Ubuntu Server系统的服务器,安装有tensorflow,在使用过程中经常出现断网.死机.自动关机等毛病,忍无可忍,决定重装系统 配置如下:Dell工作站,Xeon-E5 ...
- Laradock Laravel database connection refused
Laradock Laravel database connection refused SHARE Laradock is a PHP development environment which ...
- PHP全栈学习笔记27
数组概述,类型,声明,遍历,输出,获取数组中最后一个元素,删除重复数组,获取数组中指定元素的键值,排序,将数组中的元素合成字符串. 数组概述,数组是存储,管理和操作一组变量. 数组类型为一维数组,二维 ...
- 二分算法题目训练(三)——Anton and Making Potions详解
codeforces734C——Anton and Making Potions详解 Anton and Making Potions 题目描述(google翻译) 安东正在玩一个非常有趣的电脑游戏, ...
- zookeeper 随记
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务. zookeeper的几种模式: 1.单点模式 2.分布式集群模式,节点运行在多台机器 3.单点多实例 在这里只介绍单点多实例安装. ...
- python3编程基础之一:量的表示
计算机的操作最终表现是数据的操纵,为了表示和存储数据,都需要对数据进行引用,计算机可以直接从内存地址实现一步访问数据,但是编程的人却没有这种能力.就像人可能够不到在高处的氢气球,但是可以拉动邦在氢气球 ...
- [APIO2015]八邻旁之桥——非旋转treap
题目链接: [APIO2015]八邻旁之桥 对于$k=1$的情况: 对于起点和终点在同侧的直接计入答案:对于不在同侧的,可以发现答案就是所有点坐标与桥坐标的差之和+起点与终点不在同一侧的人数. 将所有 ...