opencv 基于haar特征的级联分类器实现图象识别原理

这篇具有很好参考价值的文章主要介绍了opencv 基于haar特征的级联分类器实现图象识别原理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

暑假的时候做了一个智能机械臂,用到了opencv里的级联分类器,这里写一下我的理解

级联分类器上手简单,同时Haar特征支持一些特殊图形的检测,例如人脸,我训练的是一个纯色模型,效果并不好,不建议用该种方法识别一些颜色梯度变化不明显的物体

(1)haar特征   

opencv 基于haar特征的级联分类器实现图象识别原理

图片展示了最基本的几类haar特征,每种其实都有相应的变式,图中黑:白等于1:1,

opencv 基于haar特征的级联分类器实现图象识别原理

 这种也是一种haar特征。

每个haar特征都对应一个特征值,相当于对图像以某点展开一个矩形对图像进行卷积操作(haar特征中的黑只是表达与白相反体现的是一种色差变化)

对于一个haar特征 j 求其特征值的操作为 

f(j)= 白色像素和 *白色像素权重 - 黑色像素和 * 黑色像素权重

因为一个haar 特征里黑色像素与白色像素数量不一定相等所以要成一个权重

,再次说明一下黑色像素在原图中不一定为黑,而在这个点上的特征值让他表现为黑色一方而已

求特征值的操作类似与一个卷积操作。

特征值产生的数据非常巨大,opencv里介绍了一种一种归一化操作

opencv 基于haar特征的级联分类器实现图象识别原理

 这里是我引用资料上的不多叙述,是为了让数据小一些

(2)积分图

opencv 基于haar特征的级联分类器实现图象识别原理

 如图对于一个图片其haar特征数量是巨大的,仅左上角一个点都可以产生大量haar特征计算矩阵(可放缩)

满足(s, t)条件的矩形称为条件矩形:

(1) x 方向边长必须能被自然数 s 整除(能均等分成 s 段)

(2) y 方向边长必须能被自然数 t 整除(能均等分成 t 段)

opencv 基于haar特征的级联分类器实现图象识别原理

opencv 基于haar特征的级联分类器实现图象识别原理

 这个很好理解将左边的【m/s】.....依次乘右边的引子相当于不同的haar特征表示

一个24*24图像仅最简单的特征模板,特征值数量为 (24+23+22+...+1)*(12+11+...+1)=43200

如果每次都一个一个的取像素进行计算,计算量非常巨大,

积分图是一种将这种计算简化的方法

积分图的定义为:将一个点左上角的像素相加取代该像素

f(x,y)=i(x,y)+ f(x-1,y)+f(x,y-1)-f(x-1,y-1) 

opencv 基于haar特征的级联分类器实现图象识别原理

i 为原图

因为 f(x-1,y)+f(x,y-1)对左上角所有像素累加了两遍,所以要减一个f(x-1,y-1) 

积分图是如何简化计算的呢

比如一个haar特征opencv 基于haar特征的级联分类器实现图象识别原理

其特征值等于矩阵右侧所有像素减左侧像素

opencv 基于haar特征的级联分类器实现图象识别原理

那么一个特征矩阵内的像素信息 可有矩阵端点积分图获得,对于一个图片计算一次积分图可以避免大量重复运算

以上是级联分类器的识别基础,下面是级联分类器是如何构建的

opencv采用了AdaBoost学习算法 ,整个级联分类器是一个决策树结构

opencv 基于haar特征的级联分类器实现图象识别原理

对于强分类器,我找到了两种说法

(1)强分类器是若干个弱分类器的线性组合

(2)强分类器有多个并联的弱分类器组成

这两种说法本质一样

(3.1)弱分类器

h(x,f,p,q)={1 (  p *f(x) < p *q) ,0(otherwise)}

这是一个弱分类器的组成

x为待检测图像,f为一特定haar特征,p 让不等号方向保持一致  ,q为阈值

这里说一下我的理解,有的特征是大于阈值判断为是检测物体,有的则要小于,p分两种情况取正负一

阈值的获取:

对于一特定haar特征,将所有样本的特征值按大小排列

设某特征值 f(j) ,

其前面的特征值中 正样本的比例记为S +

其前面的特征值中 负样本的比例记为S -

所有训练样本中正样本的比例记为T+

