Haar分类器

  • 前言
  • 1. 理论
    • 1.1 Haar-like特征
    • 1.2 积分图
    • 1.3 AdaBoost算法
    • 1.4 筛选式级联
  • 2. 代码(人脸检测)

前言

  • 以前的人脸检测都是基于像素,基于统计学的概念进行研究。有了Haar之后,人脸检测分类器才出现,准确率也得到了提高。
  • Haar分类器 = Haar-like小波特征 + 积分图方法 + AdaBoost +级联
  • Haar分类器算法的要点如下:
  1. 使用Haar-like特征做检测。
  2. 使用积分图(Integral Image)对Haar-like特征求值进行加速。
  3. 使用AdaBoost算法训练区分人脸和非人脸的强分类器。
  4. 使用筛选式级联把强分类器级联到一起,提高准确率。

1. 理论

1.1 Haar-like特征

  • 以上是Haar-like特征定义的特征结构。可以将它们理解成为一个窗口,这个窗口将在图像中做步长为1的滑动,最终遍历整个图像。
  • 比较特殊的一点是,当一次遍历结束后,窗口将在宽度或长度上成比例的放大,再重复之前遍历的步骤,直到放大到最后一个比例后结束。
  • Haar-like特征提取过程就是利用上面定义的窗口在图像中滑动,滑动到一个位置的时候,将窗口覆盖住的区域中的白色位置对应的像素值的和减去黑色位置对应的像素值的和,得到的一个数值就是haar特征中一个维度。

1.2 积分图

  • 积分图的方法能快速计算Haar特征。
  • 积分图是类似动态规划的方法,主要的思想是将图像从起点开始到各个点所形成的矩形区域像素之存在数组中,当要计算某个区域的像素和时可以直接从数组中索引,不需要重新计算这个区域的像素和,从而加快了计算。

    分两步计算:
  1. 规定任意点的像素值(x,y)代表其左上角的所有像素的总值,见左图所示。
  2. 当求任意区域的像素和时,只要通过加减运算即可,见右图所示。
  3. 积分图就能快速计算Haar-like特征定义的特征结构,然而特征值往往分布范围很广,所以需要压缩特征值范围,使用“归一化”手段。之后使用归一化的特征值与阈值对比。

1.3 AdaBoost算法

整个Adaboost 迭代算法就3步:

  • 初始化训练数据的权值分布。如果有N个样本,则每一个训练样本最开始时都被赋予相同的权值:1/N。
  • 训练弱分类器。具体训练过程中,如果某个样本点已经被准确地分类,那么在构造下一个训练集中,它的权值就被降低;相反,如果某个样本点没有被准确地分类,那么它的权值就得到提高。然后,权值更新过的样本集被用于训练下一个分类器,整个训练过程如此迭代地进行下去。
  • 将各个训练得到的弱分类器组合成强分类器。各个弱分类器的训练过程结束后,加大分类误差率小的弱分类器的权重,使其在最终的分类函数中起着较大的决定作用,而降低分类误差率大的弱分类器的权重,使其在最终的分类函数中起着较小的决定作用。换言之,误差率低的弱分类器在最终分类器中占的权重较大,否则较小。

1.4 筛选式级联

由弱分类器“并联”组成强分类器,而由强分类器“串联”组成级联分类器。

2. 代码(人脸检测)

import cv2
import numpy as np#静态图像中的人脸检测
def StaticDetect(filename):#创建一个级联分类器 加载一个 .xml 分类器文件. 它既可以是Haar特征也可以是LBP特征的分类器.face_cascade = cv2.CascadeClassifier('F:/03-opencv_install/sources/data/haarcascades/haarcascade_frontalface_default.xml')#加载图像img = cv2.imread(filename)#转换为灰度图gray_img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#进行人脸检测,传入scaleFactor,minNegihbors,分别表示人脸检测过程中每次迭代时图像的压缩率以及#每个人脸矩形保留近似数目的最小值#返回人脸矩形数组faces = face_cascade.detectMultiScale(gray_img,1.3,5)for (x,y,w,h) in faces:#在原图像上绘制矩形img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)cv2.namedWindow('Face Detected!')cv2.imshow('Face Detected!',img)cv2.waitKey(0)cv2.destroyAllWindows()if __name__=='__main__':filename = 'D:/python_opencv/people.jpg'StaticDetect(filename)


注意:需要修改的是face_cascade = cv2.CascadeClassifier('F:/03-opencv_install/sources/data/haarcascades/haarcascade_frontalface_default.xml'),这个目录可通过everything搜索haarcascade_frontalface_default.xml的位置,然后筛选data目录下的即可。

【理论篇】Haar特征描述算子相关推荐

  1. Haar特征描述算子-人脸检测

    Haar特征描述算子-人脸检测 详细资料 3.1简介 Haar-like特征最早是由Papageorgiou等应用于人脸表示,在2001年,Viola和Jones两位大牛发表了经典的<Rapid ...

  2. CV之Haar特征描述算子-人脸检测

    3.1简介 Haar-like特征最早是由Papageorgiou等应用于人脸表示,在2001年,Viola和Jones两位大牛发表了经典的<Rapid Object Detection usi ...

  3. opencv roberts算子_图像之HOG特征描述算子-行人检测

    4.1 简介 本次任务将学习一种在深度学习之前非常流行的图像特征提取技术--方向梯度直方图(Histogram of Oriented Gradients),简称HOG特征.HOG特征是在2005年C ...

  4. CV之 HOG特征描述算子-行人检测

    4.1 简介 本次任务将学习一种在深度学习之前非常流行的图像特征提取技术--方向梯度直方图(Histogram of Oriented Gradients),简称HOG特征.HOG特征是在2005年C ...

  5. CV之LBP特征描述算子-人脸检测

    2.1 简介 LBP指局部二值模式(Local Binary Pattern),是一种用来描述图像局部特征的算子,具有灰度不变性和旋转不变性等显著优点.LBP常应用于人脸识别和目标检测中,在OpenC ...

  6. lbp特征提取算法 知乎_图像-LBP特征描述算子-人脸检测

    2.1 简介 LBP指局部二值模式(Local Binary Pattern),是一种用来描述图像局部特征的算子,具有灰度不变性和旋转不变性等显著优点.LBP常应用于人脸识别和目标检测中,在OpenC ...

  7. lbp特征提取算法 知乎_计算机视觉基础-图像处理: LBP特征描述算子

    1 简介 LBP指局部二值模式(Local Binary Pattern),是一种用来描述图像局部特征的算子,具有灰度不变性和旋转不变性等显著优点.LBP常应用于人脸识别和目标检测中,在OpenCV中 ...

  8. 计算机视觉大型攻略 —— 特征与匹配(3)特征描述符

    接上一篇文章.这篇写特征描述符.特征匹配算法在确定角点后,还需要使用描述符来描述这些角点. 本文参考书籍:Computer Vision: Algorithms and Applications, R ...

  9. PCL代码经典赏析七:PCL 点云特征描述与提取

    文章目录 更新:2019年8月 说明 目录索引 PCL 点云特征描述与提取 PCL 描述三维特征相关基础 PCL 法线估计实例 ------ 估计某一点的表面法线 PCL 法线估计实例 ------ ...

最新文章

  1. Centos安装g++错误 :No package g++ available
  2. 转:读AD里特殊的属性in C#
  3. 【明星自动大变脸】最新StarGAN对抗生成网络实现多领域图像变换(附代码)
  4. AUTOSAR解决方案 — INTEWORK-EAS-CP
  5. nodejs项目的package-lock.json文件的用途
  6. 多边形对角线条数(C语言)
  7. java js获取css方法_5种JavaScript和CSS交互的方法
  8. C#LeetCode刷题之#349-两个数组的交集(Intersection of Two Arrays)
  9. 二维ising模型概率c语言_盘点近几年在二维材料中发现的铁磁性
  10. coco 数据集_PyTorch版YOLOv4更新了,适用于自定义数据集
  11. VC学习笔记:状态栏
  12. SAP系统环境整体架构设计总结
  13. 选择比努力重要,与谁同行比要去的远方重要
  14. 相控阵天线(十一):阵列天线有源驻波分析
  15. 第七章 浮动(制作京东登录页面)
  16. java计算机毕业设计Web网上购书后台管理系统MyBatis+系统+LW文档+源码+调试部署
  17. 你还不知道钉钉服务端API全局错误码吗?
  18. [转]用天文方法计算日月合朔(新月)
  19. 计算机信息与科学学院青协,武汉东湖学院计算机科学学院青年志愿者协会
  20. Java+Rest-Assrued+Gradle+Allure搭建接口测试自动化框架

热门文章

  1. Mac新手必看教程—让你离熟练操作mac只差十分钟
  2. 中移动内部 无线信号测试软件,- 移动网无线信号质量监测系统[图]
  3. Windows10的Ubuntu子系统开启桌面环境
  4. sysctl优化linux网络
  5. 视频教程-15年经验大厂HR亲授:程序员必备简历面试课-招聘/面试
  6. 义乌个体户可以收美金安全吗?
  7. 华为内部的Web安全原则笔记
  8. DYD 女儿产量离差 什么鬼
  9. 流体控制阀的原理和分类
  10. postgresql自定义函数实现,通过contrib模块进行扩展