计算机视觉实验四 人脸面部识别 |
您所在的位置:网站首页 › 人脸三庭五眼比例画法 › 计算机视觉实验四 人脸面部识别 |
完整源码链接:https://github.com/LamyaLi/cvLab 文章目录 一、人脸检测技术原理1、原理总说2、基于肤色高斯模型实现人脸区域分割提取的原理3、根据人脸特征筛选 二、人脸识别程序流程三、实现步骤1、利用肤色高斯模型完成人脸区域提取2、人脸区域形态学处理3、人脸区域的筛选和标定 四、结果展示 一、人脸检测技术原理 1、原理总说在检测到人脸并定位面部关键特征点之后,主要的人脸区域就可以被裁剪出来,经过预处理之后,馈入后端的识别算法。识别算法要完成人脸特征的提取,并与库存的已知人脸进行比对,完成最终的分类。 本实验要做的就是人脸识别工作的第一步:人脸检测与框定 主要利用的人脸特征是肤色,高宽比( “三庭五眼 ”规则高度和宽度比例应该在( 0.6, 2)内” ),眼部特征 基于肤色的人脸分割主要分为三大部分:(1)预处理,针对噪声,光照带来的影响进行消除。(2)基于肤色模型的肤色分割。(3)连通域分析,人脸区域定位。 2、基于肤色高斯模型实现人脸区域分割提取的原理 通过比较RGB,HSV,Ycbcr空间,发现Ycbcr和HSV空间在进行人脸肤色分割方面由于肤色范围紧密(如图),不易受光照其他物体干扰(基于肤色模型的,如果背景中有与人脸颜色类似的物体,且距离较近很容易产生干扰,影响人脸区域定位的准确性,这也是这一算法不能解决的问题)。但是RGB与HSV空间的转换相比RGB到Ycbcr空间转换来说较为复杂些,所以我们采用Ycbcr空间进行人脸肤色的建模与分割。肤色分布符合高斯分布(如图) 我们可以根据肤色的均值和方差建立肤色的高斯模型。 其中Cb,Cr的均值和协方差如下: Mean = [117.4316 148.5599] C = [97.0946 24.4700,24.4700 141.9966] 给定一个图像的一个像素点x,可以计算它是人皮肤的概率p(x),概率小于0.22,的点取灰度值0,否则取255, 得到一幅二值图像,其中白色的区域是人皮肤。 3、根据人脸特征筛选 人脸区域定位,使用连通区域分析,获取二值图像最小外接矩形,即为人脸区域。 采用的是八邻域连通。高宽比( “三庭五眼 ”规则高度和宽度比例应该在( 0.6, 2)内” )不符合要求的去掉符合要求的区域也可能是胳膊,服饰之类的。我们在这个区域内找眼睛。在肤色的二值图像里,眼珠位置一般是黑色,所以我们将这个区域图像取反,再进行连通区域分析,按眼睛与脸的外接矩形尺寸比例筛选得到眼睛。如果在这个区域里能找到一个以上眼睛,判定这个区域是脸将脸区域框起来 二、人脸识别程序流程根据以上原理分析,在适宜步骤处加上去噪,形态学处理,效果更好。总流程图如下: 流程图: 阈值划分形成二值图像 见原理分析中,利用肤色高斯模型,为简化计算,不需要每次都计算概率,取了一个,cr与cb的范围,能到达一样的效果 skin=np.zeros_like(cr) for i in range(img.shape[0]): for j in range(img.shape[1]): if y[i][j]133 and cr_gaussian[i][j]77 and cb_gaussian[i][j]1/15 and (max_col - min_col)/img.shape[0]>0.05: height_width_ratio = (max_row - min_row) / (max_col - min_col) if height_width_ratio>0.6 and height_width_ratio=h: count=count+1 img_copy = cv2.rectangle(img_copy, (min_col2 + minc, min_row2 + minr), (max_col2 + minc, max_row2 + minr),(0, 255, 0), 2) print(count) if count>=1: img=img_copy return True return False 四、结果展示当一张图片脸数量很多时,效果可能不太好,因为,筛选过程中,为去除杂质,将尺寸与图像尺寸比例较小的框去掉了,如图 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |