opencv级联分类器原理解析

目录
  • 一、人脸检测算法分类
  • 二、Haar分类器算法
    • 2.1 人脸检测的大概流程
    • 2.2 Haar-like特征
    • 2.3 Adaboost算法
    • 2.4 弱分类器的构建
    • 2.5 强分类器的构造

一、人脸检测算法分类

目前人脸检测方法主要分为两大类,基于知识和基于统计。

基于知识的人脸检测方法主要包括:模板匹配,人脸特征,形状与边缘,纹理特征,颜色特征。

基于统计的人脸检测方法主要包括:主成分分析与特征脸法,神经网络模型,隐马尔可夫模型,支持向量机,Adaboost算法。

基于知识的方法将人脸看成不同特征的特定组合,即通过人脸的眼睛、嘴巴、鼻子、耳朵等特征及其组合关系来检测人脸。

基于统计的方法将人脸看成统一的二维像素矩阵,通过大量的样本构建人脸子空间,通过相似度的大小来判断人脸是否存在。

二、Haar分类器算法

本文介绍的Haar分类器方法,包含了Adaboost算法。

Haar算法实际上是运用了boosting算法中的Adaboost算法。Haar分类器利用Adaboost算法构建一个强分类器进行级联,而在底层特征抽取上采用的是高校的矩形特征以及积分图方法。

Haar分类器=类Haar特征+积分图法+Adaboost算法+级联。

Haar分类器主要步骤如下:1. 提取类Haar特征;2. 利用积分图法对类Haar特征提取进行加速;3. 使用Adaboost算法训练强分类器,区分出人脸和非人脸;4. 使用筛选式级联把强的分类器级联在一起,从而提高检测准确度。

2.1 人脸检测的大概流程

我们用一个小的窗口在一幅图片中不断的滑动,每滑动到一个位置,就对该小窗口内的图像进行特征提取,若提取到的特征通过了所有训练好的强分类器的判定,则我们判定该小窗口的图片内含有人脸。

2.2 Haar-like特征

Viola牛们提出的Haar-like特征如下:

将Haar-like特征在图片上进行滑动,在每个位置计算白色区域对应的像素值的和减去黑色区域对应的像素值的和,从而提取出该位置的特征,人脸区域与非人脸区域提取出的特征值不同,从而区分出人脸区域和非人脸区域。

我们可以用多个矩形特征计算得到一个区分度更大的特征值,从而增加人脸区域和非人脸区域的区分度。那么该怎么组合这些矩形特征才能得到更好的区分度呢?Adaboost算法就是用来解决这个问题的。

2.3 Adaboost算法

Adaboost算法是一种一般性的分类器性能提升算法,不仅仅是限定于一种算法。Adaboost算法可以用来更好地选择矩形特征的组合,而这些矩形特征的组合就构成了分类器,分类器以决策树的方式存储这些矩形特征组合。

Adaboost是基于boosting算法的,而boosting算法涉及到弱分类器和强分类器的概念。弱分类器是基于弱学习的,其分类正确率较低,但是较容易获得,强分类器是基于强学习,其分类正确率较高,但是较难获得。Kearns和Valiant两个大神提出弱学习和强学习是等价的,并且证明只要样本充足,弱学习可以通过一定的组合获得任意精度的强学习。这个证明为boostting算法提供了理论基础,使其成为一个能够提高分类器性能的一般性方法。而boosting算法主要存在两个问题,一个是它需要预先知道弱分类器的误差,另一个是它在训练后期会专注于几个难以分类的样本,因此会变得不稳定。针对这些问题,后来Freund和Schapire提出了实际可行的Adaboost算法。

2.4 弱分类器的构建

我们可以用决策树来构建一个简单的弱分类器, 将提取到的特征与分类器的特征进行逐个比较,从而判断该特征是否属于人脸,如下图所示:

该分类器的重点在于阈值的设定。阈值的设定方法如下:

(1)对于每个分类器计算训练样本的特征值;

(2)对这些特征值进行排序;

(3)计算所有属于人脸的样本的特征值的和t1和所有属于非人脸的样本的特征值的和t0;

(4)计算第i个样本前所有属于人脸的样本的特征值的和s1is1i和属于非人脸的样本的特征值的和s0is0i;

(5)计算r=min((s1+(t0i−s0i)),s0+(t1i−s1i))r=min((s1+(t0i−s0i)),s0+(t1i−s1i))。

计算得到的最小的rr值即为所求阈值。有了阈值,我们便用决策树构成了一个简单的弱分类器,如下所示:

