模式識別方法大作業(yè)實驗報告_第1頁
模式識別方法大作業(yè)實驗報告_第2頁
模式識別方法大作業(yè)實驗報告_第3頁
模式識別方法大作業(yè)實驗報告_第4頁
模式識別方法大作業(yè)實驗報告_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、模式識別導論期末大作業(yè)2010-2011-2學期 第 3 組學號姓名工作量(%)08007204李雙1008007205陳書瑜3508007218王健勇1008007236梁文卓3508007243仲紅月10模式識別大作業(yè)人臉識別方法一- 基于pca和歐幾里得距離判據的模板匹配分類器一、 理論知識1、主成分分析主成分分析是把多個特征映射為少數幾個綜合特征的一種統(tǒng)計分析方法。在多特征的研究中,往往由于特征個數太多,且彼此之間存在著一定的相關性,因而使得所觀測的數據在一定程度上有信息的重疊。當特征較多時,在高維空間中研究樣本的分布規(guī)律就更麻煩。主成分分析采取一種降維的方法,找出幾個綜合因子來代表原

2、來眾多的特征,使這些綜合因子盡可能地反映原來變量的信息,而且彼此之間互不相關,從而達到簡化的目的。主成分的表示相當于把原來的特征進行坐標變換(乘以一個變換矩陣),得到相關性較?。▏栏駚碚f是零)的綜合因子。1.1 問題的提出一般來說,如果n個樣品中的每個樣品有n個特征,經過主成分分析,將它們綜合成n綜合變量,即由下列原則決定:1、和(,i,j = 1,2,.n)相互獨立;2、y的排序原則是方差從大到小。這樣的綜合指標因子分別是原變量的第1、第2、第n個主分量,它們的方差依次遞減。1.2主成分的導出我們觀察上述方程組,用我們熟知的矩陣表示,設是一個n維隨機向量,是滿足上式的新變量所構成的向量。于是

3、我們可以寫成y=cx,c是一個正交矩陣,滿足cc=i。坐標旋轉是指新坐標軸相互正交,仍構成一個直角坐標系。變換后的n個點在軸上有最大方差,而在軸上有最小方差。同時,注意上面第一條原則,由此我們要求軸和軸的協方差為零,那么要求令,則經過上面式子的變換,我們得到以下n個方程1.3主成分分析的結果我們要求解出c,即解出上述齊次方程的非零解,要求的系數行列式為0。最后得出結論是的根,的方差為。然后選取前面p個貢獻率大的分量,這樣就實現了降維。也就是主成分分析的目標。二、 實現方法1、 獲取數據。在編程時具體是把一幅二維的圖像轉換成一維的;2、 減去均值。要使pca正常工作,必須減去數據的均值。減去的均

4、值為每一維的平均,所有的x值都要減去,同樣所有的y值都要減去,這樣處理后的數據都具有0均值;3、 計算協方差矩陣;4、 計算協方差矩陣的特征矢量和特征值。因為協方差矩陣為方陣,我們可以計算它的特征矢量和特征值,它可以告訴我們數據的有用信息;5、選擇成分組成模式矢量現在可以進行數據壓縮降低維數了。如果你觀察上一節(jié)中的特征矢量和特征值,會注意到那些特征值是十分不同的。事實上,可以證明對應最大特征值的特征矢量就是數據的主成分。對應大特征值的特征矢量就是那條穿過數據中間的矢量,它是數據維數之間最大的關聯。一般地,從協方差矩陣找到特征矢量以后,下一步就是按照特征值由大到小進行排列,這將給出成分的重要性級

5、別?,F在,如果你喜歡,可以忽略那些重要性很小的成分,當然這會丟失一些信息,但是如果對應的特征值很小,你不會丟失很多信息。如果你已經忽略了一些成分,那么最后的數據集將有更少的維數,精確地說,如果你的原始數據是n維的,你選擇了前p個主要成分,那么你現在的數據將僅有p維?,F在要做的是你需要組成一個模式矢量,這只是幾個矢量組成的矩陣的一個有意思的名字而已,它由你保持的所有特征矢量構成,每一個特征矢量是這個矩陣的一列。6、獲得新數據這是pca最后一步,也是最容易的一步。一旦你選擇了須要保留的成分(特征矢量)并組成了模式矢量,我們簡單地對其進行轉置,并將其左乘原始數據的轉置:其中rowfeaturevec

