摘 要:人脸识别是身份验证中最为关键的一步,因此基于MATLAB软件对人脸识别的各个流程及具体实现方法进行了研究。通过对所获取的图像进行灰度、均衡化以及中值滤波去噪预处理,去除图像中存在的干扰和噪声,得到更为清晰的图像之后基于肤色对待识别对象的脸部进行定位,同时利用灰度积分提取其眼睛部位,将测试图像导入GUI界面,与系统中提前录入的图像进行直方图对比,在匹配成功后显示最终的匹配识别结果。程序仿真结果表明,所研究的方法可以很好地完成各部分功能,提高系统识别的准确程度,达到有效识别人脸的目的。
关键词:人脸识别;MATLAB;图像处理
中图分类号:TP391.4 文献标识码:A 文章编号:2096-4706(2023)05-0068-06
Research on Face Recognition Based on MATLAB
ZHANG Lifang
(Shandong Huayu University of Technology, Dezhou 253034, China)
Abstract: Face recognition is the most critical step in identity verification, so the various processes and specific implementation methods of face recognition are studied based on MATLAB software. The obtained image is pretreated by grayscale, equalization and median filtering to remove the interference and noise in the image. After obtaining a clearer image, the face of the object to be recognized is located based on the skin color. At the same time, the eye part is extracted by grayscale integration. The test image is imported into the GUI interface and compared with the histogram of the image entered in advance in the system, the final matching recognition result is displayed after the matching is successful. The simulation results show that the proposed method can complete all functions well, improve the accuracy of system recognition, and achieve the purpose of effective face recognition.
Keywords: face recognition; MATLAB; image processing
0 引 言
人臉识别作为模式识别和图像处理等学科的一个热门课题,被广泛应用于身份验证、犯罪侦查、智能机器以及医疗等领域,具备很高的社会价值和商业意义。随着社会经济的迅速发展,信息技术水平越来越高,各种高新产品层出不穷,尤其是在身份验证方面表现得更为突出。目前有大部分场所采取身份验证的方式替代人工核查身份,尤其是在企业中应用得更多。由于企业在不断地扩大自身的发展规模,企业中的员工数量也越来越多,信息化的到来又使得企业开始引入各式各样的科技系统来满足自身的发展需要,以此简化管理模式,提高工作效率。而人脸识别就是身份验证系统中最为关键的一步,目前主流的生物特征识别已经广泛地应用于考勤系统中,正在逐步扩展至身份验证的场合。
1 人脸识别基本理论
人脸识别技术是指利用电子计算机技术来识别人脸。该技术属于生物特征识别技术的一种,具有工作效率高、性能稳定、获取信息方便且不需要人工接触等特点,主要是基于人的面部特征进行人脸识别,其技术流程包括五个部分[1],如图1所示。
首先,进行人脸图像的采集及检测。图像采集是指通过设备捕捉用户的面部图像,得到用户的面部信息,并将其记录到数据集中;图像检测是指对前期采集到的图像进行人脸位置的标定,在图像中将其标注出来,并利用这些信息完成后续过程。
其次,进行人脸图像预处理。图像预处理是人脸识别的关键步骤,鉴于人脸图像提取流程的复杂性,对其进行了相应的预处理,比如光线会影响图像的品质,提取设备的质量也会影响图像成型的效果,随着识别对象年龄的增加其面孔颜色及姿势也会出现变化等,这些情况都会对人脸识别产生一定的负面影响,因此采用预处理技术对人脸图片做出相应的调整。
再次,进行人脸图像特征提取[2]。特征提取是针对人脸的某个特定部位而进行的,通过对人脸特征器官的定位与标记即可判断出人脸图片中具有特征点的部位。基于对人脸特征点定位与标定的结果,对人脸进行建模,提取特征器官信号,并缩小比对区域,获取匹配识别的关键特征。
最后,进行人脸图像匹配与识别。从给定的图像中提取器官特征,将该特征与提前录入到图像中的器官特征进行比对,设置好相应阈值,根据比对的数值进行判断[3],如果达到或超过预设的相似值,表示匹配成功,反之则表示匹配失败。
2 人脸识别的方法研究
2.1 人脸图像预处理过程
人脸图像可以使用摄像机的镜头来获取,但所获取的人脸图像可能存在模糊、不清晰等问题,因此,这里选用灰度转换、直方图均衡、中值滤波三种方法,依次对图像进行预处理。
2.1.1 灰度变换预处理
根据图像的颜色,可将图像分为灰度图像和彩色图像,图像的每个像素都有颜色和位置两种属性。在彩色图像中,每个像素由红、绿、蓝三个字节组成,每个字节有八位,可以表示0至255的所有亮度值[4]。由于彩色图像不仅有位置信息,还有颜色信息,巨大的信息量不仅会对人脸检测造成很大的干扰,还会降低工作效率,因此对图像进行灰度预处理能够减少位置信息之外的干扰因素。常见的灰度变换方法有函数法、分量法、最大值法、平均值法和加权平均法五种。
本文选取加权平均法对人脸图像进行灰度化处理,利用式(1)获得较为合理的灰度图像。
(1)
变换过程如图2所示。
2.1.2 直方图均衡化预处理
在对人脸图片进行灰度预处理之后,灰度分布会聚集在一个面积极小的区域里,因此对比度较弱,图片的细节也不够清晰,此时就可通过直方图均衡化的方式进行第二次预处理,使灰度分布趋于一致,图像的灰度间隔增大,进而增强了图片的对比度,提高了视觉效果,从而实现了图像质量增强的目的[5]。具体步骤如下:
首先统计原始图像的直方图,利用式(2)进行计算:
(2)
利用式(3)计算直方图累积分布曲线:
(3)
采用累积分布函数作为变换函数进行图像灰度变换。根据计算得出的原图像直方图数值,对比归一化灰度级得出新的累积分布曲线,得出原图像和均衡后图像之间灰度级的对应关系[6]。也就是说,累积分布曲线被重新定位。
2.1.3 中值滤波预处理
经过前两次的预处理,人脸图像由于环境条件、传输等因素可能会存在一定的失真,因此需要通过滤波、平滑等方法来抑制图像噪声,获得一幅较为清晰的人脸图像。本文采用中值滤波的方法进行第三次预处理。中值滤波的基本原理是将数字图像或数字序列中的像素点按照从小到大的顺序排列,将中间位置的值作为滤波后的结果[7],从而使周围的图像数值逼近于真实值,以便减少孤立的噪声点。采用中值滤波不会造成图像内容的失真,可以保留更多的细节特征。
2.2 人脸定位
本文选用基于肤色的人脸定位技术,该技术的研究需要选择肤色空间,建立肤色模型。目前的硬件设备均在RGB颜色空间中捕获图像,但RGB颜色空间不适合肤色的差异,因此有必要将RGB颜色空间转换为YCbCr颜色空间。YCbCr颜色空间主要用于区分对比度和饱和度,适用于肤色对比度差值远小于饱和度差值的图像,有利于肤色区域的明暗分离[8]。RGB颜色空间可以根据它们之间的关系直接转换为YCbCr颜色空间。
在实现图像颜色空间转换后,建立高斯肤色模型。由于高斯肤色模型具有统计显著性,可以认为符合正态分布的随机样本也符合高斯模型。高斯函数的公式为:
(4)
其中,Cb和Cr分別表示蓝色和红色的浓度偏移量成份,x=[Cb,Cr]T表示样本像素在YCbCr空间的值;m=E(x)=[E(Cb), E(Cr)]T表示YCbCr空间的样本均值;C=E[(x-m)(x-m)T]表示肤色相似度的2×2协方差矩阵。
将YCbCr空间中样本每个点的值引入高斯函数,使第i个点的相似度值为:
(5)
因为S(i)的取值范围为[0, 255],根据肤色相似度所对应的值就可以确认肤色。通过高斯肤色模型,判断每个像素的肤色相似度,并生成一个黑白区域,其中肤色点为白色,非肤色点为黑色。然后对黑白图像进行形态学处理,以连接面部区域。
2.3 特征提取
本文选择了人眼这个部位来进行提取。由于两只眼睛相隔一定的距离,不受光照和面部表情等因素的干扰,特征更为突出,比较容易提取,利用眼睛进行定位可以提高判断的准确率。根据人眼的特性,本设计选择基于肤色分割的算法来实现人眼的定位。
2.3.1 肤色提取
由于肤色是脸部的主要特征,与面部的细节变化无关,拥有较高的稳定性。同时肤色能与大多数的干扰物分离,具有较强的鲁棒性,但肤色在色度上过于集中,相邻区域的区别不够明显,所以需要将图像从RGB彩色空间映射到YCbCr彩色空间进行处理。根据特性建立肤色模型,将图像的类肤色区域标记为255,其他区域标记为0,转化为二值图像。
2.3.2 形态学滤波
生成的二值图像具有大量的白色像素块及部分噪声,形态学处理能够消除噪声,切分单独的图像元素以及连通相近的元素,然后进行人脸分割。将滤波之后的图像去除手部、腿部以及其他非人脸区域。基于先验知识,使用连通域标记和分析法,首先标记二值图像中的白色像素块,依次计算每个白色像素块的几何属性。通过计算外接矩形的长宽比和面积,判断该区域是否存在人脸。
2.3.3 人眼定位
图像中每一个像素点的灰度代表该点的颜色深度,灰度越大,意味着该像素点的颜色越深。人眼最主要的特征就是其灰度会比周围区域低,由此就能大致确定眼睛的水平位置,将垂直灰度积分曲线中获得的人眼值与黑洞区域的水平值进行对比,包含该值的黑洞区域即为人眼区域,以连通域的质心作为眼睛中心进行标注,得到眼睛的准确位置。
2.4 匹配识别
该部分采用灰度直方图的对比来实现,将所获取图像与数据库图像的直方图进行对比,如果二者一致,匹配成功,反之则失败。利用灰度直方图增强图像对比度是基于图像灰度进行统计的一种重要方法。它基于概率论,常用的实现算法有直方图均衡化和直方图规格化。
直方图均衡化主要用来提高动态范围较小图像的对比度。其基本思路是将原始图像的直方图转变为均匀分布的形状,并以此扩大图像灰阶值的动态范围,进而提高图像的整体对比度[9]。直方图均衡化的好处是能够自动提高整体图像的对比度,但由于其特定的增强效应而不易控制,处理结果总是得到全局均衡的直方图。在处理实际问题时,需要根据实际情况对直方图进行相应的改变,把它变成我们需要的形状,便于在特定灰度范围内选择增强特定部分的对比度,从而使图像的灰度值分布满足实际需求。
3 人脸识别的实现
将人脸图像引入MATLAB中进行匹配识别,从而获得匹配人脸的效果,对此过程进行研究。通过MATLAB的运行结果分析此方法与传统方法在识别上的差异性,最终得出实验结论。
3.1 实现方案
为进一步展现匹配的最终效果,按照如图3所示的步骤进行仿真。
选取图像作为实验测试的原始图像,开发环境为MATLAB软件。本次实验主要讨论的议题是本文所选用的研究方法能否最终实现人脸匹配的效果,同时根据仿真结果分析本研究存在的不足,以此得出实验结论。
3.2 对图像进行预处理实验
3.2.1 算法实现
对原始图像进行灰度和均衡化处理形成灰度图。将下面所写的程序代码放入MATLAB中运行,显示预处理后的仿真效果。
clc
clear %清理工作空间
I=imread('C:\Users\Admin\Desktop\img41.png'); %读取图像
figure,imshow(I); %显示原图像
I1=rgb2gray(I); %将原图进行灰度处理,得到灰度图像
BW=im2bw(I1); %转换为二值图像
figure,imshow(BW) %显示二值图像
[n1 n2]=size(BW);
r=floor(n1/10); %取最近的较小整数
c=floor(n2/10);
x1=1;
x2=r;
s=r*c;
for i=1:10
y1=1;
y2=c;
for j=1:10
if((y2<=c|y2>=9*c)|(x1==1|x2==r*10)) %判斷目的是将图像最外围全部归零
loc=find(BW(x1:x2,y1:y2)==0); %查找矩阵中满足条件的位置
[o p]=size(loc);
pr=o*100/s;
if pr<=100
BW(x1:x2,y1:y2)=0;
r1=x1;r2=x2;s1=y1;s2=y2;
pr1=0;
end
imshow(BW);
end
y1=y1+c;
y2=y2+c;
end
x1=x1+r;
x2=x2+r;
end
figure,imshow(BW) %显示均衡化后的图像
3.2.2 实验结果
上述工作完成后,将会得到以下仿真结果。其中,如图4所示为预处理前的效果,如图5所示为灰度处理后的效果,如图6所示为均衡化后的效果。
3.3 对图像进行人脸定位实验
3.3.1 算法实现
对预处理形成的灰度图进行人脸定位。在MATLAB中编写并运行如下定位人脸区域的程序,以获得人脸定位后的仿真效果图。
L=bwlabel(BW,8); %找到连通区域,定义为8连通
BB=regionprops(L,'BoundingBox'); %区域特征
BB1=struct2cell(BB);
BB2=cell2mat(BB1);
[s1 s2]=size(BB2);
mx=0; %最大连通区域,初值为0
for k=3:4:s2-1
p=BB2(1,k)*BB2(1,k+1); %求取连通区域的面积
if (p>mx & (BB2(1,k)/BB2(1,k+1))<1.8) %选取长宽比大于1.8的最大连通区域
mx=p;
j=k;
end
end
figure,imshow(I1); %显示灰度图
hold on; %始终保持显示
rectangle('Position',[BB2(1,j-2),BB2(1,j-1),BB2(1,j),BB2(1,j+1)],'EdgeColor','r')
%使用该函数绘制一个矩形将人脸位置框出
3.3.2 实验结果
上述工作完成后,得到如图7所示的人脸定位仿真结果图。
3.4 对图像进行人眼提取实验
3.4.1 算法实现
在人脸定位所得到的区域中进行人眼部位的提取,并在图像中标注出人眼的位置。在MATLAB中编写并运行如下定位人眼区域的程序,以获得人眼定位后的仿真效果图。
detector=vision.CascadeObjectDetector('LeftEyeCART');
input_image=imread('img3.jpg');
figure();imshow(input_image);title('原图');
gauss_image=imgaussfilt(input_image,1);
eyes=step(detector,gauss_image);
size_eyes=size(eyes);
hold on;
for i=1:size_eyes(1);2
eyes_final=eyes(i,1:2);
image=imcrop(gauss_image,eyes(i,:));
rectangle('Position',eyes(i,:),'edgeColor','b');
image=rgb2gray(image);
image=im2double(image);
[grad_x,grad_y]=gradient(image);%计算梯度
g=grad_x.*grad_x + grad_y.*grad_y;
g=sqrt(g);%眼睛区域的梯度图
std_g=std(g(:));%计算标准差
mean_g=mean(g(:));%计算平均值
g_1=g;
g_1(g_1 < mean_g + 0.5*std_g)=0;
g_2=g;
g_2(g_2 > mean_g - 0.5*std_g)=0;
g=g_1 + g_2;
temp_g=g;
w=1-image;
temp_g(temp_g~=0)=1;
grad_x=grad_x.*temp_g;
grad_y=grad_y.*temp_g;
size_img=size(image);
Dx=repmat(1:size_img(2),size_img(1),1);
Dy=repmat(transpose(1:size_img(1)),1,size_img(2));%转置
C_max=0;
X=0;
Y=0;
for x=1:size_img(2)
for y=1:size_img(1)
D_x=Dx-x;
D_y=Dy-y;
D_t=D_x.*D_x+D_y.*D_y;
E=sqrt(D_t);
D_x=D_x./E;
D_y=D_y./E;
C_x=D_x.*grad_x;
C_y=D_y.*grad_y;
C=w(y,x)*(C_x+C_y);
C(C<0)=0;
ind=find(isnan(C));
C(ind)=0;
total_C=sum(sum(C));
If (total_C>C_max)
C_max=total_C;
X=x;
Y=y;
end
end
end
plot(X+eyes_final(1),Y+eyes_final(2),'r+','MarkerSize',10);
p(i,1)=X+eyes_final(1);
p(i,2)=Y+eyes_final(2);
end
3.4.2 實验结果
上述工作完成后,将会得到如图8所示的人眼定位仿真结果图。
3.5 对图像进行匹配识别实验
绘制如图9所示的GUI界面,通过Training按键对仿真系统进行训练,通过Input Image按键输入给定的图像,通过Testing按键与数据集中的图像进行比对,显示匹配结果。上述工作完成后,将会得到如图10所示的仿真结果图。
匹配成功后,会按照匹配的人脸图像在MATLAB中显示该图像所对应的身份信息,完成人脸识别的工作。仿真实验中,通过在程序中编写“Correctly Recognized”字样语句来显示识别结果。
4 结 论
根据企业在身份识别方面的社会需求,总结了人脸识别在身份验证领域的主要应用,并对具体方法进行了研究,为仿真实验做好准备。由于在获取人脸图像时存在一定的干扰因素,故介绍三种预处理方法,可以更好地解决亮度、姿势等方面的问题,为后续的人脸定位做好准备,提高定位的准确度。深入研究了人脸定位算法,并根据实际情况选取了基于肤色的显式特征方法;详细论述了该方法的使用过程,并结合实例说明该方法的适用性和有效性。从特征点定位角度出发,深入研究了人眼定位算法,总结人眼定位过程,实现特征提取的功能。在各个功能模块中均采用实际示例进行模拟测试,测试结果表明,该算法具有良好的实用性,可在一定范围内推广使用。
参考文献:
[1] 杨三永.基于机器人手眼协调的运动物体抓取方法研究 [D].广州:广东工业大学,2020.
[2] 陈顺成.基于移动互联网的高速小行程激光雕刻机研究与开发 [D].广州:广东工业大学,2020.
[3] HU X Y,CHEN Q,YE X H,et al. Research on the Region-Growing and Segmentation Technology of Micro-Particle Microscopic Images Based on Color Features [J/OL].Symmetry,2021,13(12):[2022-09-12].https://www.mdpi.com/2073-8994/13/12/2325.
[4] 周品.基于机器学习的人脸识别算法研究与考勤系统设计 [D].佛山:佛山科学技术学院,2020.
[5] 汪嘉明,赵发友.利用Matlab实现人脸检测与人脸马赛克 [J].安庆师范大学学报:自然科学版,2019,25(2):62-65.
[6] 任杰,熊黎丽,李国勇.基于人脸识别技术的智慧课堂平台设计及应用 [J].自动化与仪器仪表,2021(5):121-122+127.
[7] 汪嘉明,赵发友.利用Matlab实现人脸检测与人脸马赛克 [J].安庆师范大学学报:自然科学版,2019,25(2):62-65.
[8] 韩笑,张晶,李月龙.基于手势几何分布特征的手势识别 [J].计算机科学,2019,46(S1):246-249+262.
[9] 牛晓程.智能变电站视频监控中运动物体的识别 [D].沈阳:沈阳农业大学,2018.
作者简介:张丽芳(1988—),女,汉族,山西朔州人,讲师,硕士研究生,研究方向:图像处理。
收稿日期:2022-10-02
基金项目:2021年山东华宇工学院科技计划项目(2021KJ12);2021年度教学改革研究项目(2021JG01)