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