基于MATLAB的人脸识别
基于MATLAB主成分分析PCA算法的人臉識(shí)別系統(tǒng)
一、課題引言
隨著社會(huì)的發(fā)展及技術(shù)的進(jìn)步,社會(huì)各方面對(duì)快速高效的自動(dòng)身份驗(yàn)證的需求可以說無處不在,并與日俱增。例如,某人是否是我國的居民,是否有權(quán)進(jìn)入某安全系統(tǒng),是否有權(quán)進(jìn)行特定的交易等。尤其是自2001年美國“9.1l”恐怖襲擊發(fā)生以來,如何在車站、機(jī)場(chǎng)等公共場(chǎng)所利用高科技手段,迅速而準(zhǔn)確地發(fā)現(xiàn)并確認(rèn)可疑分子成了目前世界各國在反恐斗爭(zhēng)中普遍關(guān)注的問題。為此,各國都投入大量人力、物力研究發(fā)展各類識(shí)別技術(shù),使得生物特征識(shí)別技術(shù)得到了極大的發(fā)展。生物特征識(shí)別技術(shù)主要包括:人臉識(shí)別、虹膜識(shí)別、指紋識(shí)別、步態(tài)識(shí)別、語音識(shí)別、筆跡識(shí)別、掌紋識(shí)別以及多生物特征融合識(shí)別等。人類通過視覺識(shí)別文字,感知外界信息。在客觀世界中,有75%的信息量都來自視覺,因此讓計(jì)算機(jī)或機(jī)器人具有視覺,是人工智能的重要環(huán)節(jié)。由于生物特征是人的內(nèi)在屬性,具有很強(qiáng)的穩(wěn)定性和個(gè)體差異性,因此是身份驗(yàn)證最理想的依據(jù)。與虹膜、指紋、基因、掌紋等其他人體生物特征識(shí)別系統(tǒng)相比,人臉識(shí)別系統(tǒng)更加直接、方便、友好,易于為用戶所接受,并且通過人臉的表情、姿態(tài)分析,還能獲得其它識(shí)別系統(tǒng)難以得到的一些信息。
人臉識(shí)別技術(shù)在國家重要機(jī)關(guān)及社會(huì)安防領(lǐng)域具有廣泛用途。例如:公安系統(tǒng)的罪犯識(shí)別、信用卡驗(yàn)證、醫(yī)學(xué)、檔案管理、視頻會(huì)議、人機(jī)交互系統(tǒng)等身份識(shí)別和各類卡持有人的身份驗(yàn)證。同其他人體生物特征(如:指紋、掌紋、虹膜、語音等)識(shí)別技術(shù)相比,人臉識(shí)別技術(shù)的隱性最好,人臉識(shí)別系統(tǒng)更直接、友好,是當(dāng)今國際反恐和安防最重視的科技手段和攻關(guān)標(biāo)志之一。雖然人類能毫不費(fèi)力地識(shí)別出人臉及表情,但對(duì)人臉的機(jī)器自動(dòng)識(shí)別確實(shí)一個(gè)難度極大的課題,它涉及到模式識(shí)別、圖像處理及生理、心理學(xué)等諸多方面的知識(shí)。人臉識(shí)別技術(shù)的研究雖然己經(jīng)取得了一定的可喜成果,但在實(shí)際應(yīng)用中仍存在著許多嚴(yán)峻的問題。人臉的非剛體性、姿態(tài)、表情、發(fā)型以及化妝的多樣性都給正確識(shí)別帶來了困難,要讓計(jì)算機(jī)像人一樣方便地識(shí)別出大量的人臉,尚需不同科學(xué)研究領(lǐng)域的科學(xué)家共同不懈的努力。
二 人臉識(shí)別技術(shù)
人臉因人而異,絕無相同,即使一對(duì)雙胞胎,其面部也一定存在著某方面的差異。雖然人類在表情、年齡或發(fā)型等發(fā)生巨大變化的情況下,可以毫不困難地由臉而識(shí)別出某一個(gè)人,但要建立一個(gè)能夠完全自動(dòng)進(jìn)行人臉識(shí)別的系統(tǒng)卻是非常困難的,它牽涉到模式識(shí)別、圖像處理、計(jì)算機(jī)視覺、生理學(xué)、心理學(xué)以及認(rèn)知科學(xué)等方面的諸多知識(shí),并與基于其他生物特征的身份鑒別方法以及計(jì)算機(jī)人機(jī)感知交互領(lǐng)域都有密切聯(lián)系。與指紋、視網(wǎng)膜、虹膜、基因、掌形等其他人體生物特征識(shí)別系統(tǒng)相比,人臉識(shí)別系統(tǒng)更加直接、友好,使用者無任何心理障礙,并且通過人臉的表情和姿態(tài)分析,還能獲得其他識(shí)別系統(tǒng)難以得到的一些信息。20世紀(jì)90年代以來,隨著需要的劇增,人臉識(shí)別技術(shù)成為一個(gè)熱門的研究話題。
2.1人臉識(shí)別的研究?jī)?nèi)容
人臉識(shí)別(Face Recognition)是利用計(jì)算機(jī)對(duì)人臉圖像進(jìn)行特征提取和識(shí)別的模式識(shí)別技術(shù)。在二十世紀(jì)七十年代初,對(duì)人臉識(shí)別的研究涉及心理學(xué)神經(jīng)科學(xué)。其直接目的是要搞清楚人是如何對(duì)人臉進(jìn)行識(shí)別的。七十年代中期以后,開展了用數(shù)學(xué)、物理和技術(shù)的方法對(duì)人臉自動(dòng)識(shí)別的研究。
人臉識(shí)別一般可描述為:給定靜止圖像或動(dòng)態(tài)圖像序列,利用已有的人臉圖像數(shù)據(jù)庫來確認(rèn)圖像中的一個(gè)或多個(gè)人。從廣義上來說,計(jì)算機(jī)人臉識(shí)別的研究?jī)?nèi)容大概可以分為以下五個(gè)方面。
2.1.1人臉檢測(cè)(Face Detection)
此過程包括人臉檢測(cè)(Detection)、人臉定位(Location)和人臉跟蹤(Tracking)。所謂人臉檢測(cè),就是給定任意圖像,確定其中是否存在人臉,如果有,給出人臉的位置、大小等狀態(tài)信息。人臉跟蹤指在一紐連續(xù)靜態(tài)圖像所構(gòu)成的動(dòng)態(tài)視頻中實(shí)時(shí)地檢測(cè)人臉。人臉檢測(cè)主要受到光照、噪聲、姿念以及遮擋等因素的影響,人臉檢測(cè)的結(jié)果直接關(guān)系到后面兩個(gè)過程的準(zhǔn)確性。近年來,人臉檢測(cè)和跟蹤開始成為獨(dú)立的研究課題受到關(guān)注。
2.1.2人臉表征(Face Representation)
人臉表征就是提取人臉的特征,是將現(xiàn)實(shí)空間的圖像映射到機(jī)器空間的過程。人臉的表示具有多樣性和唯一性,這其實(shí)就是人臉共性和特性之間的關(guān)系問題:只有保持這種多樣性和唯一性,才能保證人臉圖像的準(zhǔn)確描述和識(shí)別。
人臉圖像信息數(shù)據(jù)量巨大,為提高檢測(cè)和識(shí)別的運(yùn)算速度以及提高圖像傳輸和匹配檢索速度,必須對(duì)圖像進(jìn)行數(shù)據(jù)壓縮,降低向量維數(shù),即用盡可能少的數(shù)據(jù)表示盡可能多的信息。人臉的表征在提取人臉特征的同時(shí),也實(shí)現(xiàn)了對(duì)原始圖像數(shù)據(jù)的降維。
三 人臉特征提取與識(shí)別
PCA方法將包含人臉的圖像區(qū)域看作隨機(jī)向量,因此可采用K-L變換得到正交K—L基,對(duì)應(yīng)其中較大特征值的基具有與人臉相似的形狀,因此又被稱為特征臉。利用這些基的線性組合可以描述、表達(dá)和逼近人臉圖像,所以可進(jìn)行人臉識(shí)別與合成。識(shí)別過程就是將人臉圖像映射到由特征臉組成的子空間上,并比較其在特征臉空間中的位置。PCA方法認(rèn)為圖像的全局結(jié)構(gòu)信息對(duì)于識(shí)別最重要,將圖像看作一個(gè)矩陣,計(jì)算矩陣的特征值和對(duì)應(yīng)特征向量進(jìn)行識(shí)別。這種方法利用圖像的總體信息,不從圖像中提取出眼、嘴、鼻等幾何特征,算法較簡(jiǎn)單且具有較高的識(shí)別率。
主成分分析法(PCA)是模式識(shí)別判別分析中最常用的一種線性映射方法,該方法是根據(jù)樣本點(diǎn)在多維模式空間的位置分布,以樣本點(diǎn)在空間中變化最大方向,即方差最大的方向,作為判別矢量來實(shí)現(xiàn)數(shù)據(jù)的特征提取與數(shù)據(jù)壓縮的。從概率統(tǒng)計(jì)觀點(diǎn)可知,一個(gè)隨機(jī)變量的方差越大,該隨機(jī)變量所包含的信息就越多,如當(dāng)一個(gè)變量的方差為零時(shí),該變量為一常數(shù),不含任何信息。
3.1利用PCA進(jìn)行特征提取的經(jīng)典算法——Eigenface算法
在利用PCA進(jìn)行特征提取的算法中,特征臉方法(Eigenface)是其中的一個(gè)經(jīng)典算法。特征臉方法是從主成分分析導(dǎo)出的一種人臉識(shí)別和描述技術(shù)。特征臉方法就是將包含人臉的圖像區(qū)域看作是一種隨機(jī)向量,因此可以采用K-L變換獲得其正交K-L基底。對(duì)應(yīng)其中較大特征值的基底具有與人臉相似的形狀,因此又稱為特征臉。利用這些基底的線性組合可以描述、表達(dá)和逼近人臉圖像,因此可以進(jìn)行人臉識(shí)別與合成。識(shí)別過程就是將人臉圖像映射到由特征臉張成的子空間上,比較其與己知人臉在特征空間中的位置,具體步驟如下:
(1)初始化,獲得人臉圖像的訓(xùn)練集并計(jì)算特征臉,定義為人臉空間,存儲(chǔ)在模板庫中,以便系統(tǒng)進(jìn)行識(shí)別;
(2)輸入新的人臉圖像,將其映射到特征臉空間,得到一組關(guān)于該人臉的特征數(shù)據(jù);
(3)通過檢查圖像與人臉空間的距離判斷它是否是人臉;
(4)若為人臉,根據(jù)權(quán)值模式判斷它是否為數(shù)據(jù)庫中的某個(gè)人,并做出具體的操作。
3.2 PCA人臉識(shí)別流程
完整的PCA人臉識(shí)別應(yīng)該包括以下四個(gè)步驟:人臉圖像預(yù)處理;讀入人臉庫,訓(xùn)練成特征子空間;把訓(xùn)練圖像和測(cè)試圖像投影到上一步驟得到的子空間上;選擇一定的距離函數(shù)進(jìn)行識(shí)別。下面詳細(xì)描述整個(gè)過程:
(1)讀入人臉庫
歸一化人臉庫后,將庫中的每人選擇一定數(shù)量的圖像構(gòu)成訓(xùn)練集,其余構(gòu)成測(cè)試集。設(shè)歸一化后的圖像是N×N的,按列相連就構(gòu)成維向量,可看作是維空間中的一個(gè)點(diǎn),可以通過K-L變換用一個(gè)低維子空間描述這個(gè)圖像。
(2)計(jì)算K-L變換的生成矩陣,并求取圖像的特征值和特征向量
假設(shè)人臉圖像庫中有N幅人臉圖像,用向量表示為(向量維數(shù)設(shè)為L),其人臉平均圖像如式(2-1)所示:
(2-1)
由此可得到每幅圖像的均差,如式(2-2)所示:
, (2-2)
這樣可計(jì)算協(xié)方差矩陣,如式(2-3)所示:
(2-3)
計(jì)算矩陣C的特征值和對(duì)應(yīng)特征向量。
但是在實(shí)際計(jì)算中,矩陣C的大小是,即使對(duì)尺寸較小的圖像計(jì)算量還是很大。為了減小運(yùn)算量,現(xiàn)將每幅圖像的均差形成一個(gè)矩陣,如式(2-4)所示:
(2-4)
則式(2-3)可以寫成式(2-5):
(2-5)
因此,根據(jù)線性代數(shù)理論,將計(jì)算的特征值和對(duì)應(yīng)特征向量的問題轉(zhuǎn)化為求的特征值和對(duì)應(yīng)的特征向量的問題。的大小僅為N×N遠(yuǎn)遠(yuǎn)小于,故簡(jiǎn)化了計(jì)算。在求出后,可以通過式(2-6)得到:
(2-6)
(3)把訓(xùn)練圖像和測(cè)試圖像投影到特征空間
由特征向量所形成的向量空間可表示人臉圖像的主要特征信息,將人臉圖像庫中所有N個(gè)圖像的均差向此空間投影,得到各自的投影向量,如式(2-7)和(2-8)所示:
(2-7)
(2-8)
對(duì)于待識(shí)別人臉圖像I,計(jì)算其與k差的投影向量,如式(2-9)所示:
(2-9)
再與人臉圖像庫中N個(gè)人臉圖像對(duì)應(yīng)的投影向量比較,按照一定的距離準(zhǔn)則完成識(shí)別。
(4)比較測(cè)試圖像和訓(xùn)練圖像,確定待識(shí)別樣本類別
這里可以采用多種不同的分類器進(jìn)行分類:范式、范式、最小距離、角度以及Mahalanobis距離等。
MATLAB特征臉程序?qū)崿F(xiàn)
m = mean(T,2); %求樣本的平均向量
Train_Number = size(T,2);
%%%%計(jì)算每個(gè)樣本與平均向量的差向量
A = [];
for i = 1 : Train_Number
temp = double(T(:,i)) - m; %計(jì)算訓(xùn)練集中每幅圖像的均差 Ai = Ti - m
A = [A temp];
end
L = A'*A; %計(jì)算協(xié)方差矩陣
[V D] = eig(L); % 求特征向量和特征值
3.3特征向量選取
上面所創(chuàng)建的用于投影的特征臉子空間使用的是所有r個(gè)非零的特征值對(duì)應(yīng)的特征向量。雖然協(xié)方差矩陣C最多有對(duì)應(yīng)于非零特征值的N個(gè)特征向量,且r≤N,但是通常情況下,r仍然會(huì)太大,而根據(jù)應(yīng)用的需求,并非所有的,都有保留意義。而特征空間投影的計(jì)算速度是直接與創(chuàng)建子空間所用的特征向量的數(shù)目相關(guān),若考慮到計(jì)算時(shí)間等因素,可以適當(dāng)減去一些信息量少的特征向量,且去掉這些特征向量之后不一定不利于分類結(jié)果,有的情況下反而能夠提高識(shí)別性能。下面將討論幾種不同的特征值選擇方法:
(1)標(biāo)準(zhǔn)的特征空間投影:所有r個(gè)對(duì)應(yīng)于非零特征值的特征向量均被用于創(chuàng)建特征臉子空間。但是該方法在r值較大時(shí),計(jì)算速度會(huì)較慢,且不利于分類。
(2)為進(jìn)一步壓縮特征向量和減小運(yùn)算量,將特征值按大小順序排序,忽略小特征值所對(duì)應(yīng)的特征向量,即由下式得到。設(shè),r為的秩,rN,,則壓縮后的特征向量集如式(2-10)所示:
,M<r (2-10)
經(jīng)過實(shí)驗(yàn)證明當(dāng)M的取值為M=[r*20%]的時(shí)候識(shí)別率最佳。
(3)保持前面的z—1個(gè)特征向量:將特征值按照降序排列,同時(shí)保留最前面的z一1個(gè)特征向量,其中z為訓(xùn)練圖像的類別數(shù)。
(4)按照計(jì)算信息量來確定維數(shù):不同于前面固定的丟棄一些特征向量,該方法采用保證剩余的特征向量所包含的信息與總的信息量相比大于一定的閾值e,e的值通常取為0.9,可依照式(2-11)計(jì)算:
(2-11)
MATLAB分類和提取特征值程序?qū)崿F(xiàn)
% 按照特征值>1來提取特征向量
L_eig_vec = [];
for i = 1 : size(V,2)
if( D(i,i)>1 )
L_eig_vec = [L_eig_vec V(:,i)];
end
end
%%%%%%%計(jì)算協(xié)方差矩陣的特征向量
% 降維
Eigenfaces = A * L_eig_vec; % A: centered image vectors
3.4距離函數(shù)的選擇
圖像被投影到特征空間中,剩下的任務(wù)就是如何判別這些圖像的相似性。通常有兩種方法來判別:一種是計(jì)算在N維空間中圖像間的距離,另一種是測(cè)量圖像間的相似性。當(dāng)測(cè)量距離時(shí),我們希望距離盡可能地小,一般選擇與測(cè)試圖像最近的訓(xùn)練圖像作為它的所屬的類別。而測(cè)量相似性的時(shí)候,則希望圖像盡可能地相似,也就是說具有最大的相似性的訓(xùn)練圖像類別是測(cè)試圖像所屬的類別。在此介紹幾種計(jì)算方法:
(1)范式
將像素間的絕對(duì)值的差值相加,也稱和范式。范式距離公式如式(2-12)所示:
(2-12)
(2)范式
將像素間的平方差異相加。也稱為歐幾里德距離。范式距離公式如式(2-13)所示:
(2-13)
(3)最小距離
首先計(jì)算各類訓(xùn)練樣本的平均值,接下來的距離比較和上面的范式完全相同。這樣分類時(shí)每類只需要比較一次,減少了計(jì)算量。樣本x與第i類的距離定義如式(2-14)所示:
(2-14)
其中為第i類所有樣本的平均值。
3.5 基于PCA的人臉識(shí)別
基于PCA算法的人臉識(shí)別過程由訓(xùn)練階段和識(shí)別階段兩個(gè)階段組成。在訓(xùn)練階段,每個(gè)已知人臉X映射到特征臉組成的子空間上,得到N維向量。
距離閾值定義如式(2-15)所示:
(j,k=1,2,…,N) (2-15)
在識(shí)別的時(shí)候,首先把待識(shí)別的圖像映射到特征臉空間,得出向量P及其與每個(gè)人臉集的距離(i=1,2,3,…,N),采用歐式距離法進(jìn)行人臉識(shí)別,分類規(guī)則為:
(1)若>,則輸入圖像不是人臉圖像;
(2)若<,
,>,則輸入圖像包含未知人臉;
(3)若<,=min{},則輸入圖像為庫中第k個(gè)人的人臉。
四 MATLAB源碼
4.1.創(chuàng)建圖片數(shù)據(jù)庫
function T = CreateDatabase(TrainDatabasePath) %%%%%%讀取訓(xùn)練庫路徑,并統(tǒng)計(jì)樣本個(gè)數(shù) TrainFiles = dir(TrainDatabasePath); %%%%%%%%將2維圖像轉(zhuǎn)化為一維向量 T = []; for i = 1 : Train_Number % I have chosen the name of each image in databases as a corresponding number. However, it is not mandatory!str = int2str(i); img = imread(str);img = rgb2gray(img); [irow icol] = size(img); temp = reshape(img',irow*icol,1); % Reshaping 2D images into 1D image vectorsT = [T temp]; % 'T' grows after each turn end 4.2 主程序 clear all clc close all % You can customize and fix initial directory paths TrainDatabasePath = uigetdir(strcat(matlabroot,'\work'), 'Select training database path' );%設(shè)置訓(xùn)練集路徑 TestDatabasePath = uigetdir(strcat(matlabroot,'\work'), 'Select test database path'); prompt = {'Enter test image name (a number between 1 to 10):'}; dlg_title = 'Input of PCA-Based Face Recognition System'; num_lines= 1; def = {'1'};TestImage = inputdlg(prompt,dlg_title,num_lines,def); TestImage = strcat(TestDatabasePath,'\',char(TestImage),'.jpg'); im = imread(TestImage); [m, A, Eigenfaces] = EigenfaceCore(T); OutputName = Recognition(TestImage, m, A, Eigenfaces); SelectedImage = strcat(TrainDatabasePath,'\',OutputName); SelectedImage = imread(SelectedImage); figure; subplot(1,2,1);imshow(im); title('Test Image'); subplot(1,2,2);imshow(SelectedImage); title('Equivalent Image'); str = strcat('Matched image is : ',OutputName); disp(str) 4.3最終程序結(jié)果TrainDatabase里存放了20張圖片,TestDatabase里存放了10張圖片,所有圖片格式和分辨率都相同。運(yùn)行主程序時(shí),先設(shè)置好TrainDatabase的路徑,再設(shè)置好TestDatabase的路徑,之后還會(huì)彈出你想要匹配的圖片號(hào)(1-10),最終會(huì)顯示出Test Image和在TrainDatabase里匹配出來Equivalent Image。如果所要匹配的圖片和TrainDatabase里的圖片相同,則匹配出來的圖片則相同(如圖4-5-1);如果所要匹配的圖片在TrainDatabase里沒有,則搜索出最為相近的圖片(如圖4-5-2)。
總結(jié)
以上是生活随笔為你收集整理的基于MATLAB的人脸识别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 人工地震动合成
- 下一篇: ppt复制切片器_零基础小白自学PPT快