人脸 Haar 特征快速检测及其特征计算

Haar-like 快速特征检测使用的特征矩形有如下几种类型:
img

对角线特征在原始的论文中没有使用。

特征值的计算方式如下:将黑色区域内的像素值的和减去白色像素内的和。如下图:
img

即,将矩形区域内的紫色区域数字之和减去青色区域内数字之和,得到的就是特征值:[图片上传失败...(image-990054-1528899323306)]

Haar 特征数量的计算

以一个 24 × 24 的窗口为例,且使用下图中的特征矩形:[图片上传失败...(image-913c3-1528899323306)]

那么对于 (a) 存在都少可能的特征矩形呢?可以看到矩形的宽高比为 2:1 ,宽高可取的范围都为 24 ,即宽取1 ~ 24内的偶数,高 1 ~ 24,那么所有可能的组合就为(高 × 宽):1x2, 1x4, 1x6, 1x8, ..., 1x24, 2x2, 2x4, 2x6, 2x8, ..., 2x24, 3x2, 3x4, 3x6, ..., 一直到 24x24.

同理 (b) 的宽高比为 3:1 ,宽的取值需要时 3 的倍数,高的取值则是连续数。

那么,每一种可能的特征矩形(如 2x2)可产生的特征数为(24 - weight + 1)(24 - height + 1)。


# W/H 表示窗口的大小,w/h 表示特征矩形的宽高(最小情况下)
def calc_haar_count(W,H,w,h):
    total = 0
    # 特征矩形的宽可能取值
    for i in range(w,W+1,w):
        # 特征矩形的高可能取值
        for j in range(h,H+1,h):
            # 每种特征矩形产生的特征数量
            total += (W - i + 1) * (H - j + 1)
    return total

# a 2:1 43200
print(calc_haar_count(24,24,2,1))
# b 3:1 27600
print(calc_haar_count(24,24,3,1))
# c 1:2 43200
print(calc_haar_count(24,24,1,2))
# d 1:3 27600
print(calc_haar_count(24,24,1,3))
# e 2:2 20736
print(calc_haar_count(24,24,2,2))

可以看到五种特征矩形的宽高比分别为:(a) 2:1,(b) 3:1, (c) 1:2, (d) 1:3,(e) 2:2. 那么每种类型的特征值数量为:43200, 27600, 43200, 27600, 20736。总计为 160381 。五种可能的类型就产生了 16 万以上的特征值,这个是一个非常大数字了,如果把全部的可能都考虑上那计算量可想而知。

还有一种计算公式是作者在论文中提出来的,对于非旋转的可以使用:$$ XY(W + 1 - w\frac {X + 1}{2})(H + 1 - h\frac{Y + 1}{2}) $$

其中 $W×H$ 表示图片的宽高,$w×h$ 表示特征矩形的宽高,$X=\frac{W}{w}$,$Y=\frac{H}{h}$ 表示在水平以及垂直方向的缩放系数。

如上面的例子,其中 $W×H$ 为 24×24,对于 (a) 来说 $w×h$ 为 2×1,那么可以计算出 X 为 12,Y 为 24。因此特征数量为$$ 12×24×(24 + 1 - 2\frac {12 + 1}{2})×(24 + 1 - 1\frac{24 + 1}{2}) = 43200$$

与上面的计算结果是一致的。

对于产生旋转的特征矩形,特征矩形的宽高需要产生变化,X/Y 需要按照新特征矩形的宽高来重新计算。新的特征矩形的计算如下图:[图片上传失败...(image-3441d8-1528899323306)]

新的计算公式如下:$$ XY(W + 1 - z\frac {X + 1}{2})(H + 1 - z\frac{Y + 1}{2}) $$

其中 $z=w+h$,那么 $X = \frac{W}{z}$,$Y = \frac{W}{z}$

积分图

积分图(integral image),又称总和面积表( ** summed area table ** ,简称SAT). 对于一幅灰度的图像,积分图像中的任意一点(x,y)的值是指从图像的左上角到这个点的所构成的矩形区域内所有的点的灰度值之和。如下图[图片上传失败...(image-6308ce-1528899323306)]

即求第4行第7列的分I(4,7),就是让左上角蓝色区域内的值求和,所得的值就是 I(4,7) 的积分值,即130.

不仅可以计算左上角的积分值,还可以计算任意矩形区域内的积分值,如下图:[图片上传失败...(image-3887c8-1528899323306)]

上面的公式虽然可以计算积分值,但是当图片的尺寸扩大计算量是非常大的,此时我们就可以使用积分图来进行高效的计算。

首先我们需要获取一张图的积分图,积分图的算法构建如下:

  1. 用 $s(i,j)$ 表示行方向的累加和,初始化$s(i,-1)=0$,每一行的初始值为 0;

  2. 用 $ii(i,j)$ 表示一个积分图像,初始化 $ii(-1,j)=0$,每一列的初始值为 0 ;

  3. 逐行扫描图像,计算每个像素 $(i,j)$ 行方向的累加和 $s(i,j)$ 和积分图像 $ii(i,j)$ 的值:

$$s(i,j)=s(i,j-1)+i(i,j) \quad(1)\ ii(i,j)=ii(i-1,j)+s(i,j) \quad(2)$$

  1. 扫描图像一遍,当到达图像右下角像素时,积分图像ii就构造好了。

上面的公式(1)和(2)是两个递推公式。这样我们就计算好了积分图,在 google Spreadsheets 中计算积分图也很方便。

再看下面这幅图,其中 A、B、C、D 表示一张图中的四个区域,1、2、3、4 表示 D 区域的四个顶点。

img

可以看到 D 区域内使用上述方法计算时,1、2、3、4点在积分图中对应的四个点(蓝色圈中的点)为:

  • ii(1) = 49

  • ii(2) = 96

  • ii(3) = 88

  • ii(4) = 157

那么 ii(D) = ii(4) + ii(1) - ii(2) - ii(3) = 157 + 49 - 96 - 88 = 22 ,计算的结果正是 D 区域内所有元素的和。

那么对于 haar 特征矩形该如何算呢?如下图:[图片上传失败...(image-4ecbc4-1528899323306)]

我们可以看到 如果是二矩形需要在积分图中查找 6 次,三矩形需要查找 8 次就可以得到计算 haar 特征的所有值。二阶矩形的 haar 特征值计算为黑色区域内的和减去白色区域内的和,那么:

  • $sum(black) = ii(4) + ii(1) - ii(2) - ii(3) = 62 + 8 - 14 - 33 = 23$

  • $sum(white) = ii(4) + ii(1) - ii(2) - ii(3) = 91 + 14 - 18 - 62 = 25$

$haar \ value = sum(black) - sum(white) = 23 - 25 = -2$

其他特征矩形的计算与此类似,旋转特征矩形的计算暂时没有看,可以参考原始论文中的方法。

【参考】

  1. 百度百科 - 积分图像

  2. wikipedia - 积分图

  3. 积分图像(Integral Image)与积分直方图 (Integral Histogram)

  4. Number of haar like features in 24x24 window

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

  6. 人脸Haar特征与快速计算神器:积分图

  7. 机器视觉中的图像积分图及其实现

  8. 特征提取之Haar特征

  9. FACE DETECTION USING OPENCV AND PYTHON: A BEGINNER’S GUIDE

  10. OpenCV - Face Detection using Haar Cascades

  11. 原始论文 - An extended set of Haar-like features for rapid object detection

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,287评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,346评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,277评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,132评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,147评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,106评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,019评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,862评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,301评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,521评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,682评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,405评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,996评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,651评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,803评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,674评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,563评论 2 352

推荐阅读更多精彩内容