【图像处理】计算Haar特征个数

【图像处理】计算Haar特征个数最早的Haar特征由PapageorgiouC.等提出(《Ageneralframeworkforobjectdetection》),后来PaulViola和MichalJones提出利用积分图像法快速计算Haar特征的方法(《Rapidobjectdetectionusingaboostedcascadeofsimplefeatures》)。之后,Raine

大家好,又见面了,我是你们的朋友全栈君。

最早的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特征本身并不复杂,就是用图中黑色矩形所有像素值的和减去白色矩形所有像素值的和。

【图像处理】计算Haar特征个数

看过Rainer Lienhart文章的人知道,Rainer Lienhart在文章中给出了计算特定图像面积内Haar特征个数公式。小女才拙,到最后也没推出那个公式来,还望看明白的大牛留言指教~

Haar特征个数计算

 

Rainer Lienhart计算Haar特征个数的公式:

【图像处理】计算Haar特征个数

其中,【图像处理】计算Haar特征个数为图片大小,【图像处理】计算Haar特征个数为矩形特征大小,【图像处理】计算Haar特征个数表示矩形特征在水平和垂直方向的能放大的最大比例系数。

对于45°的rotated特征(如1(c)和1(d)),w,h表示如下图所示:

【图像处理】计算Haar特征个数

其计算公式为:

【图像处理】计算Haar特征个数

*论文中没有说明,个人认为此处除了Z,XY值也有变化:【图像处理】计算Haar特征个数

下面是我理解的计算过程~

首先有两点要清楚:

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的图片中,几种特征的个数为:

【图像处理】计算Haar特征个数

可以看到和论文用公式计算得到的值是一致的~

【图像处理】计算Haar特征个数

另一种递推计算方法:

特征个数虽然很大,但很有规律,不用程序用笔也很容易推出递推公式。

如1(a)和1(b)特征递推为:(12^2)*(1+2+…+24)=43,200

具体参见此贴:Re: [OpenCV] Re: Number of haar features

(转载请注明作者和出处:http://blog.csdn.net/xiaowei_cqu 未经允许请勿用于商业用途)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/148918.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • idea搭建javaweb环境_java怎么打开项目

    idea搭建javaweb环境_java怎么打开项目【第一步】新建项目【第二步】点击JavaEnterprise,选择Webapplication,选择已经下载好的Tomcat,选择服务的jdk【第三步】选择框架支撑【第四步】完成创建目录介绍【第五步】配置jar包和classes包,首先在WEB-INF下面新建两个文件夹,classes和lib(装载jar包的,利于使用jstl标签)【第六步】在file中找到ProjectStructure【第七步】点击Modules,选择P…

  • 小爱同学app官方网站(小爱同学唤醒app)

    小爱同学app是一款以连接小爱同学享受人工智能乐趣生活为核心卖点的软件,超多种类的手机都能够使用,无论是苹果亦或是华为小米等,都能够完美的配适,并且还能使用手机唤醒小爱同学,帮它联网,教他各种不同的知识,之后还能和你愉快的聊天!小爱同学app特色听听音乐,看看各种笑话,休闲无比放松逗小爱,即时你是孤身一人也不再会孤单!远程操控你的各种智能设备,远距离控制不再是问题,解决所有的难题!自带语音识别的功…

  • 活期存款利息的计算方法包括_活期存款计算利息天数

    活期存款利息的计算方法包括_活期存款计算利息天数因为活期存款的利息很低,所以,人们对活期存款的利息怎样计算,并不是十分在意。我也如是。可是前些日子我陪一位老同事去买国债,在回家的路上我们偶尔谈到了这个问题,有些问题我也不太明白。但是,我还是想把这个

  • 寒冰linux视频教程笔记10 硬件配置及管理

    寒冰linux视频教程笔记10 硬件配置及管理

  • 计算机硬件知识

    一为何要学习计算机基础python是编程语言,即python是语言语言有英语、法语、葡萄牙语等,但凡是语言,都是用来沟通的介质。程序员编程的本质就是让计算机去工作,而编程语言就是程序员与计算机

  • java中的Set集合

    java中的Set集合概述Set集合类似于一个罐子,程序可以依次把多个对象“丢进”Set集合,而Set集合通常不能记住元素的添加顺序。实际上Set就是Collection只是行为略有不同(Set不允许包含重复元素)。Set集合不允许包含相同的元素,如果试图把两个相同元素加入同一个Set集合中,则添加操作失败,add()方法返回false,且新元素不会被加入。HashSet类HashSet是Set接口的典型实现,…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号