opencv特徵臉方法(Eigenface)

2021-10-23 03:59:56 字數 1708 閱讀 9328

eigenvalue:特徵值

特徵值演算法基本是將人臉識別演算法推向真正可用的第一種方法,

其主要工作步驟如下:

1)將訓練集的每乙個人臉影象都拉長一列,將他們組合在一起形成乙個大矩陣a。假設每個人臉影象是mxm大小,那麼拉成一列後每個人臉樣本的維度就是d=mxm大小了。假設有n個人臉影象,那麼樣本矩陣a的維度就是dxn了。

2)將所有的n個人臉在對應維度上加起來,然後求個平均,就得到了乙個「平均臉」。你把這個臉顯示出來的話,還挺帥的哦。

3)將n個影象都減去那個平均臉影象,得到差值影象的資料矩陣φ。

4)計算協方差矩陣c=φφt。再對其進行特徵值分解。就可以得到想要的特徵向量(特徵臉)了。

5)將訓練集影象和測試集的影象都投影到這些特徵向量上了,再對測試集的每個影象找到訓練集中的最近鄰或者k近鄰啥的,進行分類即可。

詳細步驟:

步驟一:獲取包含m張人臉影象的集合s。在我們的例子裡有25張人臉影象,。每張影象可以轉換成乙個n維的向量(是的,沒錯,乙個畫素乙個畫素的排成一行就好了,至於是橫著還是豎著獲取原影象的畫素,隨你自己,只要前後統一就可以),然後把這m個向量放到乙個集合s裡,如下式所示。

基本上得到了這樣乙個人。。。。。 這就是傳說中的大眾臉?

步驟三:計算每張影象和平均影象的差值φ ,就是用s集合裡的每個元素減去步驟二中的平均值。

也就是說開始的那20個人, 每人都減去這個大眾臉。

步驟四: 先看看這個 「」 ,

如果訓練影象的數量小於影象的維數比如(m2),那麼起作用的特徵向量只有m-1個而不是n2個(因為其他的特徵向量對應的特徵值為0),所以求解特徵向量我們只需要求解乙個nxn的矩陣。我們可以設該矩陣為l,那麼l的第m行n列的元素可以表示為:

一旦我們找到了l矩陣的m個特徵向量vl,那麼協方差矩陣的特徵向量ul就可以表示為:

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

步驟五

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

其中k=1,2…m,對於第k個特徵臉uk,上式可以計算其對應的權重,m個權重可以構成乙個向量:

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

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

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

利用opencv進行換臉

關於換臉的什麼背景什麼的,我也就不提了,直接說一下換臉所需要的步驟吧,在這裡我用的是opencv和之前我用的clm框架,clm還是進行人臉關鍵點檢測,利用opencv進行臉部替換和顏色風格統一。接下來是利用opencv換臉的一般步驟 臉部關鍵點檢測 因為我們要變換的兩張臉的形狀一般是不同的,所以我們...

Opencv特徵分析

影象處理程式設計例項筆記 第8章特徵分析 第8章 特徵分析 8.1尺度空間 8.2特徵描述子 8.3方向梯度直方圖hog 8.4區域性二值模式lbp 8.5haar特徵描述 8.6應用例項 分析未知場景目標,無法得知目標尺寸。8.1.1尺度與旋轉不變性 8.1.2特徵點尺度變換 關鍵點檢測與關鍵點提...

opencv 輪廓特徵2

函式 moments moments inputarray array,bool binaryimage false 用來計算多邊形或珊格形狀的0 3階矩。moments類定義如下 classmoments mxx是0 3階矩,muxx是0 3階中心矩,nuxx是0 3階歸一化中心矩,公式如下 當計...