6、tor是由特征矢量作為列組成的矩陣的轉置,因此它的行就是原來的特征矢量,而且對應最大特征值的特征矢量在該矩陣的最上一行。rowdataadjust是減去均值后的數據,即數據項目在每一列中,每一行就是一維。finaldata是最后得到的數據,數據項目在它的列中,維數沿著行。finaldata = rowfeaturevector * rowdataadjust這將僅僅給出我們選擇的數據。我們的原始數據有兩個軸(x和y),所以我們的原始數據按這兩個軸分布。我們可以按任何兩個我們喜歡的軸表示我們的數據。如果這些軸是正交的,這種表達將是最有效的,這就是特征矢量總是正交的重要性。我們已經將我們的數據從原

7、來的xy軸表達變換為現在的單個特征矢量表達。如果我們已經忽略了一些特征矢量,則新數據將會用我們保留的矢量表達。三、 matlab編程matlab程序分為三部分。程序框圖如下圖所示。這個函數將源圖像提取成特征臉,然后比較它們之間的歐幾里得距離這個函數首先得到二維數組,包括所有的訓練樣本向量并且從訓練樣本中返回3個輸出量這個函數將所有訓練樣本的二維圖像轉換成一維列向量。接著,它把這些一維列向量組合到一行里面構造出二維向量t,即每個單元的信息量是一幅圖片maineigenfacecorerecognitioncreatdatabase四、 總結從書里看我覺得最讓人明白模板匹配分類器的一段話,就是“譬

8、如a類有10個訓練樣品,就有10個模板,b類有8個訓練樣品,就有8個模板。任何一個待測樣品在分類時與這18個模板都算一算相似度,找出最相似的模板,如果該模板是b類中的一個,就確定待測樣品為b類,否則為a類。”意思很簡單吧,算相似度就是算距離。就是說,模板匹配就要用你想識別的樣品與各類中每個樣品的各個模板用距離公式計算距離,距離最短的那個就是最相似的。實驗結果表明識別率達90%。這樣的匹配方法明顯的缺點就是在計算量大,存儲量大,每個測試樣品要對每個模板計算一次相似度,如果模板量大的時候,計算量就十分的大。五、 參考文獻【1】 邊肇其,張學工.模式識別【m】.第2版.北京.:清華大學出版社,200

9、0【2】 周杰,盧春雨,張長水,李衍達,人臉自動識別方法綜述【j】.電子學報,2000,5(4):102-106六、 附錄(matlab 程序代碼)第一部分:creatdatabase.mfunction t = creatdatabase(traindatabasepath)%一系列人臉(訓練樣本t1,t2,,tm)%函數描述:這個函數將所有訓練樣本的二維圖像轉換成一維列向量。接著,它把這些一維列向量組合到一行里面構造出二維向量t,即每個單元的信息量是一幅圖片%參數: traindatabasepath - 訓練數據庫的路徑%返回值:t -%一個二維矩陣,包含了所有一維向量。假設所有在訓練樣

