第4章 人脸识别算法与实现
4.1 设计思想
程序设计的总体思想是通过VS2010编写一个基于OpenCV视觉库的Windows应用程序。首先基于AdaBoost算法的思想,采用windows命令训练多个相近的弱分类器级联成理想的强分类器。然后以OpenCV视觉库的Haartraining函数结构为基础,编写使用训练好的级联分类器进行人脸检测的程序,编写的程序具有读入待检测图片,待检测图片预处理,加载分类器,利用分类器检测人脸,输出检测结果的功能。
4.2 程序设计流程
分类器的训练过程是通过windows命令来完成的,可分为两个阶段:
a.样本集建立:根据人脸数据库样本的属性,设定相应的Windows命令行参数,建立正样本集和负样本集及其相应的样本集说明文件。
b.分类器训练:
利用OpenCV视觉库包含的opencv_createsamples.exe程序建立训练集的VEC文件,在根据训练集的具体数据设定Windows命令行参数,进行人脸检测分类器训练。 根据人脸检测的功能,检测程序的设计流程可详细分为:
a. 读取待检测图像:使用OpenDlg.GetPathName()函数找到指定的待检测图像,并判断待检测图像的格式是否符合程序检测的要求,拒绝可能引起程序崩溃的错误文件格式。
b. 待检测图像预处理:利用OpenCV视觉库中所包含的功能函数,对格式符合要求的待检测图像进行预处理,对原图像进行灰度化处理和直方图均衡化,使图像中可能存在的人脸特征突出,降低图像噪声。
c. 加载分类器:在本地找到并加载指定的分类器文件。
d. 人脸检测:使用cvHaarDetectObjects()函数,快速确定图像中的haar特征,并利用成功加载的分类器对经过预处理的待检测图像进行准确并高效的人脸检测和定位。
OpenCV中已经包含有训练好的分类器文件,我们只需要配置好环境,使用它即可。
13
4.3 代码编写 4.3.1 载入图片阶段
使用MFC编程函数。penDlg()载入待检测的数字图像源文件,通过图像文件格式设定语句:JPG file format,可以设定所载入的图像为JPG或BMP或二者皆可的文件。
4.3.2 图片预处理阶段
为保证检测的效率和准确性,要预先将载入的图像转化为灰度图像在进行处理,这里使用。penCV库的。vCreateImage()创建首地址并分配存储空间函数再进行处理。
Ipllmage* Gray_Img二cvCreateImage (cvSize (img->width, img->height), 8, 1);
对图片做过灰度化处理以后,还需要考虑所有待检测图像间的差异,为确保检测结果的准确,特别是面对一些明显偏暗或偏亮的图片时,如果不对待检测图片做出调整图像的局部特征会直接影响检测的结果,因此需要对待检测的图像在预处理阶段做出对比度调整或直方图调整。
由于待检测的图像一般在尺寸,色彩,分辨率等方面不同于训练集中所用到的图像,这些图像的来源不同,背景不同,光照情况导致的亮度也有明显的差异,因此即使对这些待检测图像做对比度调整也不能够得到像调整训练集图像那样统一化的结果,因此待检测图像的预处理不适合做对比度调整,但对这些图像做灰度直方图均衡却能得到理想的效果,灰度直方图均衡化能够让过亮或过暗的图像灰度分布更加均匀,能够更好的突出图像中的人脸。
这一部分的预处理操作使用OpenCV视觉库自带的。vEqualizeHist()函数来完成。
4.3.3 加载分类器并进行检测
将训练好的分类器放在程序跟目录下,并使用下列语句指定分类器名称: const char* cascade name二\
在编写程序代码时,可以简单便捷地利用人脸的Haar特征分类器,实现方式也非常简单,运用函数cvHaarDetectObjects()即可,该函数来自OpenCV视觉库,是一种非
14
常经典的函数,常用于检测某些特定图像目标。
4.3.4 打印检测结果
当程序检测到图片中存在的人脸之后并确定位置之后,会在原图片中按人脸的所占比例以圆形标记在原图片中标出。
15
参考文献
[1] 周德华,毛敏峰,徐浩.一种多人脸跟踪算法的研究与实现[J],电视技术,2005,275(5):88~90.
[2] 王伟;张佑生;方芳;人脸检测与识别技术综述[J]. 2006,5
[3] 高建坡,王煜坚,杨浩等.一种基于KL变换的椭圆模型肤色检测方法[J].电子与信息学报.2007,V01.29,No.7.
[4] 李刚,高政、人脸自动识别方法综述、计算机应用研究、2003, Vol 8:4-9
[5] 高建坡,王煜坚,杨浩等.一种基于KL变换的椭圆模型肤色检测方法[J].电子与信息学报.2007,V01.29,No.7.
[6] 高建坡.视频序列中的人脸检测与跟踪算法研究.东南大学博士学位论文.2007,3. [7] 基于五官特征定位的人脸识别技术在防盗门中的应用[D]中国海洋大学:2006
[8] Huang F J,Chen T.Tracking of multiple faces for human—computer interfaces and virtualenvironments[C].IEEE Intl.Conf.on Multimedia and Expo.New York,July 2000.
[9] 张翠平,苏光大人脸识别技术综述中国图像图形学报[J]2000 年11 期
[10] Viola P,Jones M.Rapid object detection using a boosted cascade of simple feature[c].In:Proceedings of IEEE Conference on Computer Vision and Pattern Recognition,Kauai,Hawaii,USA,2001,1:I-51l-518
[11] Viola P.,Jones M. J.、Robust Real-Time Face Detection、International Journal of Computer Vision 57(2), 137-154, 2004
[12] 张宏林. visual C++ 数字图像模式识别技术及工程实践. 北京:人民邮电出版社,2003年4月
16
附录一 人脸检测源程序
#include \
#include \
#include
#ifdef _EiC #define WIN32 #endif
static CvMemStorage* storage = 0;
static CvHaarClassifierCascade* cascade = 0;
void detect_and_draw( IplImage* image );
const char* cascade_name =
\/* \
int main( int argc, char** argv ) {
CvCapture* capture = 0;
IplImage *frame, *frame_copy = 0; int optlen = strlen(\ const char* input_name;
if( argc > 1 && strncmp( argv[1], \ {
cascade_name = argv[1] + optlen; input_name = argc > 2 ? argv[2] : 0; }
17
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库[作业]OpenCV人脸识别 - 图文(4)在线全文阅读。
相关推荐: