人臉識別經典方法

這篇文章是擼主要介紹人臉識別經典方法的第一篇,后續會有其他方法更新。特征臉方法基本是將人臉識別推向真正可用的第一種方法,了解一下還是很有必要的。特征臉用到的理論基礎PCA在另一篇博客里:特征臉(Eigenface)理論基礎-PCA(主成分分析法)?。本文的參考資料附在最后了^_^

步驟一:獲取包含M張人臉圖像的集合S。在我們的例子里有25張人臉圖像(雖然是25個不同人的人臉的圖像,但是看著怎么不像呢,難道我有臉盲癥么),如下圖所示哦。每張圖像可以轉換成一個N維的向量(是的,沒錯,一個像素一個像素的排成一行就好了,至于是橫著還是豎著獲取原圖像的像素,隨你自己,只要前后統一就可以),然后把這M個向量放到一個集合S里,如下式所示。



步驟二:在獲取到人臉向量集合S后,計算得到平均圖像Ψ?,至于怎么計算平均圖像,公式在下面。就是把集合S里面的向量遍歷一遍進行累加,然后取平均值。得到的這個Ψ?其實還挺有意思的,Ψ?其實也是一個N維向量,如果再把它還原回圖像的形式的話,可以得到如下的“平均臉”,是的沒錯,還他媽的挺帥啊。那如果你想看一下某計算機學院男生平均下來都長得什么樣子,用上面的方法就可以了。



步驟三:計算每張圖像和平均圖像的差值Φ??,就是用S集合里的每個元素減去步驟二中的平均值。


步驟四:找到M個正交的單位向量un?,這些單位向量其實是用來描述Φ??(步驟三中的差值)分布的。un?里面的第k(k=1,2,3...M)個向量uk?是通過下式計算的,

當這個λk(原文里取了個名字叫特征值)取最小的值時,uk??基本就確定了。補充一下,剛才也說了,這M個向量是相互正交而且是單位長度的,所以啦,uk??還要滿足下式:


上面的等式使得uk?為單位正交向量。計算上面的uk?其實就是計算如下協方差矩陣的特征向量:


其中


對于一個NxN(比如100x100)維的圖像來說,上述直接計算其特征向量計算量實在是太大了(協方差矩陣可以達到10000x10000),所以有了如下的簡單計算。

步驟四另解:如果訓練圖像的數量小于圖像的維數比如(M<N^2),那么起作用的特征向量只有M-1個而不是N^2個(因為其他的特征向量對應的特征值為0),所以求解特征向量我們只需要求解一個NxN的矩陣。這個矩陣就是步驟四中的AAT?,我們可以設該矩陣為L,那么L的第m行n列的元素可以表示為:


一旦我們找到了L矩陣的M個特征向量vl,那么協方差矩陣的特征向量ul就可以表示為:


這些特征向量如果還原成像素排列的話,其實還蠻像人臉的,所以稱之為特征臉(如下圖)。圖里有二十五個特征臉,數量上和訓練圖像相等只是巧合。有論文表明一般的應用40個特征臉已經足夠了。論文Eigenface for recognition里只用了7個特征臉來表明實驗。


步驟五:識別人臉。OK,終于到這步了,別繞暈啦,上面幾步是為了對人臉進行降維找到表征人臉的合適向量的。首先考慮一張新的人臉,我們可以用特征臉對其進行標示:


其中k=1,2...M,對于第k個特征臉uk,上式可以計算其對應的權重,M個權重可以構成一個向量:


perfect,這就是求得的特征臉對人臉的表示了!

那如何對人臉進行識別呢,看下式:


其中Ω代表要判別的人臉,Ωk代表訓練集內的某個人臉,兩者都是通過特征臉的權重來表示的。式子是對兩者求歐式距離,當距離小于閾值時說明要判別的臉和訓練集內的第k個臉是同一個人的。當遍歷所有訓練集都大于閾值時,根據距離值的大小又可分為是新的人臉或者不是人臉的兩種情況。根據訓練集的不同,閾值設定并不是固定的。

