1. 程式人生 > >人臉識別:特徵臉(Eigenface)

人臉識別:特徵臉(Eigenface)

Eigenface就是將人臉影象進行編碼,對映到低維子空間上,在低維空間計算兩幅人臉影象的距離,以此來進行人臉識別。對映到低維子空間的方法採用主成分分析(Principal Component Analysis,PCA)

1.將人臉影象(均為灰度圖)拉成一個列向量儲存在矩陣AA1,A2,,An中,ARd×n,其中,d是每張人臉圖片的畫素數目,n是影象數目。為了保證後面的計算正常進行,我們假定影象的畫素值已經轉換成了double型別。

f = imread('face.jpg'); % f是uint8型別
f = im2double(f);  % f轉換成double型別
f = reshape
(f, [d, 1]); % f拉成列向量

在我們的例子中包含25張人臉影象,如下圖所示

我們的例子中包含25張人臉影象

2.計算平均臉A¯¯¯=i=1nAi,平均臉也可以看做是一幅人臉影象

這裡寫圖片描述

3.將原始影象每個維度中心化,Φi=AiA¯¯¯, ΦΦ1,Φ2,,ΦnΦRd×n

4.對Φ進行主成分分析,ΦΦT=λiωi,即求解ΦΦT的特徵值和特徵向量,將特徵向量進行施密特正交化,對λi進行降序排列,選出前s個特徵值對應的特徵向量 Ω(ΩRd×n)作為新空間的基,將原始資料投影到新空間上
Φnewi=ΩTΦi
在新空間中採用距離度量兩幅影象的相似性

注:ΦΦT=λiωiλi是原始資料在第k

個方向上投影的方差值,為最大程度保留原始資料的資訊,可以選擇一個閾值θ,使得s滿足下面的式子:
i=1s1λii=1nλi<θ and i=1sλii=1nλiθ

5.在我們的例子中,人臉影象數目n遠小於影象的畫素數目d,如果直接計算ΦΦT的特徵值和特徵向量,計算複雜度較高,對於100×100 大小的圖片,ΦΦT的大小為10000 ×10000,帶來的儲存和計算複雜度都是難以承受的,為此,我們可以先計算ΦTΦ的特徵值和特徵向量,即
ΦTΦμi=λiμi

ΦΦT(Φμi)=λi(Φμi)

ωi=Φμi,則有ΦΦT=λiωi

注意:ΦTΦRn×n,而ΦΦTRd×d,通過這樣計算出來的特徵向量只有n

個,那麼對於剩餘的特徵向量怎麼辦呢?事實上,