資源簡介
網上找的 matlab基于bp神經網絡的人臉識別 需要標準的orl人臉數據庫 也可根據源代碼進行改寫
代碼片段和文件信息
function?FaceRecognitionByBPneuralnetwork
%%?基于BP神經網絡的人臉識別
%%2014-05-14
clc
global?base?net?????????%定義全局變量,用于?TestofFaceRecognition.m?函數中
%%?第一步,利用主元分析PCA法提取圖像的特征矩陣
allsamples=[];????????????????????????????????%所有訓練圖像
for?i=1:40
????for?j=1:5
??????a=imread(strcat(‘E:\資料類\學習資料\人工神經網絡\att_faces\orl_faces\s‘num2str(i)‘\‘num2str(j)‘.pgm‘));
??????b=a(1:112*92);??????????????????????????%?b是行矢量?1×N,其中N=10304,提取順序是先列后行,即從上到下,從左到右
??????b=double(b);
??????allsamples=[allsamples;?b];?????????????%?allsamples?是一個M?*?N?矩陣,allsamples?中每一行數據代表一張圖片,其中M=400
????end
end
samplemean=mean(allsamples);??????????????????%?平均圖片,1?×?N
for?i=1:200
????xmean(i:)=allsamples(i:)-samplemean;????%?xmean是一個M?×?N矩陣,xmean每一行保存的數據是“每個圖片數據-平均圖片”
end
sigma=xmean*xmean‘;????????%?M?*?M?階矩陣
[v?d]=eig(sigma);
d1=diag(d);
[d2?index1]=sort(d1);???????%以升序排序
cols=size(v2);????????????%?特征向量矩陣的列數
for?i=1:cols
????vsort(:i)?=?v(:?index1(cols-i+1)?);????%?vsort?是一個M*col(注:col一般等于M)階矩陣,保存的是按降序排列的特征向量每一列構成一個特征向量
????dsort(i)???=?d1(?index1(cols-i+1)?);?????%?dsort?保存的是按降序排列的特征值,是一維行向量
end????%完成降序排列
%以下選擇85%的能量
dsum?=?sum(dsort);
????dsum_extract?=?0;
????p=?0;
????while(?dsum_extract/dsum?0.85)
????????p=p?+?1;
????????dsum_extract?=?sum(dsort(1:p));
????end
i=1;
%計算特征臉形成的坐標系
while?(i<=p?&&?dsort(i)>0)
????base(:i)?=?dsort(i)^(-1/2)?*?xmean‘?*?vsort(:i);?????%?base是N×p階矩陣,除以dsort(i)^
評論
共有 條評論