人臉識別

    最近用matlab做的一個簡單的人臉識別,代碼非原創,忘了從哪裏找到的了,修改了一部分之後,代碼可運行,詳見我的資源。效果圖如下:


1.數據採集

    本文選擇的人臉數據是英國劍橋大學的ORL人臉數據庫是英國劍橋大學的ORL人臉數據庫。下載址:

http://www.cl.cam.ac.uk/Research/DTG/attarchive/pub/data/att_faces.tar.Z

該數據庫由40個人的400幅人臉圖像構成,圖像的分辨率爲112*92的灰度圖。人臉的面部表情和細節均有很大的變化,例如笑與不笑,眼睛睜着或不戴眼鏡等;人臉姿態也有很大的變化,其深度旋轉和平面旋轉可達20度,人臉尺寸的也有最多的10%的變化。

2.數據預處理

    了保證所有的人臉在圖像中的大小、位置和偏斜的不變性,需要去除頭髮、脖子、肩膀及圖像背景等與人臉無關的部分。在特徵提取前必須對人臉圖像進行幾何歸一化處理。

具體包括:

1)人臉圖像旋轉:保證了人臉方向上的一致性,也就保持圖1中的ErEl水平

2)人臉圖像剪裁:人臉位置的一致性,按圖1中的比例剪裁人臉圖像

3)圖像尺度變換:保證人臉大小的一致性,把人臉圖像縮放到32*32大小。

相關代碼:procORL.m

3.特徵提取

    這裏的選取圖像的(x,y)點的灰度值做爲特徵值I(x,y),爲了後面算法的方便,把I(x,y)變爲一維列向量:X=(x1,x2,…,xn),對於32*32=1024個像素點的人臉圖像由維變到一維的特徵數量就是1024個。

相關代碼:getfacedata.m

4.PCA主成分分析

    本文選取的是ORL庫中5個人的10張人臉圖像,其中從每人中抽取5張作訓練圖像,其餘5張做測試圖像。那麼訓練集,跟測試集都有25張人臉圖像。根據模式識別的有關理論,所選取的訓練圖像應該遠大於特徵數1024個。在樣本數量遠小於圖像特徵數的情況下,過多的特徵數會導致峯值現像,也就是使識別錯誤變大。所以我們這裏要通過PCA主成分分析法降維。PCA方法能夠生成有用的特徵,並且使生成的特徵不相關,從而達到降維的目的。

    本文1024維的特徵向量經過PCA主成分分析後變爲11維的特徵向量,些時11維的特徵向量對識別的貢獻率已經達90%以上。

相關代碼:pcapro.m

5.待測人臉圖像識別

    識別方法通過計算待測人臉圖到培訓人臉圖像集的距離進行識別,也就是計算PCA反回後的11維向量間的距離d(X,Y) = sqrt((X-Y).^2);

6.結論

    PCA的能夠對高維線性數據進行降維,在PCA主成分分析能有效的對人臉進行識別。

 

備註:本文的提供的代碼已經存儲了相應的歸一化的培訓、測試集,跟生成了相應的PCA分析返回的向量,協方差矩陣。故把下面的代碼進行了註釋

% imglist = readFolderOrl(direct,'*.pgm');%讀取orl庫中的人臉圖片路徑

% tr_orl(imglist,tr_face);%提取培訓集

% tt_orl(imglist,tt_face);%提取測試集

 

% imglist =readFolderOrl(tr_face,'*.jpg');%培訓集中的人臉圖片路徑

% tr_facedata = getfacedata( imglist );%獲取培訓集中的人臉圖片數據

% save tr_facedata; %存儲數據

% imglist =readFolderOrl(tt_face,'*.jpg');%測試集中的人臉圖片路徑

% tt_facedata = getfacedata( imglist );%測試集中的人臉圖片數據

% save tt_facedata; %存儲數據

 

% [pc,latent,mixedisg]= pcapro(sample,rate);%PCA分析,只要做一次就夠了,要點時間

% save pc; %PCA分析返回的特徵向量

% save mixedisg;%協方差矩陣

 

    直接運行代碼中的test.m就可以了。


發佈了35 篇原創文章 · 獲贊 36 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章