MATLAB人脸识别系统
目錄
引言 1
1 人臉識別技術(shù) 2
1.1人臉識別的研究內(nèi)容 2
1.1.1人臉檢測(Face Detection) 2
1.1.2人臉表征(Face Representation) 2
1.2幾種典型的人臉識別方法 3
1.2.1基于幾何特征的人臉識別方法 3
1.2.2基于K-L變換的特征臉方法 4
1.2.3神經(jīng)網(wǎng)絡(luò)方法 5
1.2.4基于小波包的識別方法 6
1.2.5支持向量機(jī)的識別方法 6
2 人臉特征提取與識別 6
2.1利用PCA進(jìn)行特征提取的經(jīng)典算法——Eigenface算法 7
2.2 PCA人臉識別流程 7
2.3特征向量選取 9
2.4距離函數(shù)的選擇 10
2.5 基于PCA的人臉識別 11
MATLAB人臉識別程序 12
3 MATLAB軟件程序編寫 13
3.1.創(chuàng)建圖片數(shù)據(jù)庫 13
3.2 主程序 13
3.3最終程序結(jié)果 14
4 心得與體會 16
參考文獻(xiàn) 16
引言
隨著社會的發(fā)展及技術(shù)的進(jìn)步,社會各方面對快速高效的自動(dòng)身份驗(yàn)證的需求可以說無處不在,并與日俱增。例如,某人是否是我國的居民,是否有權(quán)進(jìn)入某安全系統(tǒng),是否有權(quán)進(jìn)行特定的交易等。尤其是自2001年美國“9.1l”恐怖襲擊發(fā)生以來,如何在車站、機(jī)場等公共場所利用高科技手段,迅速而準(zhǔn)確地發(fā)現(xiàn)并確認(rèn)可疑分子成了目前世界各國在反恐斗爭中普遍關(guān)注的問題。為此,各國都投入大量人力、物力研究發(fā)展各類識別技術(shù),使得生物特征識別技術(shù)得到了極大的發(fā)展。生物特征識別技術(shù)主要包括:人臉識別、虹膜識別、指紋識別、步態(tài)識別、語音識別、筆跡識別、掌紋識別以及多生物特征融合識別等。人類通過視覺識別文字,感知外界信息。在客觀世界中,有75%的信息量都來自視覺,因此讓計(jì)算機(jī)或機(jī)器人具有視覺,是人工智能的重要環(huán)節(jié)。由于生物特征是人的內(nèi)在屬性,具有很強(qiáng)的穩(wěn)定性和個(gè)體差異性,因此是身份驗(yàn)證最理想的依據(jù)。與虹膜、指紋、基因、掌紋等其他人體生物特征識別系統(tǒng)相比,人臉識別系統(tǒng)更加直接、方便、友好,易于為用戶所接受,并且通過人臉的表情、姿態(tài)分析,還能獲得其它識別系統(tǒng)難以得到的一些信息。
人臉識別技術(shù)在國家重要機(jī)關(guān)及社會安防領(lǐng)域具有廣泛用途。例如:公安系統(tǒng)的罪犯識別、信用卡驗(yàn)證、醫(yī)學(xué)、檔案管理、視頻會議、人機(jī)交互系統(tǒng)等身份識別和各類卡持有人的身份驗(yàn)證。同其他人體生物特征(如:指紋、掌紋、虹膜、語音等)識別技術(shù)相比,人臉識別技術(shù)的隱性最好,人臉識別系統(tǒng)更直接、友好,是當(dāng)今國際反恐和安防最重視的科技手段和攻關(guān)標(biāo)志之一。雖然人類能毫不費(fèi)力地識別出人臉及表情,但對人臉的機(jī)器自動(dòng)識別確實(shí)一個(gè)難度極大的課題,它涉及到模式識別、圖像處理及生理、心理學(xué)等諸多方面的知識。人臉識別技術(shù)的研究雖然己經(jīng)取得了一定的可喜成果,但在實(shí)際應(yīng)用中仍存在著許多嚴(yán)峻的問題。人臉的非剛體性、姿態(tài)、表情、發(fā)型以及化妝的多樣性都給正確識別帶來了困難,要讓計(jì)算機(jī)像人一樣方便地識別出大量的人臉,尚需不同科學(xué)研究領(lǐng)域的科學(xué)家共同不懈的努力。
1 人臉識別技術(shù)
人臉因人而異,絕無相同,即使一對雙胞胎,其面部也一定存在著某方面的差異。雖然人類在表情、年齡或發(fā)型等發(fā)生巨大變化的情況下,可以毫不困難地由臉而識別出某一個(gè)人,但要建立一個(gè)能夠完全自動(dòng)進(jìn)行人臉識別的系統(tǒng)卻是非常困難的,它牽涉到模式識別、圖像處理、計(jì)算機(jī)視覺、生理學(xué)、心理學(xué)以及認(rèn)知科學(xué)等方面的諸多知識,并與基于其他生物特征的身份鑒別方法以及計(jì)算機(jī)人機(jī)感知交互領(lǐng)域都有密切聯(lián)系。與指紋、視網(wǎng)膜、虹膜、基因、掌形等其他人體生物特征識別系統(tǒng)相比,人臉識別系統(tǒng)更加直接、友好,使用者無任何心理障礙,并且通過人臉的表情和姿態(tài)分析,還能獲得其他識別系統(tǒng)難以得到的一些信息。20世紀(jì)90年代以來,隨著需要的劇增,人臉識別技術(shù)成為一個(gè)熱門的研究話題。
1.1人臉識別的研究內(nèi)容
人臉識別(Face Recognition)是利用計(jì)算機(jī)對人臉圖像進(jìn)行特征提取和識別的模式識別技術(shù)。在二十世紀(jì)七十年代初,對人臉識別的研究涉及心理學(xué)神經(jīng)科學(xué)。其直接目的是要搞清楚人是如何對人臉進(jìn)行識別的。七十年代中期以后,開展了用數(shù)學(xué)、物理和技術(shù)的方法對人臉自動(dòng)識別的研究。
人臉識別一般可描述為:給定靜止圖像或動(dòng)態(tài)圖像序列,利用已有的人臉圖像數(shù)據(jù)庫來確認(rèn)圖像中的一個(gè)或多個(gè)人。從廣義上來說,計(jì)算機(jī)人臉識別的研究內(nèi)容大概可以分為以下五個(gè)方面。
1.1.1人臉檢測(Face Detection)
此過程包括人臉檢測(Detection)、人臉定位(Location)和人臉跟蹤(Tracking)。所謂人臉檢測,就是給定任意圖像,確定其中是否存在人臉,如果有,給出人臉的位置、大小等狀態(tài)信息。人臉跟蹤指在一紐連續(xù)靜態(tài)圖像所構(gòu)成的動(dòng)態(tài)視頻中實(shí)時(shí)地檢測人臉。人臉檢測主要受到光照、噪聲、姿念以及遮擋等因素的影響,人臉檢測的結(jié)果直接關(guān)系到后面兩個(gè)過程的準(zhǔn)確性。近年來,人臉檢測和跟蹤開始成為獨(dú)立的研究課題受到關(guān)注。
1.1.2人臉表征(Face Representation)
人臉表征就是提取人臉的特征,是將現(xiàn)實(shí)空間的圖像映射到機(jī)器空間的過程。人臉的表示具有多樣性和唯一性,這其實(shí)就是人臉共性和特性之間的關(guān)系問題:只有保持這種多樣性和唯一性,才能保證人臉圖像的準(zhǔn)確描述和識別。
人臉圖像信息數(shù)據(jù)量巨大,為提高檢測和識別的運(yùn)算速度以及提高圖像傳輸和匹配檢索速度,必須對圖像進(jìn)行數(shù)據(jù)壓縮,降低向量維數(shù),即用盡可能少的數(shù)據(jù)表示盡可能多的信息。人臉的表征在提取人臉特征的同時(shí),也實(shí)現(xiàn)了對原始圖像數(shù)據(jù)的降維。
1.2幾種典型的人臉識別方法
對人臉識別方法的研究主要有兩大方向:一是基于人臉圖像局部特征的識別方法;二是基于人臉圖像整體特征的識別方法。基于人臉圖像局部特征的識別通常抽取人臉器官如眼睛、眉毛、鼻子和嘴等器官的位置,尺度以及彼此間的比率作為特征。進(jìn)一步地可以用幾何形狀擬合人臉器官,從而以幾何參數(shù)作為描述人臉的特征。由于此類方法通常要精確地抽取出位置、尺度、比率或幾何參數(shù)作為描述人臉的特征,因此對人臉圖像的表情變化比較敏感。同時(shí),人臉器官分割的精確度也對人臉特征的提取有一定的影響。另外,該類方法并沒有充分利用到人臉圖像本身具有的獲度信息,該方向已經(jīng)不是人臉識別技術(shù)發(fā)展的主流方向。基于人臉圖像整體特征的人臉識別方法由于不需要精確提取人臉圖像中部件的具體信息,而且可以充分利用到人臉圖像本身具有的灰度信息,因此可獲得更好的識別性能。目前,絕大部分關(guān)于人臉識別方法的文章都是基于人臉圖像整體特征的,主要有特征臉法、最佳鑒別向量集法,貝葉斯法,基予傅立葉不變特征法,彈性圖匹配法,其他相關(guān)方法有線性子空間法,可變形模型法和神經(jīng)網(wǎng)絡(luò)法。這些方法中有的側(cè)重于表述人臉圖像的特征提取,如彈性圖匹配法和傅立葉不變特征法;有的則側(cè)重于分類,如最佳鑒別向量集法、貝葉斯法和神經(jīng)網(wǎng)絡(luò)法;而有的則側(cè)重于人臉圖像重構(gòu),如特征臉法和線性子空間法。所有這些基于人臉圖像整體特征的人臉識別方法均取得了一定的識別性能。
1.2.1基于幾何特征的人臉識別方法
基于幾何特征的人臉識別方法主要源于人臉識別的初期研究階段。這種方法是以人臉各個(gè)器官和幾何關(guān)系為基礎(chǔ)進(jìn)行算法設(shè)計(jì)。對于不同人來說,臉上的各個(gè)器官,如眼睛、鼻子、嘴巴以及整個(gè)臉部的輪廓具有不同的形狀、大小、相對位置和分布情況。
在基于幾何特征的人臉識別方法中,可以用一個(gè)矢量來表示提取出來的幾何參數(shù)。如果要獲得一個(gè)準(zhǔn)確、穩(wěn)定和可靠的識別結(jié)果,就要求這些被選出的幾何特征參數(shù)包含足夠豐富的辨識人臉的信息,且能反映不同人臉之間的差別。也就是說對這些矢量要求具有較高的模式分類能力,同時(shí)還要有一定的穩(wěn)健性,能夠消除由于時(shí)間變遷、光照變化等其他干擾因素所帶來的影響。具體來沈,這些幾何參數(shù)一般包括人臉上兩個(gè)指定特征點(diǎn)之間的歐式距離、邊緣曲率、角度等等。
在實(shí)際應(yīng)用過程中,基于幾何特征的人臉識別方法存在著兩個(gè)方面的問題:
(1)如何快速、準(zhǔn)確地檢測出入臉的重要標(biāo)志點(diǎn)依然是一個(gè)沒有很好解決的問題。臉上的重要標(biāo)志點(diǎn),如瞳孔、嘴巴和鼻子,它們在臉上的位置是進(jìn)行臉部幾何參數(shù)計(jì)算和測量的基準(zhǔn)。
(2)臉部幾何特征在人臉辨識中的有效性問題,即臉部幾何特征能夠提供多少可供識別的信息量。
雖然各人臉的器官在形狀、大小及分布上各不相同,但是這種器官上的差異性更多是體現(xiàn)在某些細(xì)微的感覺意義上。例如眼睛顯得比較小、鼻子顯得比較寬,以及皮膚的紋理、顏色上的差異等等。顯然,這些特征中的一部分是難以精確測量出來或者是不能用幾何參數(shù)準(zhǔn)確描述的。所以僅靠增加臉上幾何參數(shù)的數(shù)目來提高人臉識別率是不太現(xiàn)實(shí)的。由于進(jìn)一步改善測量精度是十分困難的,因而通過增加臉部幾何參數(shù)的數(shù)量來改善識別率結(jié)果,其影響是極小的。因此,基于少量人臉幾何特征進(jìn)行大規(guī)模人臉辨識的可靠性是不容樂觀的。
1.2.2基于K-L變換的特征臉方法
K-L變換是圖像壓縮的一種最優(yōu)正交變換,人們將它應(yīng)用于特征提取,形成了子空間法模式識別的基礎(chǔ)。將K-L變換用于人臉識別,需要假設(shè)人臉處于低維的線性空間,不同人臉具有可分性。高維的圖像空間經(jīng)過K-L變換后得到一組新的正交基,保留其中重要的正交基從而形成了低維的人臉空間。
若將所有子空間的正交基排列成圖像陣列,則正交基呈現(xiàn)人臉的形狀,因此這些正交基也被稱為特征臉。選擇那些正交基形成的子空間則有不同的考慮,與較大特征值對應(yīng)的一些正交基(也稱主分量)能夠表達(dá)人臉的大體形狀,而具體細(xì)節(jié)需要那些小特征值對應(yīng)的特征向量(也稱次分量)來加以補(bǔ)充描述,因此低頻成分用主分量表示,高頻分量用次分量表示。采用主分量作為新的正交空間的正交基的方法稱為主分量(Principal Component Analysis,簡稱PCA)方法。
K-L變換在90年代初受到了很大的重視,實(shí)際用于人臉識別取得了很好的效果,一般庫德大小為100幅左右,識別率在70%-100%之間不等,這主要取決于人臉庫圖像的質(zhì)量。
從壓縮能量的角度來看,K-L變換是最優(yōu)的,變換后的低維空間對于人臉有很好的表達(dá)能力,然而這并不等同于對不同人臉具有較好的判別能力。選擇訓(xùn)練樣本的散布矩陣作為K-L變換的生成矩陣,其最大特征向量反映了該樣本集合的最大分布的方向,但這是圖像統(tǒng)計(jì)方法,而不是人臉統(tǒng)計(jì)方法。它查找的是圖像之間所有的差異,并根據(jù)這些差異來確定不同人臉間的距離,而不管這些差異是由于光線、發(fā)型或背景的改變引起的,還是屬于人臉本身的內(nèi)在差異,因此特征臉的方法用于人臉識別存在理論的缺陷。研究表明,特征連的方法隨著光線、角度以及人臉的尺寸的引入而識別率急劇下降。主分量的方法使得變換后的表達(dá)能力最佳,次分量的方法考慮了高頻的人臉區(qū)分能力,但是由于外在因素帶來圖像差異和人臉本身帶來的差異對K-L變換而言是不加任何區(qū)分的,因此,如何選擇正交基并不根本解決問題。改進(jìn)的一個(gè)思路是針對干擾所在,對輸入圖像作規(guī)范化處理,包括輸入圖像的均值方差歸一化,人臉尺寸歸一化。另一種改進(jìn)是考慮到局部人臉圖像受到外在干擾相對較小的情況,除了計(jì)算特征臉之外,還利用K.L變換計(jì)算出特征眼、特征嘴等。將局部特征向量加權(quán)進(jìn)行匹配得到一些好的效果。
總之,特征臉方法是一種簡單、快速、使用的基于變換系數(shù)的算法,但由于它在本質(zhì)上依賴于訓(xùn)練集合測試集圖像的灰度相關(guān)性,而且要求測試圖像與訓(xùn)練集比較接近,所以存在著很大局限。
1.2.3神經(jīng)網(wǎng)絡(luò)方法
人工神經(jīng)網(wǎng)絡(luò)是一種以大量的處理單元(神經(jīng)元)為節(jié)點(diǎn),處理單元之間實(shí)現(xiàn)加權(quán)值互連的拓?fù)浣Y(jié)構(gòu)。人工神經(jīng)網(wǎng)絡(luò)中的處理單元是人類大腦神經(jīng)單元的簡化。處理單元之間的互連則是軸突、樹突這些信息傳遞路徑的簡化。根據(jù)不同的應(yīng)用場合,現(xiàn)已研究出較多的神經(jīng)元網(wǎng)絡(luò)模型及其動(dòng)態(tài)過程的算法。
人工神經(jīng)元通常采用非線性的作用函數(shù),當(dāng)大量神經(jīng)元連接成一個(gè)網(wǎng)絡(luò)并動(dòng)態(tài)運(yùn)行時(shí),則構(gòu)成了一個(gè)非線性動(dòng)力學(xué)系統(tǒng)。人工神經(jīng)網(wǎng)絡(luò)具有自組織性、高維性、模糊性、分布性和冗余性等等特點(diǎn),較馮.諾依曼體系的計(jì)算機(jī)更適合模擬人類大腦的思維機(jī)理。但總的來說,由于人類對自身思維機(jī)理認(rèn)識的不足,所以對人工神經(jīng)元作了極度的簡化,這種模擬表現(xiàn)為極其膚淺和簡單。
很多臉部識別系統(tǒng)都采用了多層感知機(jī)作為人工神經(jīng)網(wǎng)絡(luò)的基本結(jié)構(gòu)。多層感知機(jī)由幾層全互連的非線性神經(jīng)組成。神經(jīng)元之間有權(quán)值連接,權(quán)值包含了訓(xùn)練模式空間的特征。訓(xùn)練過程就是調(diào)整權(quán)值的過程,最常用的算法就是BP法則。
多層感知機(jī)的輸入形式有很多種,最簡單的就是將整個(gè)人臉圖像作為輸入層,也可以對人臉圖像進(jìn)行采樣,然后用低分辨率圖像作為輸入層。
由此可以看出,人工神經(jīng)網(wǎng)絡(luò)有著與Eigenface方法非常相似的表達(dá)方法。
一般來說,BP算法的收斂速度非常緩慢,學(xué)習(xí)過程可能需要對整個(gè)訓(xùn)練集進(jìn)行上千次反復(fù)迭代運(yùn)算,這是神經(jīng)網(wǎng)絡(luò)實(shí)際應(yīng)用的一個(gè)問題。此外,BP算法以誤差梯度下降的方式達(dá)到極小值,但在實(shí)際應(yīng)用中,容易陷入到局部極小中,無法得到全局最優(yōu)解,這也是有待解決的一個(gè)問題。
1.2.4基于小波包的識別方法
基于小波包的面部識別方法首先對一幅人臉圖像進(jìn)行小波包分解。因?yàn)樾〔ò纸獾玫降牟煌l帶包含有不同的人臉信息,所以從每一個(gè)小波包中可以提取出不同的面部特征。對于小波包分解得到的離散逼近稀疏,Garcai進(jìn)一步將它分解成三個(gè)部分,分別是邊界區(qū)、上半部分和下半部分,然后就可以分別計(jì)算這三個(gè)區(qū)域的均值和方差,加上另外15個(gè)離散細(xì)節(jié)區(qū)域的方差,組成一個(gè)包含有21個(gè)分量的特征向量。小波包分解是一種多分辨率分析方法,能夠提供良好的面部紋理描述,所以有利于提取面部特征。
1.2.5支持向量機(jī)的識別方法
支持向量機(jī)(SupportVectorMachine,SVM)起源于統(tǒng)計(jì)學(xué)習(xí)理論,它研究如何構(gòu)造學(xué)習(xí)機(jī),實(shí)現(xiàn)模式分類問題。其基本思想是通過非線性變換將輸入空間變換到一個(gè)高維空間,在高維空間求取最優(yōu)線性分類面,以解決那些線性不可分的分類問題。而這種非線性變換是通過定義適當(dāng)?shù)膬?nèi)積函數(shù)(即核函數(shù))來實(shí)現(xiàn)的。SVM技術(shù)中核函數(shù)及其參數(shù)的選取難度較大。由于它基于結(jié)構(gòu)風(fēng)險(xiǎn)最小化原理,而不是傳統(tǒng)統(tǒng)計(jì)學(xué)的經(jīng)驗(yàn)風(fēng)險(xiǎn)最小化,因而表現(xiàn)出很多優(yōu)于已有方法的性能。由于SVM的訓(xùn)練需要大量的存儲空間,非線性SVM分類器需要較多的支持向量,所以速度很慢。
2 人臉特征提取與識別
PCA方法將包含人臉的圖像區(qū)域看作隨機(jī)向量,因此可采用K-L變換得到正交K—L基,對應(yīng)其中較大特征值的基具有與人臉相似的形狀,因此又被稱為特征臉。利用這些基的線性組合可以描述、表達(dá)和逼近人臉圖像,所以可進(jìn)行人臉識別與合成。識別過程就是將人臉圖像映射到由特征臉組成的子空間上,并比較其在特征臉空間中的位置。PCA方法認(rèn)為圖像的全局結(jié)構(gòu)信息對于識別最重要,將圖像看作一個(gè)矩陣,計(jì)算矩陣的特征值和對應(yīng)特征向量進(jìn)行識別。這種方法利用圖像的總體信息,不從圖像中提取出眼、嘴、鼻等幾何特征,算法較簡單且具有較高的識別率。
主成分分析法(PCA)是模式識別判別分析中最常用的一種線性映射方法,該方法是根據(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ù),不含任何信息。
2.1利用PCA進(jìn)行特征提取的經(jīng)典算法——Eigenface算法
在利用PCA進(jìn)行特征提取的算法中,特征臉方法(Eigenface)是其中的一個(gè)經(jīng)典算法。特征臉方法是從主成分分析導(dǎo)出的一種人臉識別和描述技術(shù)。特征臉方法就是將包含人臉的圖像區(qū)域看作是一種隨機(jī)向量,因此可以采用K-L變換獲得其正交K-L基底。對應(yīng)其中較大特征值的基底具有與人臉相似的形狀,因此又稱為特征臉。利用這些基底的線性組合可以描述、表達(dá)和逼近人臉圖像,因此可以進(jìn)行人臉識別與合成。識別過程就是將人臉圖像映射到由特征臉張成的子空間上,比較其與己知人臉在特征空間中的位置,具體步驟如下:
(1)初始化,獲得人臉圖像的訓(xùn)練集并計(jì)算特征臉,定義為人臉空間,存儲在模板庫中,以便系統(tǒng)進(jìn)行識別;
(2)輸入新的人臉圖像,將其映射到特征臉空間,得到一組關(guān)于該人臉的特征數(shù)據(jù);
(3)通過檢查圖像與人臉空間的距離判斷它是否是人臉;
(4)若為人臉,根據(jù)權(quán)值模式判斷它是否為數(shù)據(jù)庫中的某個(gè)人,并做出具體的操作。
2.2 PCA人臉識別流程
完整的PCA人臉識別應(yīng)該包括以下四個(gè)步驟:人臉圖像預(yù)處理;讀入人臉庫,訓(xùn)練成特征子空間;把訓(xùn)練圖像和測試圖像投影到上一步驟得到的子空間上;選擇一定的距離函數(shù)進(jìn)行識別。下面詳細(xì)描述整個(gè)過程:
(1)讀入人臉庫
歸一化人臉庫后,將庫中的每人選擇一定數(shù)量的圖像構(gòu)成訓(xùn)練集,其余構(gòu)成測試集。設(shè)歸一化后的圖像是N×N的,按列相連就構(gòu)成維向量,可看作是維空間中的一個(gè)點(diǎn),可以通過K-L變換用一個(gè)低維子空間描述這個(gè)圖像。
(2)計(jì)算K-L變換的生成矩陣,并求取圖像的特征值和特征向量
假設(shè)人臉圖像庫中有N幅人臉圖像,用向量表示為(向量維數(shù)設(shè)為L),其人臉平均圖像如式(2-1)所示:
由此可得到每幅圖像的均差,如式(2-2)所示:
(2-2)
這樣可計(jì)算協(xié)方差矩陣,如式(2-3)所示:
(2-3)
計(jì)算矩陣C的特征值
和對應(yīng)特征向量 但是在實(shí)際計(jì)算中,矩陣C的大小是
,即使對尺寸較小的圖像計(jì)算量還是很大。為了減小運(yùn)算量,現(xiàn)將每幅圖像的均差形成一個(gè)矩陣,如式(2-4)所示:
(2-4)
則式(2-3)可以寫成式(2-5):
(2-5)
因此,根據(jù)線性代數(shù)理論,將計(jì)算
的特征值
和對應(yīng)特征向量
的問題轉(zhuǎn)化為求
的特征值
和對應(yīng)的特征向量
的問題。
的大小僅為N×N遠(yuǎn)遠(yuǎn)小于
,故簡化了計(jì)算。在求出
后,
可以通過式(2-6)得到:
(2-6)
(3)把訓(xùn)練圖像和測試圖像投影到特征空間
由特征向量所形成的向量空間可表示人臉圖像的主要特征信息,將人臉圖像庫中所有N個(gè)圖像的均差向此空間投影,得到各自的投影向量
,如式(2-7)和(2-8)所示:
(2-7)
(2-8)
對于待識別人臉圖像I,計(jì)算其與k差的投影向量,如式(2-9)所示:
(2-9)
再與人臉圖像庫中N個(gè)人臉圖像對應(yīng)的投影向量
比較,按照一定的距離準(zhǔn)則完成識別。
(4)比較測試圖像和訓(xùn)練圖像,確定待識別樣本類別
這里可以采用多種不同的分類器進(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); % 求特征向量和特征值
2.3特征向量選取
上面所創(chuàng)建的用于投影的特征臉子空間使用的是所有r個(gè)非零的特征值對應(yīng)的特征向量。雖然協(xié)方差矩陣C最多有對應(yīng)于非零特征值的N個(gè)特征向量,且r≤N,但是通常情況下,r仍然會太大,而根據(jù)應(yīng)用的需求,并非所有的
,都有保留意義。而特征空間投影的計(jì)算速度是直接與創(chuàng)建子空間所用的特征向量的數(shù)目相關(guān),若考慮到計(jì)算時(shí)間等因素,可以適當(dāng)減去一些信息量少的特征向量,且去掉這些特征向量之后不一定不利于分類結(jié)果,有的情況下反而能夠提高識別性能。下面將討論幾種不同的特征值選擇方法:
(1)標(biāo)準(zhǔn)的特征空間投影:所有r個(gè)對應(yīng)于非零特征值的特征向量均被用于創(chuàng)建特征臉子空間。但是該方法在r值較大時(shí),計(jì)算速度會較慢,且不利于分類。
(2)為進(jìn)一步壓縮特征向量和減小運(yùn)算量,將特征值按大小順序排序,忽略小特征值所對應(yīng)的特征向量,即由下式得到
,則壓縮后的特征向量集如式(2-10)所示:
,M<r (2-10)
經(jīng)過實(shí)驗(yàn)證明當(dāng)M的取值為M=[r*20%]的時(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
2.4距離函數(shù)的選擇
圖像被投影到特征空間中,剩下的任務(wù)就是如何判別這些圖像的相似性。通常有兩種方法來判別:一種是計(jì)算在N維空間中圖像間的距離,另一種是測量圖像間的相似性。當(dāng)測量距離時(shí),我們希望距離盡可能地小,一般選擇與測試圖像最近的訓(xùn)練圖像作為它的所屬的類別。而測量相似性的時(shí)候,則希望圖像盡可能地相似,也就是說具有最大的相似性的訓(xùn)練圖像類別是測試圖像所屬的類別。在此介紹幾種計(jì)算方法:
(1)
范式
將像素間的絕對值的差值相加,也稱和范式。
范式距離公式如式(2-12)所示:
(2-12)
(2)
范式
將像素間的平方差異相加。也稱為歐幾里德距離。
范式距離公式如式(2-13)所示:
(2-13)
(3)最小距離
首先計(jì)算各類訓(xùn)練樣本的平均值,接下來的距離比較和上面的
范式完全相同。這樣分類時(shí)每類只需要比較一次,減少了計(jì)算量。樣本x與第i類的距離定義如式(2-14)所示:
(2-14)
其中
為第i類所有樣本的平均值。
2.5 基于PCA的人臉識別
基于PCA算法的人臉識別過程由訓(xùn)練階段和識別階段兩個(gè)階段組成。在訓(xùn)練階段,每個(gè)已知人臉X映射到特征臉組成的子空間上,得到N維向量
。
距離閾值
定義如式(2-15)所示:
(j,k=1,2,…,N) (2-15)
在識別的時(shí)候,首先把待識別的圖像映射到特征臉空間,得出向量P及其與每個(gè)人臉集的距離
(i=1,2,3,…,N),采用歐式距離法進(jìn)行人臉識別,分類規(guī)則為:
(1)若
>
,則輸入圖像不是人臉圖像;
(2)若
<
,
,
>
,則輸入圖像包含未知人臉;
(3)若
<
,
=min{
},則輸入圖像為庫中第k個(gè)人的人臉。
MATLAB人臉識別程序
ProjectedImages = [];
Train_Number = size(Eigenfaces,2);
for i = 1 : Train_Number
temp = Eigenfaces'*A(:,i); % 將每個(gè)樣本投影到特征空間
ProjectedImages = [ProjectedImages temp];
end
%%%%%%%%%%%從測試圖片中提取PCA特點(diǎn)
InputImage = imread(TestImage);
temp = InputImage(:,:,1);
[irow icol] = size(temp);
InImage = reshape(temp',irow*icol,1);
Difference = double(InImage)-m;
ProjectedTestImage = Eigenfaces'*Difference; % 將待測樣本投影到特征空間
%%%%%%%按照歐式距離取最小的原則得出匹配的人臉
Euc_dist = [];
for i = 1 : Train_Number
q = ProjectedImages(:,i);
temp = ( norm( ProjectedTestImage - q ) )^2;
Euc_dist = [Euc_dist temp];
end
[Euc_dist_min , Recognized_index] = min(Euc_dist);
OutputName = strcat(int2str(Recognized_index),'.jpg');
3 MATLAB軟件程序編寫
3.1.創(chuàng)建圖片數(shù)據(jù)庫
function T = CreateDatabase(TrainDatabasePath)
%%%%%%讀取訓(xùn)練庫路徑,并統(tǒng)計(jì)樣本個(gè)數(shù)
TrainFiles = dir(TrainDatabasePath);
Train_Number = 0;
for i = 1:size(TrainFiles,1)
if not(strcmp(TrainFiles(i).name,'.')|strcmp(TrainFiles(i).name,'..')|strcmp(TrainFiles(i).name,'Thumbs.db'))
Train_Number = Train_Number + 1; % Number of all images in the training database
end
end
%%%%%%%%將2維圖像轉(zhuǎn)化為一維向量
img = imread(str);
img = rgb2gray(img);
[irow icol] = size(img);
temp = reshape(img',irow*icol,1); % Reshaping 2D images into 1D image vectors
T = [T temp]; % 'T' grows after each turn
end
3.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);
T = CreateDatabase(TrainDatabasePath);
[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)
3.3最終程序結(jié)果
TrainDatabase里存放了20張圖片,TestDatabase里存放了10張圖片,所有圖片格式和分辨率都相同。運(yùn)行主程序時(shí),先設(shè)置好TrainDatabase的路徑,再設(shè)置好TestDatabase的路徑,之后還會彈出你想要匹配的圖片號(1-10),最終會顯示出Test Image和在TrainDatabase里匹配出來Equivalent Image。如果所要匹配的圖片和TrainDatabase里的圖片相同,則匹配出來的圖片則相同(如圖4-5-1);如果所要匹配的圖片在TrainDatabase里沒有,則搜索出最為相近的圖片(如圖4-5-2)。
參考文獻(xiàn)
1 黃文梅,熊佳林,楊勇編著.信號分析與處理——MATALB語言及應(yīng)用.國防科技大學(xué)出版社,2000
2 錢同惠編著.數(shù)字信號處理.北京:機(jī)械工業(yè)出版社,2004
3 姚天任,江太輝編著.數(shù)字信號處理.第2版.武漢:武漢理工大學(xué)出版社,2000
4 謝平,林洪彬,王娜.信號處理原理及應(yīng)用.機(jī)械工業(yè)出版社,2004
5 劉敏,魏玲.Matlab.通信仿真與應(yīng)用.國防工業(yè)出版社,2005
6 樓順天.基于Matlab7.x 的系統(tǒng)分析與設(shè)計(jì).西安電子科技大學(xué),2002
7孫洪.數(shù)字信號處理.電子工業(yè)出版社,2001
總結(jié)
以上是生活随笔為你收集整理的MATLAB人脸识别系统的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Scipy科学库
- 下一篇: BCH编码与译码(MATLAB实现)