歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> OpenCV人臉識別Eigen算法源碼分析

OpenCV人臉識別Eigen算法源碼分析

日期:2017/3/1 9:14:23   编辑:Linux編程

1 理論基礎

學習Eigen人臉識別算法需要了解一下它用到的幾個理論基礎,現總結如下:

1.1 協方差矩陣

首先需要了解一下公式:

共公式可以看出:均值描述的是樣本集合的平均值,而標准差描述的則是樣本集合的各個樣本點到均值的距離之平均。以一個國家國民收入為例,均值反映了平均收入,而均方差/方差則反映了貧富差距,如果兩個國家國民收入均值相等,則標准差越大說明國家的國民收入越不均衡,貧富差距較大。以上公式都是用來描述一維數據量的,把方差公式推廣到二維,則可得到協方差公式:

協方差表明了兩個隨機變量之間的相關性,值為正說明兩者是正相關的,值為負說明兩者是負相關的,值為零說明兩者不相關,舉一個簡單的小例子,假設一個人用4個維度身高、體重、距離屋頂的高度、每天畫畫的時間來表示:身高取樣X=[1 2 3 4 5 6 7 8 9],體重取樣Y=[11 12 13 14 15 16 17 18 19],距離屋頂的高度取樣Z=[9 8 7 6 5 4 3 2 1],每天畫畫時間L=[1 1 1 1 1 1 1 1 1],則有cov(X,Y)=7.5,cov(X,Z)=-7.5,cov(X,L)=0,結果很明顯X和Y協方差為正數兩者正相關,X和Z協方差為負數兩者負相關,X和L協方差為0,說明它們不相關。以上例子每一個隨機變量都可以表示一個維度,我們計算了部分維度之間的協方差,計算所有維度之間的協方差並組織成矩陣的形式,就有了協方差矩陣的概念:Cnxn=[ci,j]=[cov(Dimi,Dimj)] i,j=1,2,…,n,Dimi表示第i個維度向量。以Matlab協方差矩陣為例,將X,Y,Z,L分別作為1,2,3,4個維度,則有c1,1=7.5,c1,2=7.5,c1,3=-7.5,c1,4=7.5……,所以協方差矩陣為:

在Matlab中可以把矩陣的每行看做是4個隨機變量的一組取樣樣本,每列看做是一個維度,則可以直接用con函數求得4個維度的協方差矩陣:

OpenCV官方教程中文版(For Python) PDF http://www.linuxidc.com/Linux/2015-08/121400.htm

Ubuntu Linux下安裝OpenCV2.4.1所需包 http://www.linuxidc.com/Linux/2012-08/68184.htm

Ubuntu 12.04 安裝 OpenCV2.4.2 http://www.linuxidc.com/Linux/2012-09/70158.htm

CentOS下OpenCV無法讀取視頻文件 http://www.linuxidc.com/Linux/2011-07/39295.htm

Ubuntu 12.04下安裝OpenCV 2.4.5總結 http://www.linuxidc.com/Linux/2013-06/86704.htm

Ubuntu 10.04中安裝OpenCv2.1九步曲 http://www.linuxidc.com/Linux/2010-09/28678.htm

基於QT和OpenCV的人臉識別系統 http://www.linuxidc.com/Linux/2011-11/47806.htm

[翻譯]Ubuntu 14.04, 13.10 下安裝 OpenCV 2.4.9 http://www.linuxidc.com/Linux/2014-12/110045.htm

1.2 Jacobi迭代法求對稱矩陣特征向量及特征值

雅可比迭代法的基本思想是:通過一組平面旋轉變換(相似正交變換)化對稱矩陣A為對角矩陣,進而求出A的特征值與特征向量。由線性代數理論可知:若矩陣A是實對稱矩陣,則一定存在正交矩陣U,使得UT*A*U=D,其中D對角矩陣,其主對角線元素λi是A的特征值,正交矩陣U的第i列是A對應特征值λi的特征向量。於是求對稱矩陣A的特征值問題轉化為尋找正交矩陣U,使得UT*A*U為對角矩陣,這個問題的困難在於如何構造U,為此我們先看一下平面上的旋轉變換:

則有:

其中:

上述推導其實說明了一種構造正交矩陣P,並使得PT*A*P為對角矩陣的方法,可以將這種方法推廣到nxn對角矩陣,首先引入n階旋轉矩陣(Givens矩陣)的概念:

平面旋轉矩陣有如下性質:

(1)Upq為正交矩陣,即UpqT*Upq=E

(2)UTAU=B仍為對稱矩陣,且B與A有相同的特征值

Jacobi迭代法,在每一次迭代時都是進行一次(2)中的轉換,這裡p、q分別是前一次的迭代矩陣A的非主對角線上絕對值最大元素的行列號,變換後元素值可以由以下公式求出:

由公式可以看出轉換後矩陣相比原矩陣只是在p,q行和列的元素發生了改變,旋轉角的計算過程和2維時一樣,其意義是使得apq和aqp值為零,這樣每次迭代都使得非對角線上絕對值最大的元素變為零,所以整個迭代的過程就是使對角線外元素逐步逼近於零,這是對角線上的元素即為原對稱矩陣的特征值λi。在進行Jacobi迭代時,假如i次迭代時旋轉矩陣為Ui,每次迭代對單位矩陣I依次左乘Ui,最終迭代結束後可得矩陣D=Uk…U2U1I,這裡k為迭代次數,則可以證明D的列向量即為特征值λi對應的特征向量,證明如下:

上述推導過程中di為矩陣D的i列表示的列向量,由最後的等式及特征值定義,可以得知λi是A的特征值,di為對應的特征向量。

更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2016-07/133092p2.htm

Copyright © Linux教程網 All Rights Reserved