韩乐+何烨秋+高文华
摘要:人脸检测已经成为计算机视觉和模式识别领域中一个非常活跃的研究方向。基于Matlab计算机视觉系统工具箱的人脸检测实验,首先介绍了手动检测的Matlab实现及其不足,然后利用计算机视觉系统工具箱实现人脸检测,并在此基础上设计实现了单一人脸视频检测,所有实验均提供了Matlab程序代码,最后提出了如何实现多目标人脸视频检测的思考题。该实验方案通过实验操作增强学生对人脸检测的理解,激发学生进一步学习和研究的兴趣。同时,对计算机视觉和模式识别相关课程起到很好的教学辅助作用,有效地改善了教学效果。
关键词:人脸检测;计算机视觉;Matlab;模式识别
中图分类号:TP317.4 文献标识码:A 文章编号:1009-3044(2016)22-0165-02
Abstract: Face detection has become an active research direction in the field of computer vision and pattern recognition. Based on computer vision system toolbox of Matlab, face detection experiments include three parts. Firstly,the Matlab codes of the manual detection is introduced and the forthcomings are anlysized, and then the computer vision system toolbox is used to achieve face detection, based on the toolbox the experiment of detecting the video images is designed.All the experiments are written in Matlab code.Finally exercises are put forward how to realize the multi object video face detection problems. The experimental program enhances the students' understanding of face detection, stimulate students' interest in further study and research. At the same time, the program plays a good role in teaching the related courses, i.e., computer vision and pattern recognition, and effectively improves the teaching effect.
Key words: face detection; computer vision; Matlab; pattern recognition
人脸检测的主要目的是在输入的整幅图像上寻找人脸区域,利用计算机把图像分割成人脸区域和非人脸区域两个部分。近年来,人脸检测已经成为计算机视觉和模式识别领域中的一个非常活跃的研究方向,在身份验证、人机交互、可视通信、公安档案管理等很多方面都有着极为重要的应用价值,准确、快速的人脸检测是人脸识别的基础和关键。目前,主流的人脸检测方法有基于统计模型、基于模板匹配、基于支持向量机、基于概率模型和基于肤色等方法[1-9]。这些方法可以不同程度地实现对人脸的检测,获得较好的检测效果,但对于大学三年级的本科生而言,这些方法难于理解和实现。如何能让学生对人脸检测感兴趣,简单易学的操作,激发学生学习相关算法的兴趣,值得进一步探讨。本文主要基于Matlab[10]计算机视觉系统工具箱设计简单易学的人脸检测实验,通过实验操作增强学生对人脸检测的理解,激发学生进一步学习和研究的兴趣。
1 计算机视觉系统工具箱介绍
计算机视觉系统工具箱(Computer Vision System Toolbox,CVST)是Matlab2012b版本自带工具箱。该工具箱不仅包括用于特征提取、运动检测、目标检测、目标跟踪、立体视觉、视频处理、视频分析的算法,还包括视频文件输入输出,视频显示,绘图以及合成。这些功能以Matlab函数、Matlab系统对象、Simulink块的形式提供。对于快速原型和嵌入式系统设计,该工具箱支持定点算法和C代码产生。
计算机视觉系统工具箱的人脸检测算法主要基于Viola-Jones的人脸检测[11],通过内置的类和函数进行人脸甚至是鼻子、嘴以及眼睛的自动检测。Viola-Jones人脸检测是Paul viola 和 Michael J Jones共同提出的一种人脸检测算法,该算法原理简单,耗费资源小,在提出后被广泛用于人脸检测。Viola-Jones人脸检测主要包含Haar-like特征、积分图、AdaBoost迭代算法和级联分类器等内容,实现人脸检测的主要步骤是:①利用Haar-like矩
形特征表征人脸,使用“积分图”对图像中的矩形特征进行快速计算。②利用AdaBoost算法从数量巨大的Haar-like特征中训练出人脸检测所需要的分类器。③将训练得到的强分类器进行级联,利用级联的强分类器构成最终的分类器。
计算机视觉系统工具箱只需要用简单的命令即可实现人脸检测。调用工具箱中的vision.CascadeObjectDetector即可运行。不仅运行速度较快,且人脸检测准确度很高。经过自行改进,可进行批处理。
2 实验设计
2.1 实验环境
1) 操作系统。Windows XP 或以上版本。
2) 软件。Matlab2012b及以上版本。
3) 彩色人脸图像。数据来源于麻省理工学院生物和计算学习中心人脸识别数据库(http://cbcl.mit.edu/software-datasets/heisele/facerecognition-database.html)。
2.2 实验内容
实验设计思想:首先设计人脸检测的手动检测实现,通过手动检测的操作指出手动检测在处理多人脸图像和人脸视频时的不足;然后利用计算机视觉系统工具箱实现人脸检测,并在此基础上设计实现单一人脸视频检测;最后提出如何实现多人脸视频检测的练习题。
2.2.1手动检测
问题:如何利用Matlab将给定图像里的人脸区域标识出来。
分析:首先将图像读入Matlab并显示输出,然后通过观察确定人脸位置,利用鼠标动态选取一个矩形框来确定人脸位置,并保存矩形框输出标识后的图像。
主要代码:
pic = imread('face1.jpg');imshow(pic);impixelinfo;%读取并在Matlab里显示图像
pic_little=imrect;%手动确定人脸区域的矩形框
手动检测的特点是所见即所得,简单易学,容易操作;不足之处是当图像数量多或单幅图像上人脸不止一个时,重复工作量大,操作枯燥。
2.2.2CVST检测
问题:如何利用Matlab软件将人脸区域自动标识出来。
分析:通过调用计算机视觉系统工具箱可以实现人脸的自动标识。具体步骤是先构造人脸检测对象,在Matlab里读取图像,然后利用step函数检测人脸,将人脸坐标信息存入position变量中,最后利用position中的信息和insertShape函数输出标识后的图像。
主要代码:
faceDetector = vision.CascadeObjectDetector(); %构造人脸检测对象
image = imread('face2.jpg'); %读取图像
position = step(faceDetector, image); %开始检测,将结果存储到position变量中。
finalImage = insertShape(image, 'Rectangle', position); %标识人脸
imshow(finalImage); %最终图像输出
2.2.3 批处理人脸检测
问题:当处理人脸视频或有多幅人脸图像时如何将人脸区域自动截取出来。
分析:先创建人脸检测对象;然后顺序读取指定文件夹内的图像,考虑到图像文件的存储格式不同,需要设计适合多种文件格式的批处理文件读取;当图像读入后逐一利用step函数实现人脸截取;最后输出保存人脸区域。
主要代码:
FDetect = vision.CascadeObjectDetector;%创建人脸检测对象
pathname=uigetdir(cd,'请选择文件夹');
%可适用于多种文件格式
filesbmp=ls(strcat(pathname,'\*.bmp'));
filesjpg=ls(strcat(pathname,'\*.jpg'));
filesjpeg=ls(strcat(pathname,'\*.jpeg'));
filesgif=ls(strcat(pathname,'\*.gif'));
filestif=ls(strcat(pathname,'\*.tif'));
filespng=ls(strcat(pathname,'\*.png'));
files=[cellstr(filesbmp);cellstr(filesjpg);...
cellstr(filesjpeg);cellstr(filesgif);...
cellstr(filestif);cellstr(filespng)];
len=length(files);
flag=[];
% 开始批量处理图像,转换格式
for i=1:len
if strcmp(cell2mat(files(i)),'')
continue;
end
Filesname{i}=strcat(pathname,'\',files(i));
I{i}=imread(cell2mat(Filesname{i}));
BB = step(FDetect,I{i});
flag=[flag i];
J=I{i}(BB(2):BB(2)+BB(4),BB(1):BB(1)+BB(3),:);
pic_new{i}=J;
end
for i=1:length(flag)
name=cell2mat(Filesname{flag(i)});
d=strfind(name,'.');
name=name(1:d(end)-1);
Name=strcat(name,'检测图.jpg');
imwrite(pic_new{flag(i)},Name );
end
2.2.4实验结果
2.2.5练习题
问题一,人脸视频自动检测代码只适用于每幅图像一个人脸,如何实现每幅图像多个人脸的视频图像检测?
问题二,请尝试利用计算机视觉工具箱检测侧脸图像。
3 结论
本文通过三个循序渐进的实验设计介绍了如何使用Matlab计算机视觉系统工具箱实现人脸检测。手动检测与自动检测的对比可以让学生对计算机视觉系统工具箱产生好奇心,图像文件的批处理可以提高学生的编程能力,侧脸检测可以让学生发现计算机视觉系统工具箱人脸检测算法的不足,激发学生学习相关课程、研究人脸检测算法的兴趣。
参考文献
[1] 杨定礼,张宇林,赵环宇,等.一种改进的人脸检测方法[J].实验室研究与探索,2015,34(2):111-116.
[2] 徐信,郝晓丽,王芳.基于Adaboost算法的远距离人脸检测[J].计算机工程与设计, 2015,36(4): 983-986.
[3] 董恩增,闫胜旭,佟吉钢.基于主动视觉的人脸检测与跟踪算法研究[J].系统仿真学报,2015,27(5):973-979.
[4] 樊慧慧,王金海. 一种复杂环境下的动态多人脸自动检测与实时跟踪方法[J].计算机应用研究, 2015,32(10): 3183-3186.
[5] 阳崇云,桑农,陈张一,陈子伊. 基于肤色模型与Adaboost算法的多视角人脸检测[J].华中科技大学学报(自然科学版), 2015, 43(I):271-275.
[6] 杨恒,张再军,杨东,张儒良.融合YCbCr肤色模型与区域标记的人脸检测算法研究[J].软件导刊, 2016,15(2):41-43.
[7] 张小龙,刘书炘,刘满华.基于级联支持向量机融合多特征的人脸检测[J].计算机应用与软件, 2016,33(4):151-154.
[8] 华晓彬,袁明新,王彬彬,张丽民.基于肤色正态分布模型的自适应人脸动态检测[J].江苏科技大学学报(自然科学版),2016,30(2):162-166.
[9] 王庆伟,应自炉. 一种基于Harr-Like T特征的人脸检测算法[J].模式识别与人工智能,2015,28(1):35-41.
[10] 马奎斯.实用MATLAB图像和视频处理[M].清华大学出版社,2013.
[11] Viola P, Jones M. Rapid Object Detection using a Boosted Cascade of Simple Features[J]. Conference on Computer Vision & Pattern Recognition, 2010(1):511.