◆邵 嵐 姚艷松 尚 福
?
基于PCA人臉識(shí)別原理
◆邵 嵐 姚艷松 尚 福
(CLO 北京 100054)
文章主要討論了人臉識(shí)別灰度化、生物特征的幾種方法和原現(xiàn),以及如何實(shí)現(xiàn)灰度化。同時(shí)分析了一種常見卻并不妥當(dāng)?shù)幕叶然瘜?shí)現(xiàn),以及證明了opencv的灰度化是使用“加權(quán)灰度化”法,能從整體上反映人臉圖像的灰度相關(guān)性具有一定的實(shí)用價(jià)值。
人臉識(shí)別;灰度化;人臉特征;識(shí)別技術(shù)
人臉識(shí)別人是基于人的面部特征信息進(jìn)行身份識(shí)別的一種生物識(shí)別技術(shù)。使用攝像頭或者攝像機(jī)采集含有人臉的圖像或視頻,自動(dòng)檢測(cè)圖像信息和跟蹤人臉,對(duì)檢測(cè)到的人臉進(jìn)行臉部的一系列相關(guān)分析技術(shù)。
人臉檢測(cè)是指從復(fù)雜的背景當(dāng)中提取我們感興趣的人臉圖像。臉部毛發(fā)、化妝品、光照、噪聲、人臉傾斜和大小變化及各種遮擋等因素都會(huì)導(dǎo)致人臉檢測(cè)問題變得更為復(fù)雜。人臉識(shí)別技術(shù)主要目的在于在輸入的整幅圖像上尋找特定人臉區(qū)域,從而為后續(xù)的人臉識(shí)別做準(zhǔn)備。
在計(jì)算機(jī)領(lǐng)域中,灰度(Gray scale)數(shù)字圖像是每個(gè)像素只有一個(gè)采樣顏色的圖像。這類圖像通常顯示為從最暗黑色到最亮的白色的灰度,盡管理論上這個(gè)采樣可以表現(xiàn)任何顏色的不同深淺,甚至可以是不同亮度上的不同顏色。灰度圖像與黑白圖像不同,在計(jì)算機(jī)圖像領(lǐng)域中黑白圖像只有黑白兩種顏色,灰度圖像在黑色與白色之間還有許多級(jí)的顏色深度。但是,在數(shù)字圖像領(lǐng)域之外,“黑白圖像”也表示“灰度圖像”,例如灰度的照片通常叫做“黑白照片”。
“特征臉”方法中所有人共有一個(gè)人臉子空間,而我們的方法則為每一個(gè)體人臉建立一個(gè)該個(gè)體對(duì)象所私有的人臉子空間,從而不但能夠更好的描述不同個(gè)體人臉之間的差異性,而且最大可能地?cái)P棄了對(duì)識(shí)別不利的類內(nèi)差異性和噪聲,因而比傳統(tǒng)的“特征臉?biāo)惴ā本哂懈玫呐袆e能力。另外,針對(duì)每個(gè)待識(shí)別個(gè)體只有單一訓(xùn)練樣本的人臉識(shí)別問題,我們提出了一種基于單一樣本生成多個(gè)訓(xùn)練樣本的技術(shù),從而使得需要多個(gè)訓(xùn)練樣本的個(gè)體人臉子空間方法可以適用于單訓(xùn)練樣本人臉識(shí)別問題。人臉庫(kù)對(duì)比實(shí)驗(yàn)也表明我們提出的方法比傳統(tǒng)的特征臉方法、模板匹配方法對(duì)表情、光照、和一定范圍內(nèi)的姿態(tài)變化具有更優(yōu)的識(shí)別性能。
近期發(fā)展起來的用于人臉或者一般性剛體識(shí)別以及其它涉及到人臉處理的一種方法。首先把一批人臉圖像轉(zhuǎn)換成一個(gè)特征向量集,稱為“Eigenfaces”,即“特征臉”,它們是最初訓(xùn)練圖像集的基本組件。識(shí)別的過程是把一副新的圖像投影到特征臉子空間,并通過它的投影點(diǎn)在子空間的位置以及投影線的長(zhǎng)度來進(jìn)行判定和識(shí)別。
將圖像變換到另一個(gè)空間后,同一個(gè)類別的圖像會(huì)聚到一起,不同類別的圖像會(huì)聚力比較遠(yuǎn),在原像素空間中不同類別的圖像在分布上很難用簡(jiǎn)單的線或者面切分,變換到另一個(gè)空間,就可以很好的把他們分開了。Eigenfaces選擇的空間變換方法是PCA(主成分分析),利用PCA得到人臉分布的主要成分,具體實(shí)現(xiàn)是對(duì)訓(xùn)練集中所有人臉圖像的協(xié)方差矩陣進(jìn)行本征值分解,得到對(duì)應(yīng)的本征向量,這些本征向量就是“特征臉”。每個(gè)特征向量或者特征臉相當(dāng)于捕捉或者描述人臉之間的一種變化或者特性。這就意味著每個(gè)人臉都可以表示為這些特征臉的線性組合。
原始圖像投影到該特征空間中。特別說明,此時(shí)的原始圖像x存成大小是n維的向量,即:
訓(xùn)練集為形成矩陣X[n][p],其中行代表像元,列代表每幅人臉圖像[2]。
將訓(xùn)練樣本集中的人臉圖像減去平均人臉圖像,計(jì)算離散差值,將訓(xùn)練圖像中心化。中心化之后圖像組成一個(gè)大小為n×p的矩陣。
將中心化后的圖像組成的矩陣X乘以它的轉(zhuǎn)置矩陣得到協(xié)方差矩陣Ω。
求解協(xié)方差矩陣Ω的k個(gè)非零特征值,以及所對(duì)應(yīng)的特征向量,一般來說,訓(xùn)練圖像數(shù)量p遠(yuǎn)遠(yuǎn)小于一幅圖像的像素值n,所以協(xié)方差矩陣Ω最多有對(duì)應(yīng)于非零特征值的p個(gè)特征向量,所以k≤p.按照特征值的從大到小的順序排列特征向量,對(duì)應(yīng)于最大特征值的特征向量反應(yīng)了訓(xùn)練圖像間的最大差異,而對(duì)應(yīng)的特征值越小的特征向量,反應(yīng)的圖像間的差異越小。所有的非零特征值對(duì)應(yīng)的特征向量,組成特征空間,也就是所謂的“特征臉”空間。
計(jì)算特征值和特征向量,其中U為對(duì)應(yīng)于特征值的特征向集。排列特征向量:按照非零特征值,從大到小的順序,將對(duì)應(yīng)的特征向量排列。所組成的特征向量矩陣即為特征空間U,U的每一列為一個(gè)特征向量。
每一幅人臉圖像都可以投影到由張成的子空間中。因此每一幅人臉圖像對(duì)應(yīng)于子空間中的一個(gè)點(diǎn),同樣,子空間中的每個(gè)點(diǎn)對(duì)應(yīng)于一幅圖像,下圖顯示的是所對(duì)應(yīng)的圖像,由于這些圖像很像人臉,所以它們被稱為“特征臉”[5]。
圖1 特征臉
特征臉訓(xùn)練圖像投影得到特征臉子空間 有了這樣一個(gè)由“特征臉”組成的降維特征子空間,任何一幅中心化后的人臉圖像都可以通過下面的式子投影到特征臉子空間并獲得一組坐標(biāo)系數(shù)。
將彩色圖像轉(zhuǎn)化成為灰度圖像的過程稱為圖像的灰度化處理。
灰度化,在RGB模型中,如果R=G=B時(shí),則彩色表示一種灰度顏色,其中R=G=B的值叫灰度值,因此,灰度圖像每個(gè)像素只需一個(gè)字節(jié)存放灰度值(又稱強(qiáng)度值、亮度值),灰度范圍為0-255。
彩色圖像中的每個(gè)像素的顏色有R、G、B三個(gè)分量決定,而每個(gè)分量有255個(gè)值可取,這樣一個(gè)像素點(diǎn)可以有1600多萬(255*255*255)的顏色的變化范圍。而灰度圖像一個(gè)像素點(diǎn)的變化范圍為255種,所以在數(shù)字圖像處理種一般先將各種格式的圖像轉(zhuǎn)變成灰度圖像以使后續(xù)的圖像的計(jì)算量變得少一些。灰度圖像的描述與彩色圖像一樣仍然反映了整幅圖像的整體和局部的色度和亮度等級(jí)的分布和特征[3]。
一般有四種方法對(duì)彩色圖像進(jìn)行灰度化處理:分量法、最大值法、平均值法、加權(quán)平均法。
圖像灰度化處理有以下幾種方式:
將彩色圖像中的三分量的亮度作為三個(gè)灰度圖像的灰度值,可根據(jù)應(yīng)用需要選取一種灰度圖像。
f1(i,j)=R(i,j)
f2(i,j)=G(i,j)
f3(i,j)=B(i,j)
其中fk(i,j)(k=1,2,3)為轉(zhuǎn)換后的灰度圖像在(i,j)處的灰度值。
將彩色圖像中的三分量亮度的最大值作為灰度圖的灰度值。
f(i,j)=max(R(i,j),G(i,j),B(i,j))
將彩色圖像中的三分量亮度求平均得到一個(gè)灰度值。
f(i,j)=(R(i,j)+G(i,j)+B(i,j)) /3
根據(jù)重要性及其它指標(biāo),將三個(gè)分量以不同的權(quán)值進(jìn)行加權(quán)平均。由于人眼對(duì)綠色的敏感最高,對(duì)藍(lán)色敏感最低,因此,按下式對(duì)RGB三分量進(jìn)行加權(quán)平均能得到較合理的灰度圖像。[3]
f(i,j)=0.30R(i,j)+0.59G(i,j)+0.11B(i,j))
在Opencv中可以通過以上幾種方法的數(shù)值計(jì)算來得到灰度圖像也可以通過opencv提供的顏色空間轉(zhuǎn)換函數(shù)來得到。Opencv封裝灰度法將彩色圖轉(zhuǎn)為灰度圖[3]。
cv::cvtColor(rgbMat, greyMat, CV_BGR2GRAY);
完整的PCA人臉識(shí)別的應(yīng)用包括幾個(gè)步驟:人臉圖像預(yù)處理;讀入人臉庫(kù),訓(xùn)練形成特征子空間;把訓(xùn)練圖像和測(cè)試圖像投影到上一步驟中得到的子空間上;選擇一定的距離函數(shù)進(jìn)行識(shí)別。
PCA算法依賴于一個(gè)基本假設(shè):一類圖像具有某些相似的特征(如人臉),在整個(gè)圖像空間中呈現(xiàn)出聚類性,因而形成一個(gè)子空間,即所謂特征子空間,PCA變換是最佳正交變換,利用變換基的線性組合可以描述、表達(dá)和逼近這一類圖像,因此可以進(jìn)行圖像識(shí)別,PCA包含訓(xùn)練和識(shí)別兩個(gè)階段。
本文采用matlab作為工具平臺(tái), 實(shí)現(xiàn)了一個(gè)人臉自動(dòng)識(shí)別的系統(tǒng)原型。人臉庫(kù)中有40個(gè)人,各隨機(jī)取出其10張圖像中的7張用作訓(xùn)練集,剩余3張用作后續(xù)的測(cè)試。將280張train_imgs都拉伸成列向量并將所有列拼在一起,由于每張圖像的總像素?cái)?shù)都為10304,這樣就得到了10304*280的矩陣X,X的每列再減去均值向量,從而中心化,求出X的轉(zhuǎn)置和X的矩陣乘積,并求出乘積40*40矩陣的特征向量[1],是matlab的eig函數(shù)。濾出前K大的特征值對(duì)應(yīng)的特征向量W,再將X乘上W映射得到V,將V的每一列向量作為后續(xù)映射關(guān)系的一組基向量,共有K個(gè)基向量,也可以稱為K個(gè)特征臉。將X每一列都通過基向量矩陣V映射到對(duì)應(yīng)的特征空間中。這樣相當(dāng)于將每張圖像train_imgs都在新的空間中找到了對(duì)應(yīng)的位置。對(duì)于每個(gè)測(cè)試圖像,也進(jìn)行類似上述的變換:轉(zhuǎn)成列向量,減去均值向量而中心化,然后用基向量矩陣映射到特征空間中。要判斷測(cè)試圖像和40張train_imgs的哪張最匹配,只需對(duì)比測(cè)試圖像在特征空間的新坐標(biāo)和40張train_imgs在特征空間的坐標(biāo)直接的歐幾里得距離(或二范數(shù))的大小,找到二范數(shù)最小的對(duì)應(yīng)的train_img,就找到了最匹配訓(xùn)練圖像了。
這種算法的主要思想就是,去除部分無關(guān)的或者關(guān)系較小的向量,保留影響較大的向量作基,這樣即減少了基向量的數(shù)目從而減少了運(yùn)算量,同時(shí)又減少了圖像細(xì)節(jié),能避免無關(guān)的向量和測(cè)試圖像主人公的表情、臉朝向和配飾等變化對(duì)測(cè)試準(zhǔn)確性產(chǎn)生不良干擾。
Matlab代碼實(shí)現(xiàn)函數(shù)Training用來隨機(jī)讀取40*7張圖像并分別作平均產(chǎn)生訓(xùn)練集
function [ imgs ] = Get_Training_Set( input_path, index, height, width, output_path )
imgs = zeros(length(index), height, width);
for i = 1 : length(index)
imgs(i, :, :) = uint8(imread([input_path '/' num2str(index(i)) '.pgm']));
end
end
函數(shù)Test_Case用來測(cè)試單張圖像,循環(huán)調(diào)用即可測(cè)試所有的測(cè)試集圖像
function [ found ] = Test_Case( V, eigenfaces, indexes, i, j, mean_img )
f = imread(['Faces/S' num2str(i) '/' num2str(indexes(i, j)) '.pgm']);
[height, width] = size(f);
f = double(reshape(f, [height * width, 1])) - mean_img;
f = V' * f;
[~, N] = size(eigenfaces);
distance = Inf;
found = 0;
for k = 1 : N
d = norm(double(f) - eigenfaces(:, k), 2);
if distance > d
found = k;
distance = d;
end
end
end
測(cè)試性能表格,Test_Case函數(shù)返回1-280之間的整數(shù),表示這一列最能匹配當(dāng)前測(cè)試圖片。但還需要轉(zhuǎn)成1-40之間的整
數(shù)才能表示出匹配到了的是哪一個(gè)人。
found = Test_Case(V, eigenfaces, indexes, i, j, mean_img);
found = floor((found - 1) / 7) + 1;
修改代碼為初始不求40張平均臉,而用280張人臉直接訓(xùn)練后再對(duì)每個(gè)K值測(cè)試10次,得到的測(cè)試折線圖如下,可以看到,測(cè)試準(zhǔn)確度隨著K從50到100取值,大約在93%到95%間波動(dòng),并且大約在K取83的附近得到較穩(wěn)定的最大值[4]。
圖2 測(cè)試折線圖
圖3 測(cè)試結(jié)果表
人臉識(shí)別是目前較活躍的研究領(lǐng)域, 本文詳細(xì)給出了基于主成分分析的人臉特征提取的原理與方法。并使用matlab 作為工具平臺(tái), 實(shí)現(xiàn)了一個(gè)人臉自動(dòng)識(shí)別的系統(tǒng)原型。實(shí)驗(yàn)結(jié)果表明, 該系統(tǒng)識(shí)別率為85%, 達(dá)到預(yù)期的效果。如果想進(jìn)一步提高人臉識(shí)別率, 可以考慮與其他方法結(jié)合。
人臉識(shí)別的技術(shù)得到突破,準(zhǔn)確率得到提升并普及用戶習(xí)慣后,其商業(yè)化應(yīng)用前景是十分廣闊的,且有助于線下生物識(shí)別格局的改變,很有可能會(huì)成為下一個(gè)科技時(shí)代的商業(yè)爆發(fā)點(diǎn)。隨著人臉識(shí)別技術(shù)的革新,人臉識(shí)別效果的提升將打開前期受效果制約的應(yīng)用場(chǎng)景。
總之,以人臉識(shí)別為代表的新一代技術(shù)驅(qū)動(dòng)的產(chǎn)業(yè)革命已經(jīng)興起,學(xué)習(xí)研究人臉識(shí)別的組識(shí)會(huì)越來越多。但在實(shí)際應(yīng)用中仍然面臨困難,不僅要達(dá)到準(zhǔn)確、快速的檢測(cè)并分割出人臉部分,而且要有效的變化補(bǔ)償、特征描述、準(zhǔn)確的分類效果及如何與其它技術(shù)相結(jié)合,提高識(shí)別率和識(shí)別速度、減少計(jì)算量。
[1] 楊瓊,丁曉青.鑒別局部特征分析及其在人臉識(shí)別中的應(yīng)用[J].清華大學(xué)學(xué)報(bào):自然科學(xué)版,2004.
[2]羅韻.用Matlab進(jìn)行PCA人臉識(shí)別[N/OL].http://blog. 163.com/luoyun_dreamer/blog/static/215529070201331281538309/?suggestedreading.
[3]文尹習(xí)習(xí).圖像處理:灰度化,二值化,反色[EB/OL]. https: //blog.csdn.net/liu1152239/article/details/73088182
[4]JacKnights.基于PCA的人臉識(shí)別[EB/OL].https: //blog. csdn.net/JacKnights/article/details/79439180?utm_source=blogxgwz6.
[5]xiaoshengforever.PCA的具體實(shí)現(xiàn)(Eigenfaces特征臉) [EB/OL].https://blog.csdn.net/xiaoshengforever/article/details/13041753.