本文涉及内容如下:
- Haar分类原理
- Opencv中实现-图像和视频
- OpenCV自带haar特征训练的级联分类器分析
官网参考https://docs.opencv.org/3.4.0/d7/d8b/tutorial_py_face_detection.html
上来就说了opencv使用的是基于Haar特征的级联分类(Haar Feature-based Cascade Classifiers)来进行人脸识别。
同时还支持眼睛识别。。。
基于Haar特征的级联分类是Paul Viola和Michael Jones在2001年提出的。它是一种基于机器学习的方法,其中级联函数是从许多正负图像中提取特征,训练出来的。然后用于检测其他图像中的对象。
Haar级联分类器,通过对比分析相邻图像区域来判断给定图像或子图像与已知对象是否匹配。
Haar分类原理
理解Haar分类原理,需要有机器学习知识基础。官网解释的前半部分不是很清楚,我网上找了另外一篇,很不错。https://www.cnblogs.com/henuliulei/p/10719208.html
首先Viola提出的haar特征如下:
图a和b是edge features
图c和d是line features
图e是four-rectangles features
然后Rainer改进了这些特征,提出了更多的haar特征。如下图所示:
最后,把这些一堆堆带条纹的矩形特征中的任意一个矩形放到人脸区域上,就像下图那样,然后将白色区域的像素和减去黑色区域的像素和,得到的值我们暂且称之为人脸特征值。
如果把这个矩形放到一个非人脸区域,那么计算出的特征值应该和人脸特征值是不一样的,而且越不一样越好,所以这些方块的目的就是把人脸特征量化,以区分人脸和非人脸。
Haar特征值 反映了图像的灰度变化情况。
例如:脸部的一些特征能由矩形特征简单的描述,如:眼睛要比脸颊颜色要深,鼻梁两侧比鼻梁颜色要深,嘴巴比周围颜色要深等。
但矩形特征只对一些简单的图形结构,如边缘、线段较敏感,所以只能描述特定走向(水平、垂直、对角)的结构。
通过改变特征模板的大小和位置,可在图像子窗口中穷举出大量的特征。
现在有2个问题产生了。
问题1:
刚才已经解释过,特征值是通过白色区域的像素和减去黑色区域的像素和得到。但是就算是一个24*24的窗口也会产生超过16万个特征,这个计算量实在太大了。
为了解决这个问题ÿ