日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

FisherFace 进行人脸分裂

發(fā)布時間:2025/4/16 pytorch 73 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FisherFace 进行人脸分裂 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
clear all clc close alladdress=[pwd,'\ORL','\s'];rows=112; cols=92; ClassNum=40; tol_num=10; image_fmt='.bmp'; train_samplesize=5;%-------------------------------------------------------------------------- %------------------------PCA降維 train=1:train_samplesize; test=train_samplesize+1:tol_num; %PCA維數(shù) Eigen_NUM=40;%每類訓練樣本、測試樣本個數(shù) train_num=length(train); test_num=length(test);%讀入訓練樣本,測試樣本 [train_sample,train_label]=readsample(address,ClassNum,train,rows,cols,image_fmt); [test_sample,test_label]=readsample(address,ClassNum,test,rows,cols,image_fmt);%訓練樣本總數(shù)、測試樣本總數(shù) train_tol=length(train_label); test_tol=length(test_label);%PCA降維 Train_SET=train_sample'; [disc_set,disc_value,Mean_Image]=Eigenface_f(Train_SET,Eigen_NUM);%訓練樣本、測試樣本第一次投影 train_pro=disc_set'*train_sample'; test_pro=disc_set'*test_sample';%訓練樣本總體均值及每類均值 total_mean=mean(train_pro,2); EachClassMean=zeros(Eigen_NUM,ClassNum); EachClassNum=zeros(1,ClassNum); for i=1:ClassNumtemp=train_pro(:,(i==train_label));EachClassMean(:,i)=mean(temp,2);EachClassNum(i)=sum((i==train_label)); end%構造Fai_b、Fai_w,以便計算Sb和Sw Fai_b=zeros(Eigen_NUM,ClassNum); Fai_w=zeros(Eigen_NUM,train_tol); for i=1:ClassNumtemp=EachClassMean(i)-total_mean;Fai_b(:,i)=sqrt(EachClassNum(i))*temp; end for i=1:train_tolFai_w(:,i)=train_pro(:,i)-EachClassMean(:,train_label(i)); end Sb=Fai_b*Fai_b'; Sw=Fai_w*Fai_w';%廣義特征值分解,得到LDA的投影矩陣 LDA_dim=ClassNum-1; % LDA_dim=12; [eig_vec,eig_val]=eig(Sb,Sw); d=diag(eig_val)'; [sorted_d,ind]=sort(d,'descend'); sorted_vec=eig_vec(:,ind); W_LDA=sorted_vec(:,1:LDA_dim);%訓練樣本、測試樣本再次投影 train_final=W_LDA'*train_pro; test_final=W_LDA'*test_pro;%調用最近鄰分類器對測試樣本分類 Sample=test_final'; Training=train_final'; Group=train_label'; k=1; distance='euclidean'; Class = knnclassify(Sample, Training, Group, k, distance); accuracy=sum(test_label==Class')/test_tol;%---------------------------------輸出顯示---------------------------------- fprintf('每類訓練樣本數(shù)為:%d\n',train_samplesize); fprintf(2,'FisherFace的識別率為:%.2f%%\n\n',accuracy*100);

function [sample,label]=readsample(address,ClassNum,data,rows,cols,image_fmt) %這個函數(shù)用來讀取樣本。 %輸入: %address:要讀取的樣本的路徑 %ClassNum:代表要讀入樣本的類別數(shù) %data:數(shù)據 %rows:樣本行數(shù) %cols:樣本列數(shù) %image_fmt:圖片格式%輸出: %sample:樣本矩陣,每行為一個樣本,每列為一個特征 %label:標簽向量ImageSize=rows*cols; sample_tol=ClassNum*length(data);%讀入的樣本總數(shù) sample=zeros(sample_tol,ImageSize); label=zeros(1,sample_tol); m=1; for i=1:ClassNumfor j=dataa=imread(strcat(address,num2str(i),'_',num2str(j),image_fmt));a=imresize(a,[rows cols]);b=double(reshape(a,1,ImageSize));sample(m,:)=b;label(m)=i;m=m+1;end end
function [disc_set,disc_value,Mean_Image]=Eigenface_f(Train_SET,Eigen_NUM) %輸入: %Train_SET:訓練樣本集,每列是一個樣本,每行一類特征,mxn %Eigen_NUM:投影維數(shù)%輸出: %disc_set:特征向量 %disc_value:特征值 %Mean_Image:均值圖像%------------------------------------------------------------------------ % Eigenface computing function[NN,Train_NUM]=size(Train_SET);if NN<=Train_NUM % m<n時Mean_Image=mean(Train_SET,2);Train_SET=Train_SET-Mean_Image*ones(1,Train_NUM);R=Train_SET*Train_SET'/(Train_NUM-1);%協(xié)方差矩陣[V,S]=Find_K_Max_Eigen(R,Eigen_NUM);disc_value=S;disc_set=real(V);else % m>n時Mean_Image=mean(Train_SET,2);Train_SET=Train_SET-Mean_Image*ones(1,Train_NUM);R=Train_SET'*Train_SET/(Train_NUM-1);[V,S]=Find_K_Max_Eigen(R,Eigen_NUM);disc_value=S;disc_set=zeros(NN,Eigen_NUM);clear R S;Train_SET=Train_SET/sqrt(Train_NUM-1);for k=1:Eigen_NUMa = Train_SET*V(:,k);b = (1/sqrt(disc_value(k)));disc_set(:,k)=b*a;enddisc_set=real(disc_set); endfunction [Eigen_Vector,Eigen_Value]=Find_K_Max_Eigen(Matrix,Eigen_NUM)[NN,NN]=size(Matrix); [V,S]=eig(Matrix); %Note this is equivalent to; [V,S]=eig(St,SL); also equivalent to [V,S]=eig(Sn,St); %S=diag(S); [S,index]=sort(S);Eigen_Vector=zeros(NN,Eigen_NUM); Eigen_Value=zeros(1,Eigen_NUM);p=NN; for t=1:Eigen_NUMEigen_Vector(:,t)=V(:,index(p));Eigen_Value(t)=S(p);p=p-1;if p==0break;end end

總結

以上是生活随笔為你收集整理的FisherFace 进行人脸分裂的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。