后續會有對PCA理論的補充^_^.已補充理論:特征臉(Eigenface)理論基礎-PCA(主成分分析法)

參考資料:

1、Eigenface for Recognition:http://www.cs.ucsb.edu/~mturk/Papers/jcn.pdf

2、特征臉維基百科:http://zh.wikipedia.org/wiki/%E7%89%B9%E5%BE%81%E8%84%B8

3、Eigenface_tutorial:http://www.pages.drexel.edu/~sis26/Eigenface%20Tutorial.htm

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/387662.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/387662.shtml
英文地址,請注明出處:http://en.pswp.cn/news/387662.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Jquery常用正則驗證

常用校驗的正則表達式var rulesConfig { /** * str.replace(/^\s|\s$/g, ) 解析&#xff1a; str&#xff1a;要替換的字符串 \s : 表示 space &#xff0c;空格 &#xff1a; 一個或多個 ^&#xff1a; 開始&#xff0c;^\s&#xff0c;以空格開始 $&#xff1a; 結束&#x…

svm參數說明

svm參數說明---------------------- 如果你要輸出類的概率&#xff0c;一定要有-b參數 svm-train training_set_file model_file svm-predict test_file model_fileoutput_file 自動腳本&#xff1a;Python easy.py train_data test_data 自動選擇最優參數&#xff0c;自動進行…

poj-3667(線段樹區間合并)

題目鏈接&#xff1a;傳送門 參考文章&#xff1a;傳送門 思路&#xff1a;線段樹區間合并問題&#xff0c;每次查詢到滿足線段樹的區間最左值&#xff0c;然后更新線段樹。 #include<iostream> #include<cstdio> #include<cstring> using namespace std; co…

面試題編程題11-python 生成隨機數

隨機整數&#xff1a; random.randint(a,b), [a,b] random.randrange(a,b,step) [a,b) 隨機實數 random.random()返回0 到1 之間的浮點數轉載于:https://www.cnblogs.com/feihujiushiwo/p/10922454.html

車牌識別之顏色選取

車牌定位是車牌識別中第一步&#xff0c;也是最重要的一步。 由于中國車牌種類多樣&#xff0c;顏色不一&#xff0c; 再加上車牌經常有污損&#xff0c;以及車牌周圍干擾因素太多&#xff0c;都成為了車牌定位的難點。 這里首先使用最簡單算法來描述車牌定位&#xff0c;以及他…

Python - 排序( 插入, 冒泡, 快速, 二分 )

插入排序 算法分析 兩次循環, 大循環對隊列中的每一個元素拿出來作為小循環的裁定對象 小循環對堆當前循環對象在有序隊列中尋找插入的位置 性能參數 空間復雜度  O(1) 時間復雜度  O(n^2) 詳細代碼解讀 import randomdef func(l):# 外層循環: 對應遍歷所有的無序數據for i…

[EmguCV|C#]使用CvInvoke自己繪製色彩直方圖-直方圖(Hitsogram)系列(4)

2014-02-0610325 0C# 檢舉文章 過年結束了&#xff0c;雖然還是學生所以其實還有兩個禮拜的假期&#xff0c;不過為了不讓自己發慌&#xff0c;趁著假期多利用充實自己&#xff0c;所以提早回到開工狀態&#xff0c;而這次總算要把一直說的自己動手繪製猜色直方圖文章寫出。 …

G.點我

鏈接&#xff1a;https://ac.nowcoder.com/acm/contest/903/G 題意&#xff1a; X腿與隊友到河北省來參加2019河北省大學生程序設計競賽&#xff0c;然而這場比賽的題目難度實在是太高了。比賽開始一個小時后&#xff0c;X腿仍然沒有做出一個題。這時候&#xff0c;X腿驚訝的發…

輪廓的查找、表達、繪制、特性及匹配(How to Use Contour? Find, Component, Construct, Features Match)

前言 輪廓是構成任何一個形狀的邊界或外形線。前面講了如何根據色彩及色彩的分布&#xff08;直方圖對比和模板匹配&#xff09;來進行匹配&#xff0c;現在我們來看看如何利用物體的輪廓。包括以下內容&#xff1a;輪廓的查找、表達方式、組織方式、繪制、特性、匹配。 查…

Android:IntentService的學習

在Android的四大組件中&#xff0c;Service排行老二&#xff0c;在Android中的主要作用是后臺服務&#xff0c;進行與界面無關的操作。由于Service運行在主線程&#xff0c;所以進行異步操作需要在子線進行。為此Android為我們提供了IntentService。 IntentService是一個抽象類…

智能商業大會構造信息化交流平臺

在快速發展的當今社會&#xff0c;所有事物都在日新月異地變化著&#xff0c;相較于過去的傳統商業的變化速度&#xff0c;現今基于數據的互聯網商業變化速度高出了一個量級&#xff0c;同時市場對于企業的應對速度也有了更高的要求&#xff0c;然而面對大體量的數據&#xff0…

itcast-ssh-crm實踐

分析 BaseDao 文件上傳 轉載于:https://www.cnblogs.com/hellowq/p/10209761.html

分類器大牛們

David Lowe&#xff1a;Sift算法的發明者&#xff0c;天才。 Rob Hess&#xff1a;sift的源碼OpenSift的作者&#xff0c;個人主頁上有openSift的下載鏈接&#xff0c;Opencv中sift的實現&#xff0c;也是參考這個。 Koen van de Sande&#xff1a;作者給出了sift,densesift,co…

go 成長路上的坑(1)

一、先來看一段代碼 package mainimport "fmt"type X struct{}func (x *X) test(){println("h1",x) } func main(){a : X{} a.test()(&X{}).test()(X{}).test() } 猜猜他的結果 二、揭曉答案 package mainimport "fmt"type X struct{}func (…

利用python腳本程序監控文件被修改

需求&#xff1a;利用python編寫監控程序&#xff0c;監控一個文件目錄&#xff0c;當目錄下的文件發生改變時&#xff0c;實現有修改就發報警郵件 郵件使用QQ郵箱&#xff0c;需要開啟smtp&#xff0c;使用手機發生短信&#xff0c;騰訊會給你發郵箱密碼。如下所示&#xff1a…

Oracle RAC

環境如下&#xff1a; Linux操作系統&#xff1a;Centos 6.5 64bit &#xff08;這個版本的redhat 6內核等OS在安裝grid最后執行root.sh時會出現crs-4124&#xff0c;是oracle11.2.0.1的bug&#xff09; VMware version&#xff1a;Workstation 8.0.3 build-703057 Oracle…

好程序員web前端分享MVVM框架Vue實現原理

好程序員web前端分享MVVM框架Vue實現原理&#xff0c;Vue.js是當下很火的一個JavaScript MVVM庫&#xff0c;它是以數據驅動和組件化的思想構建的。相比于Angular.js和react.js更加簡潔、更易于理解的API&#xff0c;使得我們能夠快速地上手并使用Vue.js。?1.什么是MVVM呢&…

HDU - 3516 Tree Construction

HDU - 3516 思路&#xff1a; 平行四邊形不等式優化dp &#xff1a;&#xff09; 代碼&#xff1a; #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include<bits/stdc.h> using namespace std; #define y1 y11 #define fi first #define se…

各類總線傳輸速率

1. USB總線 USB1.1&#xff1a; -------低速模式(low speed)&#xff1a;1.5Mbps -------全速模式(full speed)&#xff1a; 12Mbps USB2.0&#xff1a;向下兼容。增加了高速模式&#xff0c;最大速率480Mbps。 -------高速模式(high speed)&#xff1a; 25~480Mbps US…

Activiti多人會簽例子

Activiti中提供了多實例任務&#xff08;for-each&#xff09;將多實例應到到UserTask中可以實現會簽功能。 Multi-instance (for each) Description A multi-instance activity is a way of defining repetition for a certain step in a business process. In programming …