`
bcyy
  • 浏览: 1818044 次
文章分类
社区版块
存档分类
最新评论

【OpenCV】计算Haar特征个数

 
阅读更多

最早的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未经允许请勿用于商业用途)





分享到:
评论

相关推荐

    计算haar特作的例子

    计算haar特作的例子,从OpenCV中扒出来的代码,直接输出一个个特征值。

    vehicle_detection_haarcascades:使用OpenCV通过Haar级联进行车辆检测

    Haar级联的车辆检测最后页面更新时间: 2016年10月19日... 有关更多信息,请参见: 训练自己的OpenCV Haar分类器 相关论文: 奥利维拉,M。 Santos,V.使用类似Haar的功能自动检测实际道路上的汽车( ) 一些其他资源:

    (二)OpenCV特征提取与检测_16_级联分类器_人脸检测

    ③对每个像素点,每个尺度上做计算 #include #include using namespace cv; using namespace std; int main(int argc, char** argv) { //加载opencv中预训练过的级联器.xml String cascadeFilePath = ../path/haar...

    haarcascade_frontalface_alt_tree.xml

    OpenCV支持的目标检测的方法是利用样本的Haar特征进行的分类器训练,得到的级联boosted分类器(Cascade Classification)。注意,新版本的C++接口除了Haar特征以外也可以使用LBP特征。 先介绍一下相关的结构,级联...

    OpenCV 4.5.5 分类器特征文件

    包含的文件如下: haarcascade_eye.xml haarcascade_eye_tree_eyeglasses.xml haarcascade_frontalface_alt.xml haarcascade_frontalface_alt_tree.xml haarcascade_frontalface_alt2.xml haarcascade_frontalface_...

    opencv基础课件-计算机视觉

    OpenCV(Open Source Computer Vision Library)是一个广泛应用于计算机视觉和图像处理领域的开源库。它提供了丰富的功能和算法,用于处理图像、视频、深度图像等视觉数据。 以下是一些关于OpenCV的常见知识描述: ...

    OpenCV实例精解中文版(高清PDF和Mobi版本及源代码)

    第2章讨论如何在OpenCV中读/写图像和视频,并且介绍如何使用CMake建立一个项目;第3章介绍如何通过创建一个图形化用户界面和鼠标事件检测器来实现交互式应用程序;第4章探索直方图和过滤器,也演示了如何卡通化图像...

    OpenCv车辆识别训练模型

    OpenCv车辆识别训练模型

    (二)OpenCV特征提取与检测_11_Haar特征

    积分图主要的思想是将图像从起点开始到各个点所形成的矩形区域像素之和作为一个数组的元素保存在内存中,当要计算某个区域的像素和时可以直接索引数组的元素,不用重新计算这个区域的像素和,从而加快了计算(这有个...

    OpenCV自带的XML检测器17个 Android

    haarcascade_eye.xml haarcascade_eye_tree_eyeglasses.xml haarcascade_frontalcatface.xml haarcascade_frontalcatface_extended.xml haarcascade_frontalface_alt.xml haarcascade_frontalface_alt_tree.xml haar...

    OpenCVForUnity

    OpenCVForUnity提供了人脸检测和识别算法,例如HaarCascade、LBP、能量模型等,能够实现人脸检测、人脸识别、表情识别等功能。 物体检测 OpenCVForUnity提供了多个物体检测算法,例如基于HOG描述符的SVM

    基于OpenCV手写数字识别系统.zip

    丰富的功能:库中包含了数千个优化过的函数,涵盖了计算机视觉领域的诸多方面,如图像处理(滤波、形态学操作、色彩空间转换等)、特征检测与描述(如SIFT、SURF、ORB等)、物体识别与检测(如Haar级联分类器、HOG...

    opencv_traincascade.exe

    openv有两个训练exe,一个是opencv_haartraining.exe,一个是opencv_traincascade.exe,后者是前者的新版本,一般我们都使用后者,或者有三个特征:HAAR、HOG、LBP.

    基于opencv tenserflow2.0实战CNN人脸识别锁定与解锁win10屏幕.zip

    丰富的功能:库中包含了数千个优化过的函数,涵盖了计算机视觉领域的诸多方面,如图像处理(滤波、形态学操作、色彩空间转换等)、特征检测与描述(如SIFT、SURF、ORB等)、物体识别与检测(如Haar级联分类器、HOG...

    学习opencv中文版

    立体成像 来自运动的结构 二维和三维下的直线拟合 练习 第13章 机器学习 什么是机器学习 OpenCV机器学习算法 Mahalanobis距离 K均值 朴素贝叶斯分类 二叉决策树 boosting 随机森林 人脸识别和Haar分类器 其他机器...

    基于opencv的仪表盘指针读数识别系统.zip

    丰富的功能:库中包含了数千个优化过的函数,涵盖了计算机视觉领域的诸多方面,如图像处理(滤波、形态学操作、色彩空间转换等)、特征检测与描述(如SIFT、SURF、ORB等)、物体识别与检测(如Haar级联分类器、HOG...

    Python-基于OpenCV人脸识别门禁系统(项目+文档说明)

    4. 人脸检测:使用OpenCV提供的人脸检测算法(如Haar cascades、HOG等)进行人脸检测,将检测到的人脸框出来。 5. 人脸特征提取:使用OpenCV提供的特征提取算法(如LBPH、Eigenfaces、Fisherfaces等)对检测到的...

    opencv:你想要的haarcascades

    opencv:你想要的haarcascades

    基于tensorflow框架的手写数字识别+基于pyqt5的GUI界面+opencv图片数字切割.zip

    丰富的功能:库中包含了数千个优化过的函数,涵盖了计算机视觉领域的诸多方面,如图像处理(滤波、形态学操作、色彩空间转换等)、特征检测与描述(如SIFT、SURF、ORB等)、物体识别与检测(如Haar级联分类器、HOG...

    基于OpenCV的数码管数字识别代码。可以实现七段译码器显示的、含小数点数字的识别。.zip

    丰富的功能:库中包含了数千个优化过的函数,涵盖了计算机视觉领域的诸多方面,如图像处理(滤波、形态学操作、色彩空间转换等)、特征检测与描述(如SIFT、SURF、ORB等)、物体识别与检测(如Haar级联分类器、HOG...

Global site tag (gtag.js) - Google Analytics