Haar特征(一种矩形特征,反映了图像的灰度变化情况)

2023-10-28 19:40

本文主要是介绍Haar特征(一种矩形特征,反映了图像的灰度变化情况),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Haar特征最先由Paul Viola等人提出,后经过Rainer Lienhart等扩展引入45°倾斜特征。Haar特征分为三类:边缘特征、线性特征、中心特征和对角线特征,组合成特征模板。

OpenCV(2.4.11版本)所使用的共计14种Haar特征,包括5种Basic特征、3种Core特征和6种Titled(即45°旋转)特征。在使用opencv自带的训练工具进行训练时,haarFeatureParams参数中的mode参数正对应了训练过程中所使用的特征集合:
1. 如果mode为BASIC,则只使用BASIC的5种Haar特征进行训练,训练出的分类器也只包含这5种特征。
2. 如果mode为CORE,则使用BASIC的5种+CORE的3种Haar特征进行训练。
3. 如果mode为ALL,则使用BASICA的5种+CORE的3种+ALL的6种Titled共14种特征进行训练。
默认使用BASIC模式,实际中训练和检测效果已经足够好。不建议使用ALL参数,引入Titled倾斜特征需要多计算一张倾斜积分图,会极大的降低训练和检测速度。

 

1、矩形特征模板的生成
haar特征模板内有白色和黑色两种矩形,模板的Haar特征值=白色矩形像素和减去黑色矩形像素和:
                               $$featureValue(x)=weight_{white} * \sum_{Pixel\in White} Pixel+weight_{black}*\sum_{Pixel\in Blcak}Pixel$$
设置权值就是为了抵消面积不等带来的影响,保证所有矩形Haar特征的特征值在灰度分布绝对均匀的图中为0: 

a、对于上图中的x3和y3,$Weight_{White}=1$,$Weight_{Black}=-2$;
b、对于上图中的Point特征,$Weight_{White}=1$,$Weight_{Black}=-8$;  
c、其余11种特征,$Weight_{White}=1$,$Weight_{Black}=-1$;    
Haar特征值反映了图像的灰度变化情况。例如:脸部的一些特征能由矩形特征简单描述,如眼睛要比脸颊颜色要深,鼻梁两侧比鼻梁颜色要深,嘴巴比周围颜色要深等。但矩形特征只对一些简单的图形结构,如边缘、线段较敏感,所以只能描述特定走向(水平、垂直、对角)的结构。 


 2、Haar特征的子特征生成
Haar特征矩形特征可位于图像任意位置,大小也可以任意改变,所以矩形特征值是矩形模版类别、矩形位置和矩形大小这三个因素的函数。故类别、大小和位置的变化,使得很小的检测窗口含有非常多的矩形特征,如:在24*24像素大小的检测窗口内矩形特征数量可以达到16万个(特定类别的矩形模板尺寸放缩时其黑白区域比例不变)。  
以上图x3特征为例,在放大+平移过程中白:黑:白面积比始终是1:1:1。首先在红框所示的检测窗口中生成大小为3个像素的最小x3特征;之后分别沿着x和y平移产生了在检测窗口中不同位置的大量最小3像素x3特征;然后把最小x3特征分别沿着x和y放大(整数倍放大且保持黑白面积比例不变),再平移,又产生了一系列大一点x3特征;然后继续放大和平移,重复此过程,直到放大后的x3和检测窗口一样大。这样x3就产生了完整的x3系列特征。

那么这些通过放大+平移的获得的子特征到底总共有多少个:
假设检测窗口大小为W*H,矩形特征大小为w*h,X和Y为表示矩形特征在水平和垂直方向的能放大的最大比例系数:

则总共可以获得的子特征数目为:  

参数解释:
1、特征竖直方向方大1倍,即无放大,竖直方向有 $H-h+1$ 个特征;  
2、特征竖直方向放大2倍,竖直方向有$H-2h+1$ 个特征;  
3、特征竖直方向放大3倍,竖直方向有 $H-3h+1$个特征;  
4、特征竖直方向放大$Y=floor(H/h)$倍,竖直方向有 $H-Y*h+1$个特征;  
5、基于以上,竖直方向共有$(H-h+1)+(H-2h+1)+(H-3h+1)+...+(H-Y*h+1)=Y[H+1-h(1+Y)/2]$个特征,同理水平方向:   $X[W+1-w(1+X)/2]$个特征; 

6、由于水平方向和垂直方向相互独立,所以子特征数目为:子特征数目 = 水平方向数目x垂直方向数目;  

3、Haar特征值归一化(标准归一化也可以)

Haar特征计算出的特征值变化范围非常大,不利于量化评定特征值,所以需要进行“归一化”,压缩特征值范围。假设当前检测窗口中的图像像素为i(x,y),当前检测窗口为w*h大小,OpenCV采用如下方式归一化:
1、计算检测窗口中图像的灰度值和灰度值平方和:  
sum=\sum i(x,y)
sq_{sum}=\sum i^2(x,y)
2、计算平均值:
mean=\frac{sum}{w*h}
sq_{mean}=\frac{sq_{sum}}{w*h}
3、计算归一化因子:
varNormFactor=\sqrt{sq_{mean}-mean^2}
4、归一化特征值:  
normValue=\frac{featureValue}{varNormFactor}


4、Haar-like特征计算-积分图----滑窗默认步长为1