负样本的比例记为T-

分类误差r=min{(S+) +(T- )-(S-) ,(S-)+(T+)-(S+)}

遍历所有特征值找到当前haar特征下分类误差最小的特征值作为阈值p

一个图片的haar特征非常多,而一个弱分类器的训练就是找的一个haar特征,他的分类误差小,用这个特征能够区分出人脸or非人脸,在为多个haar特征找阈值的同时,选择分类误差最小的haar特征作为弱分类器

(4.1--对应3.1弱分类器的强分类器)

opencv 基于haar特征的级联分类器实现图象识别原理

opencv 基于haar特征的级联分类器实现图象识别原理

就是在循环过程中改变不同弱分类器权重,让多个弱分类器投票表决,最终形成一个强分类器 

(3.2弱分类器其二)

h(x,f,p,q)={1 (  p *f(x) < p *q) ,0(otherwise)}

这个定义是一样的和3.1,不一样的是多了 leftvalue 和rightvalue,阈值的选取方法也不同

opencv 基于haar特征的级联分类器实现图象识别原理

训练完一个弱分类器后更新权重

 opencv 基于haar特征的级联分类器实现图象识别原理

 对numPos+numNeg个权重按照如下公式更新权重(注意更新后需要对权重进行归一化)

opencv 基于haar特征的级联分类器实现图象识别原理

(4.2--对应3.2的强分类器)

一个强分类器的结构如图

opencv 基于haar特征的级联分类器实现图象识别原理

以左图为例,第一个弱分类器判断阈值,小于则向下进行,大于输出该级的rightvalue

在检测目标时, 每个弱分类器独立运行并输出cascadeLeaves[leafOfs - idx]值,然后把当前强分类器中每一个弱
分类器的输出值相加 ,即:
sum += cascadeLeaves[leafOfs - idx]
之后与本级强分类器的stageThreshold阈值对 比, 当且仅当结果sum>stageThreshold时,认
为当前检测窗口通过了该级强分类器 。当前检测 窗口通过所有强分类器时,才被认为是一个检测
目标。 可以看出, 强分类器与弱分类器结构不同,是一 种类似于“并联”的结构,称其为“并联组成的 强分类器”。
 

强分类器阈值计算

与4.1一样是一个循环过程

1,使用当前的stage中已经训练好的弱分类器去检测样本中的每一正样本,计算弱分类器输出值之和保存在eval中。
2,对eval升序排序
3,以eval[thresholdIdx]作为stage阈值stageThreshold,显然正样本越多估计的stageThreshold越准确。
整个过程:

1,寻找正负样本作为训练样本
2,计算每个Haar特征在当前权重下的阈值+leftvalue+rightvalue,组成了一个个弱分类器
3,通过WSE寻找最优的弱分类器(看不懂就是找错误率最小的若分类器)
4,更新权重(在下一个若分类器训练过程加重对上一个弱分类器判断错误的权重)
5,按照minHitRate估计stageThreshold
(-minhitrate每个阶段分类器需要的最小的命中率,总的命中率为min_hit_rate的number_of_stages次方)
6,重复上述1-5步骤,直到falseAlarmRate到达要求,或弱分类器数量足够。 停止循环,输出stage。
7,进入下一个stage训练

opencv 基于haar特征的级联分类器实现图象识别原理

虽然是整理的,希望对你有帮助

原文1:(7条消息) Adaboost 人脸检测:Haar特征及积分图、分类器的级联_あずにゃん的博客-CSDN博客_adaboost图像分类 原文2:第九节、人脸检测之Haar分类器 - 大奥特曼打小怪兽 - 博客园 (cnblogs.com)文章来源地址https://www.toymoban.com/news/detail-472258.html

