吳建平 詹楨 鄧鑫



摘 ?要:文章基于YCbCr色彩空間理論,建立二維高斯模型將樣本圖片轉換成膚色似然圖,并對其進行腐蝕、膨脹處理,得到人臉區域;將訓練好的弱分類器組成強分類器,進一步組成級聯分類器,結合Adaboost算法,最終確認樣本圖片的人臉區域。
關鍵詞:人臉識別;YCbCr色彩模型;Adaboost算法;人臉膚色區域
中圖分類號:TP391.41 文獻標志碼:A ? ? ? ? 文章編號:2095-2945(2020)25-0040-03
Abstract: Based on the YCbCr color space theory, this paper establishes a two-dimensional Gaussian Model to transform the sample image into a skin color likelihood image, and then corrodes and expands it to get the face region; the trained weak classifier is composed of a strong classifier to form a cascade classifier, and combined with the Adaboost algorithm, the face region of the sample image is finally confirmed.
Keywords: face recognition; YCbCr color model; Adaboost algorithm; facial skin color region
1 需要解決的問題
本文研究的問題來源于2018年第十一屆華中地區數學建模邀請賽A題:通過運用所學知識建立人臉位置判斷的數學模型,判斷出人臉在照片中的大致位置,并在圖片中用擬設計的模型“框出”人臉的大致位置。
2 YCbCr色彩空間理論介紹
2.1 YCbCr色彩空間理論[1]
YCbCr色彩空間是ITU-RBT.601的一部分,YCbCr或Y'CbCr顏色空間通常用于膠片或數碼攝影系統的連續圖像處理。實際上YCbCr是YUV的一個縮放版本。YCbCr和YUV中的Y有著相同的含義。其中Y表示亮度(luma)分量(灰度值),Cb表示藍色色度分量,Cr表示紅色色度分量。
2.2 膚色檢測[2]
膚色是人臉先天存在的特征,將膚色作為人臉檢測的出發點是最直接的方式。在人臉圖像中,膚色一般是相對集中且穩定的具有一定程度聚類性質的連通區域,同時根據研究表明,雖然人存在年齡、種族以及性別的差別,但將人臉經過灰度化處理后其差異主要表現在亮度上,因此,膚色檢測是人臉檢測極好的手段,但要想獲得在圖像空間中的膚色,就需要通過膚色檢測和膚色分割來實現,進而才能進一步檢測出人臉在圖像中存在的區域。人臉檢測實現的基本流程圖如圖1。
3 建立模型求解
3.1 顏色空間和膚色模型
3.2 Adaboost算法具體步驟
Adaboost是一種迭代算法[5-6],同樣也是級連算法,它的基本思想是將整個訓練集分成許多不同訓練的弱分類器,當分類器分類正確的時候,減小分類器的權值,當分類器分類錯誤時,需要對分類器增加權值。當多個弱分類器能夠正確分類時,將其組成強分類器,最后將強分類器串聯成一個級聯分類器,該訓練好的級聯分類器便可用于人臉檢測。Adaboost算法中弱分類器的訓練過程具體如下:
3.2.1 設訓練樣本(x1,y1),(x2,y2),…,(xn,yn),其中yi=1表示訓練樣本圖像是人臉,也就是正樣本,而yi=0表示訓練樣本圖片為非人臉,也就是負樣本。設訓練樣本圖片中人臉正樣本的個數為n1,非人臉的負樣本的個數為n2。
3.2.2 在訓練過程中,需要對弱分類器進行權重初始化,當第i個弱分類器對第j個樣本分類出現錯誤時,則增大第j個樣本在后續分類器中的權重。其權重初始化為:
3.2.3 設共需從原有的N個分類器中選擇T個弱分類器,用t來進行當前弱分類器的技術,則t=1,2,…,T;第t輪的最佳弱分類器為:
(1)權重歸一化。(2)弱分類器訓練。(3)最佳弱分類器選取。(4)權重更新。
3.2.4 訓練器在經過T輪訓練后,很大程度上可以獲得T個最佳分類器,其中,因每5個弱分類器在訓練中或正確的情況不同,因而有不同的權重,所有每個弱分類器都有其對應的特征、閾值和方向指示符。最后,通過線性加權出錯將弱分類器合成強分類器:
3.3 模型求解結果
借助Matlab計算工具,編寫人臉檢測的代碼,識別結果如圖2、3、4、5所示。
Matlab人臉檢測部分程序:
close;
clear all;
clc;
M = [124.2125 132.9449]' ?; %膚色均值
Sigma =[75.3881 ?40.2587 ? 40.2587 ?250.2942];%膚色方差
Img ?= imread('xjpic.jpg');
figure,imshow(Img),title('原始圖像');
Img2 ?= rgb2ycbcr(Img);%顏色空間轉換
% figure,imshow(Img2(:,:,1));title('Y');