其中x子图像窗口,f是特征,p的作用是控制不等号方向,使得不等号都为"<",θθ是阈值。

2.5 强分类器的构造

这个部分我还是似懂非懂。按照我的理解,强分类为的构造是这样的:(1)首先选出部分样本,给它们赋予权重1/N,其中N为总的样本的个数;(2)用选出的样本训练弱分类器;(3)提高错误分类的样本的权重,并舍弃正确分类的样本,加入新的样本,新的样本的权重还是之前的1/N,进行新一轮的弱分类器的训练;(4)经过T轮后,训练出T个弱分类器;(5)将这T个弱分类器根据他们的分类错误率加权求和构成一个强的分类器,如下所示:

其中αtαt是第t个弱分类器的权重,βtβt是第t个弱分类器的错误率。强分类器相当于先让各个弱分类器进行投票,然后让投票结果根据各弱分类器的错误率进行加权相加,最后与平均的投票结果进行比较得到最终结果。

Reference:

https://www.jb51.net/article/222465.htm

(0)

相关推荐

  • python目标检测基于opencv实现目标追踪示例

    目录 主要代码 信息封装类 更新utils python-opencv3.0新增了一些比较有用的追踪器算法,这里根据官网示例写了一个追踪器类 程序只能运行在安装有opencv3.0以上版本和对应的contrib模块的python解释器 主要代码 #encoding=utf-8 import cv2 from items import MessageItem import time import numpy as np ''' 监视者模块,负责入侵检测,目标跟踪 ''' class WatchDo

  • 深入解析opencv骨架提取的算法步骤

    目录 前言 一.算法步骤 1.算法步骤 2.分析 二.代码实现 1.预处理 2. 骨架提取实现 前言 个人感觉骨架提取提取的就是开运算过程的不可逆. 一.算法步骤 1.算法步骤 首先上一下比较官方的算法步骤: 1.获得原图像的首地址及图像的宽和高,并设置循环标志1 2.用结构元素腐蚀原图像,并保存腐蚀结果 3.设置循环标志为0,如果腐蚀结果中有一个点为255,即原图像尚未被完全腐蚀成空集,则将循环标志设为1. 4.用结构元素对腐蚀后的图像进行开运算(消除小的白色区域),并求取腐蚀运算与开运算的差

  • OpenCV停车场车位实时检测项目实践

    目录 1. 写在前面 2. 整体流程梳理 3. 数据预处理 3.1 背景过滤 3.2 Canny边缘检测 3.3 停车场区域提取 3.4 霍夫变换检测直线 3.5 以列为单位,划分停车位 3.6 锁定每个停车位 3.7 为CNN生成预测图片 4. 模型的训练和预测 4.1 模型训练 4.2 模型预测 5. 小结 1. 写在前面 今天整理OpenCV入门的第三个实战小项目,前面的两篇文章整理了信用卡数字识别以及文档OCR扫描, 大部分用到的是OpenCV里面的基础图像预处理技术,比如轮廓检测,边缘

  • OpenCV NAO机器人辅助捡球丢球流程分析

    目录 1. 概述 2. 相关技术 2.1 NAO机器人 2.2 Choregraphe 3. 总体设计与详细设计 3.1 系统模块划分 3.2 主要功能模块 4 视频展示 1. 概述 NAO机器人身高58cm,体重5.4kg.主要硬件包括CPU.主板.扬声器.话筒.红外线.相机.超声波(声呐).传感器.电机.语音合成器.陀螺仪等.实验室中NAO机器人的型号为NAOH25,其构造如下: NAO机器人的操作系统为Gentoo Linux,它支持Windows.Linux.Mac OS等操作系统的远程

  • C++使用opencv调用级联分类器来识别目标物体的详细流程

    目录 前言: 流程讲解: 1.创建一个级联分类器对象 2.创建一个视频流 3.将传入的视频帧转换为灰度图 4.将多余的空通道进行压缩 5.直方图均衡化 6.调用级联分类器,并将内容框出,然后将此帧显示出来 总结 使用编译器:Qt Creator 4.2.1 前言: 相较于帧差法捕捉目标物体识别,级联分类器识别目标物体更加具有针对性,使用前者只要是动的物体都会被捕捉识别到,画面里有一点风吹草动,都会被捕捉识别下来,如果我想识别具体的人或者物,都无法做到精准的目标识别,所以有了级联分类器识别(即模型

  • opencv级联分类器原理解析

    目录 一.人脸检测算法分类 二.Haar分类器算法 2.1 人脸检测的大概流程 2.2 Haar-like特征 2.3 Adaboost算法 2.4 弱分类器的构建 2.5 强分类器的构造 一.人脸检测算法分类 目前人脸检测方法主要分为两大类,基于知识和基于统计. 基于知识的人脸检测方法主要包括:模板匹配,人脸特征,形状与边缘,纹理特征,颜色特征. 基于统计的人脸检测方法主要包括:主成分分析与特征脸法,神经网络模型,隐马尔可夫模型,支持向量机,Adaboost算法. 基于知识的方法将人脸看成不同

  • python通过opencv实现图片裁剪原理解析

    这篇文章主要介绍了python通过opencv实现图片裁剪原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 图像裁剪的基本概念 : 图像裁剪是指将图像中我们想要的研究区以外的区域去除,经常是按照行政区划或研究区域的边界对图像进行裁剪.例如,一张500×400的图像,我们只想要中间的250×200的区域,就可以使用图像裁剪将四周的区域去除. 在实际开发工作中,我们经常需要对图像进行分幅裁剪,按照ERDAS实际图像分幅裁剪的过程,可以将图像分

  • Python+OpenCV人脸检测原理及示例详解

    关于opencv OpenCV 是 Intel 开源计算机视觉库 (Computer Version) .它由一系列 C 函数和少量 C++ 类构成,实现了图像处理和计算机视觉方面的很多通用算法. OpenCV 拥有包括 300 多个 C 函数的跨平台的中.高层 API .它不依赖于其它的外部库 -- 尽管也可以使用某些外部库. OpenCV 对非商业应用和商业应用都是免费 的.同时 OpenCV 提供了对硬件的访问,可以直接访问摄像头,并且 opencv 还提供了一个简单的 GUI(graph

  • Java 并发编程:volatile的使用及其原理解析

    Java并发编程系列[未完]: •Java 并发编程:核心理论 •Java并发编程:Synchronized及其实现原理 •Java并发编程:Synchronized底层优化(轻量级锁.偏向锁) •Java 并发编程:线程间的协作(wait/notify/sleep/yield/join) •Java 并发编程:volatile的使用及其原理 一.volatile的作用 在<Java并发编程:核心理论>一文中,我们已经提到过可见性.有序性及原子性问题,通常情况下我们可以通过Synchroniz

  • Java 8 动态类型语言Lambda表达式实现原理解析

    Java 8支持动态语言,看到了很酷的Lambda表达式,对一直以静态类型语言自居的Java,让人看到了Java虚拟机可以支持动态语言的目标. import java.util.function.Consumer; public class Lambda { public static void main(String[] args) { Consumer<String> c = s -> System.out.println(s); c.accept("hello lambd

  • asp防止上传图片木马原理解析

    首先判断文件大小: if file.filesize<10 then Response.Write("<script>alert('您没有选择上传文件')</script>") Response.Write("<script>history.go(-1)</script>") Response.End() end if 将文件上传到服务器后,判断用户文件中的危险操作字符: set MyFile = server.

  • Android中微信抢红包插件原理解析及开发思路

    一.前言 自从去年中微信添加抢红包的功能,微信的电商之旅算是正式开始正式火爆起来.但是作为Android开发者来说,我们在抢红包的同时意识到了很多问题,就是手动去抢红包的速度慢了,当然这些有很多原因导致了.或许是网络的原因,而且这个也是最大的原因.但是其他的不可忽略的因素也是要考虑到进去的,比如在手机充电锁屏的时候,我们并不知道有人已经开始发红包了,那么这时候也是让我们丧失了一大批红包的原因.那么关于网络的问题,我们开发者可能用相关技术无法解决(当然在Google和Facebook看来的话,他们

  • JavaScript中的return布尔值的用法和原理解析

    首先return作为返回关键字,他有以下两种返回方式 1.返回控制与函数结果 语法为:return 表达式; 语句结束函数执行,返回调用函数,而且把表达式的值作为函数的结果 2.返回控制无函数结果 语法为:return;在大多数情况下,为事件处理函数返回false,可以防止默认的事件行为.例如,默认情况下点击一个<A>元素,页面会跳转到该元素href属性指定的页. 例如:<a href="http:www.baidu.com;alert(11);return false;ale

  • 使用BootStrap实现标签切换原理解析

    原理解析 1.定义一无序列表.取id值为myTab. 2.定义列表中a标签的目标地址为我们要展示的div对应的id 3.为a标签注册对应的事件(就是js的代码) 效果如图 代码如下 html代码部分 <ul id="myTab" class="nav nav-tabs"> <li role="presentation" class="active"><a href="#home"

随机推荐