- 浏览: 280763 次
- 性别:
- 来自: 济南
文章分类
最新评论
最早的Haar特征由Papageorgiou C.等提出(《A general framework for object detection》),后来Paul Viola和Michal Jones提出利用积分图像法快速计算Haar特征的方法(《Rapid object detection using a boosted cascade of simple features》)。之后,Rainer Lienhart 和 Jochen Maydt用对角特征对Haar特征库进行了扩展(《An extended set of Haar-like features for rapid object detection》)。OpenCV的Haar分类器就是基于扩展后的特征库实现的。
Haar特征/矩形特征
Haar特征本身并不复杂,就是用图中黑色矩形所有像素值的和减去白色矩形所有像素值的和。
看过Rainer Lienhart文章的人知道,Rainer Lienhart在文章中给出了计算特定图像面积内Haar特征个数公式。小女才拙,到最后也没推出那个公式来,还望看明白的大牛留言指教~
Haar特征个数计算
Rainer Lienhart计算Haar特征个数的公式:
其中,为图片大小,为矩形特征大小,表示矩形特征在水平和垂直方向的能放大的最大比例系数。
对于45°的rotated特征(如1(c)和1(d)),w,h表示如下图所示:
其计算公式为:
*论文中没有说明,个人认为此处除了Z,XY值也有变化:
下面是我理解的计算过程~
首先有两点要清楚:
1、对于某特定大小的特征,在窗口内滑动计算。
也就是如图1(a)特征大小为2*1,对于24*24的图像。水平可滑动23步,垂直滑动24步,所以共有23*24个特征。
2、对于一个特征,特征本身沿水平、竖直方向分别缩放。
还看特征1(a),特征大小为2*1,则延水平方向可放大为:4*1,6*1,8*1,…,24*1;竖直方向可放大为:2*1,2*2,2*3,…,2*24。即每个特征有XY种放大方式。(!放大的矩形特征并限制保持2:1的比例!)
清楚这两点,就很容易写出计算特征个数的代码:
int getHaarCount(int W,int H,int w,int h){ int X=W/w; int Y=H/h; int count=0; //放大Haar特征到 iw*jh for (int i=1;i<=X;i++) for(int j=1;j<=Y;j++) //滑动iw*jh矩形,遍历图像计算每个位置Haar特征 for(int x=1;x<=W-i*w+1;x++) for(int y=1;y<=H-j*h+1;y++) count++; return count; }
对于45°特征,由于Rainer Lienhart定义的w,h与原矩阵含义不同(参见第一幅图),即实际滑动的矩阵框为(h+w)*(w+h)。
所以只要用如下方式调用原函数:
getHaarCount(W,H,h+w,w+h);
当然如果你喜欢写代码,也可以写个新的函数:
int getRotatedHaarCount(int W,int H,int w,int h){ int X=W/(w+h);//计算新的X int Y=H/(w+h);//计算新的Y int count=0; for (int i=1;i<=X;i++) for(int j=1;j<=Y;j++) //注意这里滑动窗口边界变化 for(int x=1;x<=W-i*(w+h)+1;x++) for(int y=1;y<=H-j*(w+h)+1;y++) count++; return count; }
计算在24*24的图片中,几种特征的个数为:
可以看到和论文用公式计算得到的值是一致的~
另一种递推计算方法:
特征个数虽然很大,但很有规律,不用程序用笔也很容易推出递推公式。
如1(a)和1(b)特征递推为:(12^2)*(1+2+...+24)=43,200
具体参见此贴:Re: [OpenCV] Re: Number of haar features
(转载请注明作者和出处:http://blog.csdn.net/xiaowei_cqu未经允许请勿用于商业用途)
发表评论
-
unity基础开发----物体位移和旋转实用代码
2013-11-21 22:46 1270using UnityEngine; using Syst ... -
Android中View绘制优化之一---- 优化布局层次
2012-09-04 23:00 1074... -
Android中View绘制优化二一---- 使用<include />标签复用布局文件
2012-09-08 13:54 1055... -
Android中View绘制优化之三---- 优化View
2012-09-13 21:00 1083... -
兰林任务管理应用程序雏形版以及概要说明
2012-09-15 21:54 880... -
Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(上)
2012-10-10 18:14 1167... -
Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(下)
2012-10-17 20:05 862... -
Android中文件选择器的实现
2012-11-30 08:59 1173... -
【编译原理】使用Lex将C/C++文件输出为HTML文件
2012-07-20 09:37 107008年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大 ... -
【编译原理】正则表达式
2012-07-21 21:49 230608年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大 ... -
【OpenCV】访问Mat图像中每个像素的值
2012-07-22 07:10 1171今天百度搜资料还搜到了自己的。。。《访问图像中每个像素的值 ... -
【编译原理】用Yacc做语法分析
2012-07-23 05:47 177408年9月入学,12年7月毕 ... -
【UML】UML几种图的绘制
2012-07-24 09:49 99108年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大 ... -
【OpenCV】邻域滤波:方框、高斯、中值、双边滤波
2012-07-26 10:52 1460邻域滤波(卷积) 邻域算子值利用给定像素 ... -
【数据结构】排序算法:希尔、归并、快速、堆排序
2012-07-28 06:15 102508年9月入学,12年7月毕 ... -
【OpenCV】角点检测:Harris角点及Shi-Tomasi角点检测
2012-07-31 13:25 1546角点 特征检测与匹配 ... -
【UML】案例分析:机场运作系统
2012-08-01 17:22 313408年9月入学,12年7月毕 ... -
【OpenCV】边缘检测:Sobel、拉普拉斯算子
2012-08-04 13:41 1548边缘 边缘(edge)是指图像局部强度变化最显著的部分。主要 ... -
【OpenCV】Canny 边缘检测
2012-08-08 10:17 1997Canny 边缘检测算法 1986 ... -
【UML】案例分析:新型超市购物自助系统
2012-08-19 01:13 129608年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大 ...
相关推荐
在人脸检测中,数百甚至数千个弱分类器(每个基于一组特定的Haar特征)会被训练以识别人脸。这些弱分类器以级联的方式组织,先应用最简单的分类器进行快速排除,然后再逐步应用更复杂的分类器来精确地定位和识别目标...
接着,你可以使用OpenCV的`cv::CascadeClassifier`类来加载预先训练好的Haar特征模型文件,这个模型通常以`.xml`格式存储。 训练Haar特征模型是一个复杂的过程,它涉及到大量正负样本图像的准备、特征级联分类器的...
在这个特定的项目中,“opencv基于haar特征的人脸检测demo”是利用OpenCV库实现的一个示例,展示了如何通过Haar特征进行人脸检测。Haar特征是一种在图像处理中用于对象识别的技术,尤其适用于人脸检测。这种方法是由...
总结起来,通过OpenCV、Haar特征和级联分类器,我们可以构建一个高效的手势检测系统,特别是对于特定手势如英文字母"A"的检测。这个系统可以应用于各种场景,包括教育、游戏、无障碍通信等。在实际应用中,还可以...
本教程将聚焦于如何利用OpenCV的Haar特征来训练一个身份证级联分类器,从而实现自动检测身份证在图像中的位置。 Haar特征是一种基于像素强度差异的特征描述符,最初被应用于人脸识别。它们通过计算图像窗口内不同...
在本案例中,我们关注的是OpenCV中的人脸检测技术,特别是基于Haar特征的级联分类器。这两个XML文件——"haarcascade_frontalface_alt.xml"和"haarcascade_eye_tree_eyeglasses.xml",是预训练的模型,用于检测图像...
本教程将深入探讨如何利用OpenCV中的Haar级联分类器进行人脸、人眼等特征的检测,结合实际代码来理解这一过程。 Haar特征是基于小波理论的一种简单特征表示方法,最初用于图像识别。在OpenCV中,它们被用来构建级联...
通过这个压缩包,用户可以利用OpenCV的工具和库文件,自行训练Haar特征级联分类器,以适应特定的目标检测需求。需要注意的是,由于`opencv_haartraining.exe`是较旧版本的训练工具,当前的OpenCV版本已经改用`opencv...
这个教程将带你深入了解如何利用OpenCV的Haar特征创建自定义的分类器资源。 Haar特征源于计算机视觉领域,是一种简单的矩形结构特征,可以用来描述图像中的局部形状和纹理。它们分为三种类型:单个矩形、两个相邻...
OpenCV Haar分类器是一种基于特征检测的计算机视觉算法,广泛应用于对象识别,尤其是在人脸识别、车辆检测和交通信号灯识别等领域。在这个特定的压缩包文件中,包含了用于训练Haar分类器以识别交通红绿灯的样本数据...
OpenCV中的级联分类器利用Adaboost算法训练这些Haar特征,创建一个可以检测特定对象(如人脸)的弱分类器集合。 Local Binary Patterns(LBP)是一种纹理描述符,它通过比较像素及其邻域的灰度值来表示图像的局部...
在OpenCV中,人脸检测通常通过级联分类器XML文件实现,这个文件包含了预先训练好的HAAR特征模型。通过滑动窗口策略遍历图像的每个可能区域,对每个窗口应用级联分类器,判断是否包含人脸。如果检测到人脸,会返回一...
Haar级联分类器是OpenCV中常用的一种特征检测算法,它通过级联的弱分类器来实现目标检测,例如眼睛、鼻子、嘴巴等面部特征。"mcs"通常表示这个模型是在多类支持(Multi-Class Support)下训练得到的。 描述中提到的...
在Python版本的OpenCV中,Haar级联分类器的配置信息通常存储在XML文件中,如"haar"这个文件。这个XML文件包含了训练过程中学习到的特征模式和阈值,用于在图像中快速定位人脸。文件中的数据结构描述了特征检测的规则...
总之,Haar特征在MATLAB中的实现涉及到图像预处理、特征构造、特征计算等多个步骤,对于理解计算机视觉中的特征提取和物体检测有着重要的作用。不过,由于没有Adaboost训练,这个文档可能只适用于初步理解和验证Haar...
4. **物体识别与检测**:涵盖Haar级联分类器、HOG(Histogram of Oriented Gradients)特征、以及基于深度学习的方法(如YOLO、SSD)进行目标检测。 5. **视频处理与运动分析**:讲解如何从视频流中提取帧,实现...
例如,OpenCV库中的Viola-Jones人脸检测算法就是基于Haar特征和Adaboost的。 **代码实现** 描述中提到的“提特征”很可能是包含提取Haar特征的代码文件。这些代码可能包括了上述步骤的实现,如定义特征模板、计算...
Haar特征可以是边缘、线段、矩形等形状,通过计算这些形状在图像局部区域的平均或差值来描述图像的局部特性。例如,眼睛通常比脸颊暗,所以可以使用水平的haar特征来检测这种亮度对比。 **训练级联分类器** OpenCV...
在实际应用中,这个训练模型可以集成到**OpenCV**库中,OpenCV是一个强大的计算机视觉库,提供了HAAR特征检测和SVM分类的接口。通过加载训练好的模型,可以快速地在实时视频流或图像中检测车辆。 总的来说,这个...
3. **特征提取**:提取窗口内的Haar特征,并计算特征值。 4. **分类决策**:根据特征值,分类器决定窗口内是否包含人脸。 5. **非极大值抑制**:去除重叠的检测结果,保留最可能的人脸区域。 **应用场景**:这个...