【图像处理】计算Haar特征个数
http://blog.csdn.net/xiaowei_cqu/article/details/8216109
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
【图像处理】计算Haar特征个数的更多相关文章
- 基于Haar特征Adaboost人脸检测级联分类
基于Haar特征Adaboost人脸检测级联分类 基于Haar特征Adaboost人脸检测级联分类,称haar分类器. 通过这个算法的名字,我们能够看到这个算法事实上包括了几个关键点:Haar特征.A ...
- 模式匹配之常见匹配算法---SIFT/SURF、haar特征、广义hough变换的特性对比分析
识别算法概述: SIFT/SURF基于灰度图, 一.首先建立图像金字塔,形成三维的图像空间,通过Hessian矩阵获取每一层的局部极大值,然后进行在极值点周围26个点进行NMS,从而得到粗略的特征点, ...
- 照片美妆---基于Haar特征的Adaboost级联人脸检测分类器
原文:照片美妆---基于Haar特征的Adaboost级联人脸检测分类器 本文转载自张雨石http://blog.csdn.net/stdcoutzyx/article/details/3484223 ...
- 【计算机视觉】极限优化:Haar特征的另一种的快速计算方法—boxfilter
这种以Boxfilter替代integral image 的方法很难使用到haar.LBP等特征检测中,因为像下面说的,它不支持多尺度,也就是说所提取的特征必须是同一个大小,最起码同一个宽高比的,这一 ...
- 图像特征提取三大法宝:HOG特征,LBP特征,Haar特征(转载)
(一)HOG特征 1.HOG特征: 方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子.它通过计算和 ...
- 图像特征提取三大法宝:HOG特征,LBP特征,Haar特征
(一)HOG特征 1.HOG特征: 方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子.它通过计算和 ...
- [CV笔记]图像特征提取三大法宝:HOG特征,LBP特征,Haar特征
(一)HOG特征 1.HOG特征: 方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子.它通过计算和 ...
- AdaBoost中利用Haar特征进行人脸识别算法分析与总结1——Haar特征与积分图
原地址:http://blog.csdn.net/watkinsong/article/details/7631241 目前因为做人脸识别的一个小项目,用到了AdaBoost的人脸识别算法,因为在网上 ...
- 基于Haar特征的Adaboost级联人脸检测分类器
基于Haar特征的Adaboost级联人脸检测分类器基于Haar特征的Adaboost级联人脸检测分类器,简称haar分类器.通过这个算法的名字,我们可以看到这个算法其实包含了几个关键点:Haar特征 ...
随机推荐
- PyQt4 Box布局
使用布局类别方式的布局管理器比绝对方式的布局管理器更加灵活实用.它是窗口部件的首选布局管理方式.最基本的布局类别是QHBoxLayout和QVBoxLayout布局管理方式,分别将窗口部件水平和垂直排 ...
- 【PHP】算法: 获取满足给定值的最优组合
PHP 获取给定值的最优组合 方法 - (蓝洛提供,博客地址: www.zhaorui.info) <?php ini_set('error_reporting','E_ALL^E_NOTI ...
- C++面向对象类的实例题目十二
题目描述: 写一个程序计算正方体.球体和圆柱体的表面积和体积 程序代码: #include<iostream> #define PAI 3.1415 using namespace std ...
- Linux命令行常用光标移动快捷键
Linux 命令行快捷键 涉及在Linux命令行下进行快速移动光标.命令编辑.编辑后执行历史命令.Bang(!)命令.控制命令等.让basher更有效率. 常用 ctrl+左右键:在单词之间跳转 ct ...
- linux 学习的一些书单,对了解android 也有大用
要推荐的书,我在<那两年炼就的Android内功修养>这篇文章中有提到,这里再列一下出来: 语言类: <深度探索C++对象模型>,对应的英文版是<Inside C+++ ...
- 超级小的web手势库AlloyFinger
针对多点触控设备编程的Web手势组件,快速帮助你的web程序增加手势支持,也不用再担心click 300ms的延迟了.拥有两个版本,无依赖的独立版和react版本.除了Dom对象,也可监听Canvas ...
- 使用FileZilla向linux系统上传文件
- reflect 机制
1: Class.forName的作用?为什么要用? 答:调用该访问返回一个以字符串指定类名的类的对象. 2: 通过反射,有几种方法可以实例化Class类对象? 3种,第一种:Class.forNam ...
- 扫描类APP推荐
扫描全能王 (com.intsig.camscanner) - 5.10.0.20190426 - 应用 - 酷安网 应该是手机上最好的扫描类 APP 了,没有之一.只是因为付费太贵. 感谢酷安评论区 ...
- hello gradle
首先下载和安装gradle可以参考官网下载地址,建议下载带有源码和文档的,以便后期查阅. 下载完以后打开终端输入gradle -v有如下信息输出,表示安装成功: bogon:gradle scott$ ...