【图像处理】计算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)


相关推荐

  • Android应用程序开发「建议收藏」

    Android应用程序开发「建议收藏」Android应用程序开发 第一章Android应用初体验1.1应用基础activity是AndroidSDK中Activity类的一个具体实例,负责管理用户与信息屏的交互。应用的功能是通过编写一个个Activity子类来实现的。布局定义了一系列用户界面对象以及它们显示在屏幕上的位置。组成布局的定义保存在XML文件中。…

  • Web程序员们,你准备好迎接HTML5了吗?

    Web程序员们,你准备好迎接HTML5了吗?

  • 嵌入式C语言的小细节,excel的几个函数[通俗易懂]

    嵌入式C语言的小细节,excel的几个函数[通俗易懂]记录一下笔记嵌入式C语言有时候无法使用Static关键字嵌入式C语言中如果定义了变量没有使用可能报错嵌入式C语言中如果定义了无符号类型的变量最好别去和0比较,可能会报错嵌入式C语言的技巧if,else的嵌套使用得好可以加快速度excel的使用=‘sheet’!A1跨表传递数据很有用excel的使用中,=count(obj1:obj2)是一个很厉害的函数,作用是统计obj1到obj2的数字的个数;…

    2022年10月21日
  • 我看撸啊撸

    我看撸啊撸题图:byfrombilojackson360行,行行出状元。我相信今天大家的朋友圈应该被IG刷屏了。ig牛逼。可能有的人还一脸懵逼,不知道到底发生了什么。就…

  • 小区智能化设计方案简述_智慧设计

    小区智能化设计方案简述_智慧设计在智慧城市大前提下的智慧小区的建设势必将借助高精尖技术的帮助,产业的发展带来大数据、人工智能技术、智能安全机器人、云计算和物联网等相关技术的突破,技术的成熟应用又为智慧小区提供强有力的技术保障,产业的繁荣将为智慧小区满足规模化应用条件,最终促进产业升级、经济发展,为城市注入新活力。实现汇聚社区内出入口、公共区域监控、单元门、单位大门等区域结构化摄像机、车辆卡口、人脸智能门禁等智能前端,真正做到“人过留影、车过留牌”,不仅对社区安全进行全方位安全保障,同时为公安部门情报研判、人口管理提供前提条件,实现事前预警

    2022年10月17日
  • Restful api 防止重复提交

    Restful api 防止重复提交

发表回复

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

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