积分图就是只遍历一次图像就可以求出图像中所有区域像素和的快速算法,大大的提高了图像特征值计算的效率。对于一个灰度图像I而言,其积分图也是一张与I尺寸相同的图,只不过该图上任意一点(x,y)的值是指从灰度图像I的左上角与当前点所围成的举行区域内所有像素点灰度值之和,类似于图像直方图与图像累积直方图的关系,这里只不过是二维的图像。

当把图像扫描一遍,到达图像右下角像素时,积分图像就构造好了。积分图构造好之后,图像中任何矩阵区域的像素累加和都可以通过简单运算得到如上图所示。而Haar-like特征值无非就是两个或三个矩阵像素和的差,同样可以在常数时间内完成。所以矩形特征的特征值计算,只与此特征矩形的端点的积分图有关,所以不管此特征矩形的尺度变换如何,特征值的计算所消耗的时间都是常量。这样只要遍历图像一次,就可以求得所有子窗口的特征值。

5、45°旋转积分图
基于点90°夹角的射线与原图左上角包围的像素和构成旋转积分图:

设有如下图红色方框大小的灰度图image,其计算出来的45°旋转灰度图为titled(第1行和第1列为0),虚线代表image中cv::Rect为<3 1 2 3>区域。显然虚线区域的灰度和为:titled(2,6) - titled(1,4) - titled(6,3) + titled(1,4):

在实际中,如果使用旋转特征,则需要多计算一张积分图。但是旋转特征的效果往往不理想,得不偿失,不建议使用。故仅做了解就可以了。

这篇关于Haar特征(一种矩形特征,反映了图像的灰度变化情况)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/295492

相关文章

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

OmniGlue论文详解(特征匹配)

OmniGlue论文详解(特征匹配) 摘要1. 引言2. 相关工作2.1. 广义局部特征匹配2.2. 稀疏可学习匹配2.3. 半稠密可学习匹配2.4. 与其他图像表示匹配 3. OmniGlue3.1. 模型概述3.2. OmniGlue 细节3.2.1. 特征提取3.2.2. 利用DINOv2构建图形。3.2.3. 信息传播与新的指导3.2.4. 匹配层和损失函数3.2.5. 与Super

一种改进的red5集群方案的应用、基于Red5服务器集群负载均衡调度算法研究

转自: 一种改进的red5集群方案的应用: http://wenku.baidu.com/link?url=jYQ1wNwHVBqJ-5XCYq0PRligp6Y5q6BYXyISUsF56My8DP8dc9CZ4pZvpPz1abxJn8fojMrL0IyfmMHStpvkotqC1RWlRMGnzVL1X4IPOa_  基于Red5服务器集群负载均衡调度算法研究 http://ww

Verybot之OpenCV应用一:安装与图像采集测试

在Verybot上安装OpenCV是很简单的,只需要执行:         sudo apt-get update         sudo apt-get install libopencv-dev         sudo apt-get install python-opencv         下面就对安装好的OpenCV进行一下测试,编写一个通过USB摄像头采

如何保证android程序进程不到万不得已的情况下,不会被结束

最近,做一个调用系统自带相机的那么一个功能,遇到的坑,在此记录一下。 设备:红米note4 问题起因 因为自定义的相机,很难满足客户的所有需要,比如:自拍杆的支持,优化方面等等。这些方面自定义的相机都不比系统自带的好,因为有些系统都是商家定制的,难免会出现一个奇葩的问题。比如:你在这款手机上运行,无任何问题,然而你换一款手机后,问题就出现了。 比如:小米的红米系列,你启用系统自带拍照功能后

《计算机视觉工程师养成计划》 ·数字图像处理·数字图像处理特征·概述~

1 定义         从哲学角度看:特征是从事物当中抽象出来用于区别其他类别事物的属性集合,图像特征则是从图像中抽取出来用于区别其他类别图像的属性集合。         从获取方式看:图像特征是通过对图像进行测量或借助算法计算得到的一组表达特性集合的向量。 2 认识         有些特征是视觉直观感受到的自然特征,例如亮度、边缘轮廓、纹理、色彩等。         有些特征需要通

【python计算机视觉编程——7.图像搜索】

python计算机视觉编程——7.图像搜索 7.图像搜索7.1 基于内容的图像检索(CBIR)从文本挖掘中获取灵感——矢量空间模型(BOW表示模型)7.2 视觉单词**思想****特征提取**: 创建词汇7.3 图像索引7.3.1 建立数据库7.3.2 添加图像 7.4 在数据库中搜索图像7.4.1 利用索引获取获选图像7.4.2 用一幅图像进行查询7.4.3 确定对比基准并绘制结果 7.

c++的静态变化!

静态成员   对于非静态成员,一个类的每个对象都自己存有一个副本,每个对象根据自己拥有的非静态的数据成员来区别于其他对象。而静态成员则解决了同一个类的多个对象之间数据和函数的共享问题。   静态数据成员   静态数据成员的作用是:实现同一类的不同对象之间的数据共享。   #include<IOSTREAM>   using namespace std;   class Po

【python计算机视觉编程——8.图像内容分类】

python计算机视觉编程——8.图像内容分类 8.图像内容分类8.1 K邻近分类法(KNN)8.1.1 一个简单的二维示例8.1.2 用稠密SIFT作为图像特征8.1.3 图像分类:手势识别 8.2贝叶斯分类器用PCA降维 8.3 支持向量机8.3.2 再论手势识别 8.4 光学字符识别8.4.2 选取特征8.4.3 多类支持向量机8.4.4 提取单元格并识别字符8.4.5 图像校正