【特征检测】Harr-like特征算法

来源:互联网 发布:mac版pscc2017破解补丁 编辑:程序博客网 时间:2024/06/06 00:34

转自:http://blog.csdn.net/hujingshuang/article/details/47419505

简介:

对于Harr特征以及Adaboost的讲解,网上有很多分析,在此记录一些较好的博客。

较好的文章:

两篇原文:

1、Rapid Object Detection using a Boosted Cascade of Simple Features

2、An Extended Set of Haar-like Features for Rapid Object Detection

维基百科:

Viola–Jones object detection framework

小魏的修行路:

1、【OpenCV】基于Adaboost和Haar-like特征人脸识别

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

3、【图像处理】利用积分图像法快速计算Haar特征

zouxy09的博客:

目标检测的图像特征提取之(三)Haar特征

liuliu603的博客:

Haar特征与积分图

当然对于24x24子窗口内,harr特征个数的计算到底是180K左右还是160K左右,依然是有争论:

Viola-Jones' face detection claims 180k features

Harr特征:

        下面就Harr特征也来说说我的理解,以人脸检测为例,如有失误的地方,还请多多指教。此处不去介绍积分图像、Adaboost级联分类器,Harr特征个数(我也没去推导)的计算等等。

        对于一副待检测图像,目的是要将图中的人脸标记出来。由于拍摄者的距离远近不同或者相机对焦等设置,会导致图像中人脸分辨率大小不一致,想要准确的检测图像中所有的人脸,则需要从不同的尺度、不同的位置来检测,也就是多尺度法。

多尺度法:即待检测图像的大小保持不变,逐层等比放大检测窗口,利用这些不同大小的窗口来扫描检测整幅图像。下面做详细说明。

        在图像中,子窗口取24x24大小,计算当前子窗口内的Harr特征向量,特征向量就是当前子窗口的表征,把这个向量送到已经训练好了的分类器中,判定其是否为人脸。若是,则标记一下;若不是,则子窗口滑动到下24x24的位置。重复上述特征计算,一直到整幅图像24x24的子窗口从左到右、从上到下都扫描完了,也就结束了当前层(尺度)的检测。

Harr特征也称矩形特征,最初的就是下面的几种:


看了上面列出的博客,大概都知道如何利用积分图像计算Harr特征。后来演变为下面的几种:


不管矩形特征怎么变,计算方法都是一样的,只是表征子窗口的特征向量的维度发生了改变。

以第一幅图中的A、B、C、D为例,有2个两矩形的,2个三矩形的,1个四矩形的组成,再详细点就是下图:


        在上图中,a是2x1大小,在24x24的子窗口中滑动,每滑动一次会有一个值,则可产生23x24个值,也就是Harr特征值;同理bcde的都可以产生若干个Harr特征值,将它们组成一个向量,这就是Harr特征向量。在图像中扫描式的取子窗口,计算特征向量,判别是否是人脸,记录下当人脸的窗口,当然这只是进行了一层(一种尺度)的检测。

在一幅图像中,有的人脸可能小,有的可能很大,24x24的窗口可能检测不到,出现漏检的情况。如下图所示。


        这个时候就需要将窗口进行适当的放大了,形成一个较大的窗口,也就是另一种尺度(另一层)。放大因子取1.25效果较好,每一尺度都是上一尺度的1.25倍大小,尺度(层)的大小不能超过原始图像的大小。

       当然,子窗口进行了等比例的放大,那么矩形特征(a、b、c、d、e)也要进行一定比例的放大。然后计算Harr特征向量,再判别记录。

       如此循环计算,直到子窗口大小达到不超过原始图像的最大尺寸。然后,再将所有记录过的人脸的进行标记,由于人脸区域在不同尺度的窗口中可能会有重复检测到,所以需要将重叠检测到的人脸区域合并起来成为一个区域并标记。

       综上所述,就是Harr特征算法了,感觉有点像HOG特征算法,都是窗口内有东西在滑动计算,而窗口本身也是滑动的,只是Harr的窗口大小还在改变。