计算机视觉实验四 人脸面部识别
完整源碼鏈接: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)內” )不符合要求的去掉
- 符合要求的區域也可能是胳膊,服飾之類的。我們在這個區域內找眼睛。在膚色的二值圖像里,眼珠位置一般是黑色,所以我們將這個區域圖像取反,再進行連通區域分析,按眼睛與臉的外接矩形尺寸比例篩選得到眼睛。如果在這個區域里能找到一個以上眼睛,判定這個區域是臉
- 將臉區域框起來
二、人臉識別程序流程
根據以上原理分析,在適宜步驟處加上去噪,形態學處理,效果更好。總流程圖如下:
三、實現步驟
1、利用膚色高斯模型完成人臉區域提取
流程圖:
- 轉成ycrcb色彩空間,
- 高斯濾波去噪
-
閾值劃分形成二值圖像
見原理分析中,利用膚色高斯模型,為簡化計算,不需要每次都計算概率,取了一個,cr與cb的范圍,能到達一樣的效果
2、人臉區域形態學處理
用開操作處理上步得到的,二值圖像,可以強調眼部等細節,去掉一些噪聲
kernel = cv2.getStructuringElement(cv2.MORPH_CROSS,(5,5)) skin_opening = cv2.morphologyEx(skin, cv2.MORPH_OPEN, kernel)3、人臉區域的篩選和標定
- 將連通區域標定,
- 先利用人臉高寬比篩選,淘汰掉特別小的框和高度比不符合“三庭五眼”的
- 再將篩選后的區域,按同樣的原理(連通區域標記處理),確定是否有眼睛特征,進一步篩選,符合條件的打框標定
四、結果展示
當一張圖片臉數量很多時,效果可能不太好,因為,篩選過程中,為去除雜質,將尺寸與圖像尺寸比例較小的框去掉了,如圖
總結
以上是生活随笔為你收集整理的计算机视觉实验四 人脸面部识别的全部內容,希望文章能夠幫你解決所遇到的問題。