目录

  • 1. 前言
  • 2. Haar-like特征做检测的基本步骤
  • 3. Haar-like特征
  • 4. 积分图计算原理解析(一目了然)
  • 5. Haar-like特征值计算(积分图应用)

1. 前言

目前人脸检测的方法主要有两大类:基于知识和基于统计。

基于知识的方法:主要利用先验知识将人脸看作器官特征的组合,根据眼睛、眉毛、嘴巴、鼻子等器官的特征以及相互之间的几何位置关系来检测人脸。主要包括模板匹配、人脸特征、形状与边缘、纹理特性、颜色特征等方法。

基于统计的方法:将人脸看作一个整体的模式——二维像素矩阵,从统计的观点通过大量人脸图像样本构造人脸模式空间,根据相似度量来判断人脸是否存在。主要包括主成分分析与特征脸、神经网络方法、支持向量机、隐马尔可夫模型、Adaboost算法等。

2. Haar-like特征做检测的基本步骤

  1. 使用Haar-like特征做检测。
  2. 使用积分图(Integral Image)对Haar-like特征求值进行加速。
  3. 使用AdaBoost算法训练区分人脸和非人脸的强分类器。
  4. 使用筛选式级联把强分类器级联到一起,提高准确率。

3. Haar-like特征

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

    对于图中的A, B和D这类特征,特征数值计算公式为:v=Σ白-Σ黑,而对于C来说,计算公式如下:v=Σ白-2*Σ黑;之所以将黑色区域像素和乘以2,是为了使两种矩形区域中像素数目一致。我们希望当把矩形放到人脸区域计算出来的特征值和放到非人脸区域计算出来的特征值差别越大越好,这样就可以用来区分人脸和非人脸。

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

上图中两个矩形特征,表示出人脸的某些特征。比如中间一幅表示眼睛区域的颜色比脸颊区域的颜色深,右边一幅表示鼻梁两侧比鼻梁的颜色要深。同样,其他目标,如眼睛等,也可以用一些矩形特征来表示。使用特征比单纯地使用像素点具有很大的优越性,并且速度更快。

矩形特征可位于图像任意位置,大小也可以任意改变,所以矩形特征值是矩形模版类别、矩形位置和矩形大小这三个因素的函数。故类别、大小和位置的变化,使得很小的检测窗口含有非常多的矩形特征,如:在24*24像素大小的检测窗口内矩形特征数量可以达到16万个。

这样就有两个问题需要解决了:

  • 如何快速计算那么多的特征?—积分图大显神通;
  • 哪些矩形特征才是对分类器分类最有效的?—如通过AdaBoost算法来训练。

4. 积分图计算原理解析(一目了然)

图像是由一系列的离散像素点组成, 因此图像的积分其实就是求和. 图像积分图中每个点的值是原图像中该点左上角的所有像素值之和.

首先建立一个数组 A 作为积分图像,其宽高与原图像相等. 然后对这个数组赋值,每个点存储的是该点与图像原点所构成的矩形中所有像素的和:

为了更好地说明这个等式,下面我用几幅图来说明:

图1.坐标(x,y)处在原图像中示例

图2.坐标(x,y-1)处的积分图像SAT(x,y-1)示例

图3.坐标(x-1,y)处的积分图像SAT(x-1,y)示例

图4.坐标(x-1,y-1)处的积分图像SAT(x-1,y-1)示例

可以看到,**SAT(x,y−1)+SAT(x,y−1)后,有一部分重合的区域,即 SAT(x−1,y−1),所以需减掉,最后还需要将当前坐标(x,y)的像素值I(x,y)**包含进来。

定义了积分图的概念,就可以很方便的计算任意区域内的像素和,如下图所示:


积分图数组初始化之后, 我们就得到了一张积分图:

  • 点1的积分 SAT1=Sum(Ra),
    点2的积分 SAT2=Sum(Ra)+Sum(Rb),
    点3的积分 SAT3=Sum(Ra)+Sum(Rc),
    点4的积分SAT4=Sum(Ra)+Sum(Rb)+Sum(Rc)+Sum(Rd)

那么为了计算某个矩形像素和,比如区域 Rd 内所有点的像素值之和(积分)可以表示为:

所有点的像素值之和(积分)可以表示为:

  • Sum(Rd)=SAT1+SAT4−SAT2−SAT3

所以无论矩形的尺寸大小,只需查找积分图像 4 次就可以快速计算任意矩形内像素值的和, 即算法复杂度为 O(4)。

5. Haar-like特征值计算(积分图应用)

以如下一种 Haar-like 边缘特征为例

假设需要计算的这种 Haar-like 特征在图中的位置如下所示:

那么,A,B区域所构成的 Haar-like 边缘特征是:

  • HarrA−B=Sum(A)−Sum(B)=[SAT4+SAT1−SAT2−SAT3]−[SAT6+SAT3−SAT4−SAT5]

显然,对一个灰度图而言,事先将其积分图构建好,当需要计算灰度图某个区域内所有像素点的像素值之和的时候,利用积分图,通过查表运算,可以迅速得到结果。

Haar-like特征计算和积分图详解相关推荐

  1. python二维图颜色函数_Python绘图之二维图与三维图详解

    各位工程师累了吗? 推荐一篇可以让你技术能力达到出神入化的网站"持久男" 1.二维绘图 a. 一维数据集 用 Numpy ndarray 作为数据传入 ply 1. import ...

  2. (20)目标检测算法之YOLOv5计算预选框、详解anchor计算

    目标检测算法之YOLOv5计算预选框.详解anchor计算 单节段目标检测算法中:预选框的设定直接影响最终的检测精度 众所周知,yolov5中采用自适应调整预选框anchor的大小,但万事开头难,配置 ...

  3. 36 张图详解应用层协议:网络世界的最强王者

    上帝视角 应用层 我们前面介绍过 TCP/IP 模型的下三层,分别是网络接入层.网络层和传输层.它们都是为应用层服务的,传输应用层的各种数据,现在我们就来看看最高层的应用层. 应用层 在 TCP/IP ...

  4. python变量命名规则思维导图_Python思维导图详解

    Python思维导图 Python思维导图详解 第一阶段:学习Python基础语法,主要学习变量的使用以及类型.变量的计算和输入输出.变量的命名.运算符.if判断语句.while循环语句.字符串.常量 ...

  5. python中backward_pytorch的梯度计算以及backward方法详解

    基础知识 tensors: tensor在pytorch里面是一个n维数组.我们可以通过指定参数reuqires_grad=True来建立一个反向传播图,从而能够计算梯度.在pytorch中一般叫做d ...

  6. UML(Unified Modeling Language)统一建模语言--类图详解

    UML(Unified Modeling Language)统一建模语言--类图详解   2010-05-12 作者:fenglin1985 来源:fenglin1985的blog   类图是面向对象 ...

  7. K线图的看法实图详解

    K线图的看法实图详解 K线图最早是日本德川幕府时代大阪的米商用来记录当时一天.一周或一月中米价涨跌行情的图示法,后被引入股市. K线图有直观.立体感强.携带信息量大的特点,蕴涵着丰富的东方哲学思想,能 ...

  8. OpenCV实战(10)——积分图像详解

    OpenCV实战(10)--积分图像详解 0. 前言 1. 积分图像计算 2. 自适应阈值 2.1 固定阈值的缺陷 2.2 使用自适应阈值 2.3 其它自适应阈值计算方法 2.4 完整代码 3. 使用 ...

  9. 71张图详解IP地址、IP 路由、三层转发、ARP、ICMP

    71张图详解IP地址.IP 路由.三层转发.ARP.ICMP 架构师之道2021-04-07 13:51:24 https://www.toutiao.com/i6948285918986027531 ...

最新文章

  1. wpf异形按钮,定制异型按钮在WPF
  2. 浅谈PHP在各系统平台下的换行符
  3. 【线上分享】沉浸式视频传输
  4. PrimeTime指南——合理设置约束
  5. 论文页眉奇偶页不同怎么设置_还在愁毕业论文的页眉页脚吗?
  6. ZZULIOJ 1123: 最佳校友
  7. 问题 K: A+B Problem (III) : Input/Output Practice 山东科技大学OJ c语言
  8. 【数据结构与算法基础】线性表
  9. linux服务器操作系统
  10. 英文论文的proposal怎么写?
  11. Mac -- 插入移动硬盘后没有显示
  12. PHP修改图片像素大小
  13. PHP解析SOAP生成的xml
  14. CentOS命令行模式下设置屏幕常亮----没有达到预期效果
  15. js爬取今日头条头条号的文章
  16. Cluster analysis :Basic Concepts and Algorithms -- Part 1 Overview
  17. Win7-64 重装 Anaconda3
  18. 深度学习---从入门到放弃(九)RNN入门
  19. 染书CRMA|一个贴身的智慧校园
  20. 部分mp4视频在ios上无法播放问题

热门文章

  1. JS异步:执行原理与回调
  2. firefox浏览器window.event is undefined问题
  3. 微信小程序wxml如何判断字符串中汉语某字符_微信小程序开发经典案例解析“嗨兔儿”...
  4. 坚持自己的坚持,以不二的姿态坚持到底
  5. 解锁教爸妈使用智能手机的新方法!
  6. 为什么别人的移动开发效率是你的2倍?丨课程推广
  7. yocs_velocity_smoother速度平滑库知识
  8. Leetcode #765 情侣牵手(贪心算法)
  9. 数独算法-递归与回溯
  10. (附源码)ssm 座位管理系统 毕业设计 250858