到了这里,关于opencv 基于haar特征的级联分类器实现图象识别原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【youcans 的 OpenCV 学习课】22. Haar 级联分类器

    专栏地址:『youcans 的图像处理学习课』 文章目录:『youcans 的图像处理学习课 - 总目录』 Haar 特征分类器是基于 Haar-like 特征提取的监督学习分类器。我们首先讨论 Haar 特征及其加速计算。 3.1 Haar 特征 Haar 特征用黑白两种矩形框组合成特征模板,在特征模板内用黑色矩形像

    2023年04月26日
    浏览(43)
  • OpenCV自带的HAAR级联分类器对脸部(人脸、猫脸等)的检测识别

    在计算机视觉领域,检测人脸等是一种很常见且非常重要的应用,我们可以先通过开放计算机视觉库OpenCV来熟悉这个人脸识别领域。另外OpenCV关于颜色的识别,可以查阅: OpenCV的HSV颜色空间在无人车中颜色识别的应用 HSV颜色识别的跟踪实践 https://blog.csdn.net/weixin_41896770/arti

    2024年02月16日
    浏览(42)
  • OpenCV 入门教程:Haar特征分类器

    Haar 特征分类器是图像处理中常用的目标检测算法,用于识别图像中的特定目标。该算法基于 Haar-like 特征模板,通过训练分类器来实现目标的检测和定位。 Haar 特征分类器在人脸检测和物体识别等领域具有广泛应用。本文将以 Haar 特征分类器为中心,为你介绍使用 OpenCV 进行

    2024年02月15日
    浏览(40)
  • 基于OpenCV的haar分类器实现人脸检测分析

    今天来分享两个基于OpenCV实现的识别人脸的不同应用。 1、Haar分类器介绍 🚀Haar分类器是一种基于 机器学习 的目标检测算法,它使用Haar特征描述图像中的目标。Haar特征是 基于图像亮度的局部差异 计算得出的,可以用来描述目标的边缘、角落和线条等特征。 使用Haar分类器

    2024年02月03日
    浏览(43)
  • Haar级联分类器概述

    —— 才疏学浅, 难免有错误和遗漏, 欢迎补充和勘误. Haar级联分类器是基于Haar-like特征,运用积分图加速计算,并用Adaboost训练的强分类器级联的方法来进行人脸检测。 目前常用Haar-like特征的分类有: 图1. Haar-like特征分类 首先定义每个Haar-like特征的特征值 f i f_i f i ​ 为:

    2024年02月07日
    浏览(49)
  • OpenCV实现人脸检测(Haar特征)

    OpenCV是一个广泛应用于计算机视觉领域的开源库,提供了丰富的图像处理和分析功能。其中,人脸检测是OpenCV中最常见和重要的应用之一。在OpenCV中,可以使用Haar特征分类器实现人脸检测。 Haar特征是一种常用的特征描述方法,它通过在图像上移动不同大小和形状的滑动窗口

    2024年04月16日
    浏览(41)
  • RadioTransformer:用于视觉注意力引导疾病分类的级联全局焦点Transformer

    利用放射科医生的注视模式并模拟他们的视觉认知行为,以在胸部X光片上进行疾病诊断。 放射科医生等领域专家依靠视觉信息来解释医学图像。 另一方面,视觉解释有挑战性,但是视线跟踪已被用来捕获领域专家的观看行为,从而深入了解视觉搜索的复杂性。但即使是那些

    2024年04月29日
    浏览(32)
  • python opencv 级联Haar多目标检测

    一、基于OpenCV的haar分类器实现笑脸检测 1、Haar分类器介绍 🚀Haar分类器是一种基于机器学习的目标检测算法,它使用Haar特征描述图像中的目标。Haar特征是基于图像亮度的局部差异计算得出的,可以用来描述目标的边缘、角落和线条等特征。 使用Haar分类器进行目标检测的步

    2024年02月17日
    浏览(49)
  • 利用OpenCV Haar分类器检测人脸(python实现)

    人脸检测(Face Detection)是当前目标检测领域中一项非常热门的研究领域,它是人脸识别与人脸表情分析的核心,本篇文章介绍采用OpenCV中Haar分类器算法对图片中人脸的检测,并通过矩形框讲人脸与眼睛位置框选与标记. Haar级联分类器是一种基于特征提取和机器学习的对象检

    2024年02月05日
    浏览(52)
  • 【youcans 的 OpenCV 学习课】21. Haar 小波变换与 Haar 特征检测(上)

    专栏地址:『youcans 的图像处理学习课』 文章目录:『youcans 的图像处理学习课 - 总目录』 1.1 小波变换基本概念 信号变换是为了分析时间和频率之间的相互关系。 傅里叶变换(FFT)将信号表示为无限三角函数的叠加,从而将信号从时域转换到频域,可以分析信号的频谱,但

    2023年04月23日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包