10、本的p幅圖像擁有相同的大?。╩*n)。因此,這些一維向量的長度是m*n而且t將是一個mn*p的二維%矩陣%文件處理%trainfiles = dir(traindatabasepath);train_number = 0;for i = 1:size(trainfiles,1) t = size(trainfiles,1); if not(strcmp(trainfiles(i).name,.)|strcmp(trainfiles(i).name,.)|strcmp(trainfiles(i).name,thumbs.db) train_number = train_number + 1; e

11、ndend%從一維數組構造成二維數組%t = ;for i = 1: train_number str = int2str(i); str = strcat(,str,.pgm); str = strcat(traindatabasepath,str); img = imread(str); irow icol = size(img); temp = reshape(img,irow*icol,1);%將二維數組變成一維數組 t = t temp;end第二部分:eigenfacecore.mfunction m,a,eigenfaces = eigenfacecore(t)%利用主成分分析(

12、pca)的方法在各張人臉中決定最明顯的特征%描述:這個方程首先得到二維數組,包括所有的訓練樣本向量并且從訓練樣本中返回3個輸出量%參數:t - 一個二維矩陣,包含了所有一維向量。假設所有在訓練樣本的p幅圖像擁有相同的大小(m*n)。因此,這些一維向量的長度是m*n而且t將是一個mn*p的二維%矩陣%返回值: m -(m*nx1)訓練樣本的均值% eigenfaces - (m*nx(p-1)訓練樣本協方差矩陣的特征向量% a - (m*nxp) 中心向量的矩陣%計算均值%m = mean(t,2); %計算樣本平均值 m = (1/p)*sum(tjs)train_number = size(

13、t,2);%計算每個圖像與均值的差%要使pca正常工作,必須減去數據的均值。減去的均值為每一維的平均,所有的x值都要減去,同樣所有的y值都要減去%這樣處理后的數據都具有0均值%a = ;for i = 1 : train_number temp = double(t(:,i) - m; a = a temp; %再次合并矩陣end%計算協方差矩陣%計算協方差矩陣的特征矢量和特征值%l = a*a; %l代表協方差矩陣 c = a*a.v d = eig(l);%計算矩陣a的特征值d(eigenvalues)和特征矩陣v(eigenvectors)%選擇成分組成模式矢量%l_eig_vec =

14、;for i = 1:size(v,2) if(d(i,i)1) l_eig_vec = l_eig_vec v(:,1); endend%計算協方差矩陣的特征向量%eigenfaces = a * l_eig_vec;第三部分:recognition.mfunction outputname = recognition(testimage, m, a, eigenfaces)%函數描述:這個函數將源圖像提取成特征臉,然后比較它們之間的歐幾里得距離%輸入量: testimage -測試樣本的路徑% m -(m*nx1)訓練樣本的均值% eigenfaces - (m*nx(p-1)訓練樣本協方

15、差矩陣的特征向量% a - (m*nxp) 中心向量的矩陣%返回值: outputname -在訓練樣本中的被識別的圖像的名字%從中心向量中提取特征臉%projectedimages = ;train_number = size(eigenfaces,2);for i = 1:train_number temp = eigenfaces * a(:,i) projectedimages = projectedimages temp;end%從測試樣本中提取pca特征%inputimage = imread(testimage);temp = inputimage(:,:,1);irow ico

16、l = 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%找出a中最小元素及其索引,把最小值返回給c,最小值索引返回

17、給i。 %如果有幾個相同的最小值,那么返回第一個被發(fā)現的索引。euc_dist_min, recognized_index = min(euc_dist);outputname = strcat(int2str(recognized_index),.pgm);主程序clear allclcclose alltraindatabasepath = uigetdir(c:matlab7workpca, select training database path );testdatabasepath = uigetdir(c:matlab7workpca, select test database

18、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),.pgm);im = imread(testimage);t = creatdatabase(trainda

19、tabasepath);m, a, eigenfaces = eigenfacecore(t);outputname = recognition(testimage, m, a, eigenfaces);selectedimage = strcat(traindatabasepath,outputname);selectedimage = imread(selectedimage);imshow(im)title(test image);figure, imshow(selectedimage);title(equivalent image);str = strcat(matched imag

20、e is : , outputname);disp(str)模式識別大作業(yè)人臉識別方法二- 基于pca和fld的人臉識別的線性分類器一、理論知識1、 fisher概念引出在應用統(tǒng)計方法解決模式識別問題時,為了解決“維數災難”的問題,壓縮特征空間的維數非常必要。fisher方法實際上涉及到維數壓縮的問題。fisher分類器是一種幾何分類器, 包括線性分類器和非線性分類器。線性分類器有:感知器算法、增量校正算法、lmse分類算法、fisher分類。若把多維特征空間的點投影到一條直線上,就能把特征空間壓縮成一維。那么關鍵就是找到這條直線的方向,找得好,分得好,找不好,就混在一起。因此fisher方法

21、目標就是找到這個最好的直線方向以及如何實現向最好方向投影的變換。這個投影變換恰是我們所尋求的解向量,這是fisher算法的基本問題。樣品訓練集以及待測樣品的特征數目為n。為了找到最佳投影方向,需要計算出各類均值、樣品類內離散度矩陣和總類間離散度矩陣、樣品類間離散度矩陣,根據fisher準則,找到最佳投影準則,將訓練集內所有樣品進行投影,投影到一維y空間,由于y空間是一維的,則需要求出y空間的劃分邊界點,找到邊界點后,就可以對待測樣品進行進行一維y空間的投影,判斷它的投影點與分界點的關系,將其歸類。fisher法的核心為二字:投影。二、 實現方法(1) 計算給類樣品均值向量,是各個類的均值,是類

22、的樣品個數。(2) 計算樣品類內離散度矩陣和總類間離散度矩陣(3) 計算樣品類間離散度矩陣(4) 求向量我們希望投影后,在一維y空間各類樣品盡可能地分開,也就是說我們希望兩類樣品均值之差()越大越好,同時希望各類樣品內部盡量密集,即希望類內離散度越小越好,因此,我們可以定義fisher準則函數:使得取得最大值的為 (5) 將訓練集內所有樣品進行投影如果是非奇異的,則要獲得類間離散度與類內離散度的比值最大的投影方向的滿足下式:其中是滿足下式的和對應的m個最大特征值所對應的特征向量。注意到該矩陣最多只有c-1個非零特征值,c是類別數。2、程序中算法的應用fisher線性判別方法(fld)是在fis

23、her鑒別準則函數取極值的情況下,求得一個最佳判別方向,然后從高位特征向量投影到該最佳鑒別方向,構成一個一維的判別特征空間。將fisher線性判別推廣到c-1個判決函數下,即從n維空間向c-1維空間作相應的投影。利用這個m維的投影矩陣m將訓練樣本n維向量空間轉化為m維的mef空間并且獲得在mef空間上的最佳描述特征,即由這n個mef空間上的最佳描述特征可以求出的樣品類內離散度矩陣和總類間離散度矩陣,取的k個最大的特征可以構成fld投影矩陣w。將mef空間上的最佳描述特征在fld投影矩陣w上進行投影,將mef空間降維到mdf空間,并獲得對應的mdf空間上的最佳分類特征,即通過計算的歐氏距離,可以

24、將訓練樣本分為c(c等于的秩),完成對訓練樣本集的分類1、 matlab編程1、fisher判別法人臉檢測與識別流程圖2、matlab程序分為三部分。程序框圖如下圖所示。mainfisherfacecorerecognitioncreatdatabase這個函數將所有訓練樣本的二維圖像轉換成一維列向量。接著,它把這些一維列向量組合到一行里面構造出二維向量t,即每個單元的信息量是一幅圖片這個函數將源圖像提取成特征臉,然后比較它們之間的歐幾里得距離pca提取特征值fisher分類器設計。從fisher線性空間中提取圖像2、 總結從計算成本來看,pca+lda方法的好處在于對高維空間的降維,避免了類

25、內離散度矩陣不可逆的情況。然而,從識別性能來看,由于主成分只是代表圖像的灰度特征,是從能量的角度衡量主成分大小的,應用pca之后,舍棄的對應較小特征值的次要成分有可能對lda來說重要的分類信息,有可能降低分類識別性能。而且,在實際應用中,特別是在人臉圖像識別中,由于“維數災難”的存在,fld通常會遇到兩個方面的困難:(1) 類內離散度矩陣總是奇異的。這是由于的秩最多為n-c,(n是用于訓練樣本的圖像數目,c是人臉的類別數)。而一般情況下,用于訓練的圖像數目n是遠小于每幅圖像的像素數目,即“小樣本問題“經常出現。(2) 計算的復雜度。在高維空間中,要得出一個分類向量的復雜度遠遠高于計算一個低維空

26、間中的分類向量。3、 參考文獻【1】邊肇其,張學工.模式識別【m】.第2版.北京.:清華大學出版社,2000待添加的隱藏文字內容3【2】周杰,盧春雨,張長水,李衍達,人臉自動識別方法綜述【j】.電子學報,2000,5(4):102-1064、 附錄(matlab 程序代碼)1、第一部分:creatdatabase.mfunction t = creatdatabase(traindatabasepath)trainfiles = dir(traindatabasepath);train_number = 0;%統(tǒng)計文件數%for i = 1:size(trainfiles,1) if not(

27、strcmp(trainfiles(i).name,.)|strcmp(trainfiles(i).name,.)|strcmp(trainfiles(i).name,thumbs.db) train_number = train_number + 1; endend%二維轉一維%t = ;for i = 1 : train_number str = int2str(i);%把文件索引轉換為字符串格式 str = strcat(,str,.pgm); str = strcat(traindatabasepath,str); img = imread(str); irow icol = size

28、(img); temp = reshape(img,irow*icol,1); t = t temp;endt = double(t);2、第二部分:fisherfacecorefunction m_database v_pca v_fisher projectedimages_fisher class_number class_population = fisherfacecore(t)%返回值注釋%m_database - (m*nx1)維的訓練樣本均值%v_pca - (m*nx(p-c)訓練樣本協方差的特征向量%v_fisher - (p-c)x(c-1) 最大的(c-1)維j = i

29、nv(sw) * sb的特征矩陣%projectedimages_fisher - (c-1)xp)維訓練樣本,這些樣本從fisher線性空間中提取%基本量賦值 %class_number=(size(t,2)/9; 類的數目,除以8取決于樣本中有多少類人class_population = 9;%每一類的圖像數目p = class_population * class_number; %總訓練樣本的數目%計算均值%m_database = mean(t,2);%包含t每一行均值的列向量%計算方差%a = t - repmat(m_database,1,p);%計算特征臉的算法%l = a *

30、 a;v d = eig(l);v = fliplr(v);%篩選小的特征值%l_eig_vec = ;dig = fliplr(max(d);for i = 1 : class_number l_eig_vec = l_eig_vec v(:,i)/sqrt(dig(i);end%計算特征矩陣的協方差矩陣c%v_pca = a * l_eig_vec;%v_pca就是降維后的協方差矩陣projectedimages_pca = ;for i = 1 : p temp = v_pca*a(:,i); projectedimages_pca = projectedimages_pca temp;

31、 end%fisher分類器的設計方法%計算在特征空間里面每一個類的均值%m_pca = mean(projectedimages_pca,2) %特征空間總的均值m = zeros( class_number, class_number );sw = zeros( class_number, class_number);sb = zeros( class_number, class_number); for i = 1 : class_number m(:,i) = mean( ( projectedimages_pca(:,(i-1)*class_population+1):i*class

32、_population) ), 2 ); %每一類的樣本分別求均值 s = zeros(class_number, class_number); for j = (i-1) * class_population + 1) : ( i*class_population ) s = s + ( projectedimages_pca(:,j) - m(:,i) * (projectedimages_pca(:,j) - m(:,i); end sw = sw + s;sb = sb + (m(:,i) - m_pca) * (m(:,i) - m_pca)end %計算fisher判別準則,目標是

33、獲取最大類間離散度和最小類內離散度%j_eig_vec, j_eig_val = eig(sb,sw);j_eig_val = max(j_eig_val); j_eig_vec = fliplr(j_eig_vec); %去除0特征根和排序for i = 1 : class_number - 1 v_fisher(:,i) = j_eig_vec(:,i);%fisher判別法將n維映射到c-1維end %從fisher線性空間中提取圖像%yi = v_fisher * v_pca * (ti - m_database)for i = 1: class_number * class_population projectedimages_fisher(:,i) = v_fisher * projectedimages_pca(:,i); end%由pca過渡到fld%img_fisher = w_fisher * pca_img;%projectedimages_fisher = v_fisher * projectedimages_pca; 3、第三部分:recognition.mfunction o

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論