資源簡(jiǎn)介
matlab基于BP神經(jīng)網(wǎng)絡(luò)的人臉識(shí)別,包含matlab代碼及所需要的ORL人臉庫(kù),采用了主成分分析法進(jìn)行特征提取,取得不錯(cuò)的效果。

代碼片段和文件信息
function?FaceRecognitionByBPneuralnetwork
%%?基于BP神經(jīng)網(wǎng)絡(luò)的人臉識(shí)別
%%2014-05-14
clc
global?base?net?????????%定義全局變量,用于?TestofFaceRecognition.m?函數(shù)中
%%?第一步,利用主元分析PCA法提取圖像的特征矩陣
allsamples=[];????????????????????????????????%所有訓(xùn)練圖像
for?i=1:40
????for?j=1:5
??????a=imread(strcat(‘D:\MATLAB\人臉庫(kù)\s‘num2str(i)‘\‘num2str(j)‘.bmp‘));
??????b=a(1:112*92);??????????????????????????%?b是行矢量?1×N,其中N=10304,提取順序是先列后行,即從上到下,從左到右
??????b=double(b);
??????allsamples=[allsamples;?b];?????????????%?allsamples?是一個(gè)M?*?N?矩陣,allsamples?中每一行數(shù)據(jù)代表一張圖片,其中M=400
????end
end
samplemean=mean(allsamples);??????????????????%?平均圖片,1?×?N
for?i=1:200
????xmean(i:)=allsamples(i:)-samplemean;????%?xmean是一個(gè)M?×?N矩陣,xmean每一行保存的數(shù)據(jù)是“每個(gè)圖片數(shù)據(jù)-平均圖片”
end
sigma=xmean*xmean‘;????????%?M?*?M?階矩陣
[v?d]=eig(sigma);
d1=diag(d);
[d2?index1]=sort(d1);???????%以升序排序
cols=size(v2);????????????%?特征向量矩陣的列數(shù)
for?i=1:cols
????vsort(:i)?=?v(:?index1(cols-i+1)?);????%?vsort?是一個(gè)M*col(注:col一般等于M)階矩陣,保存的是按降序排列的特征向量每一列構(gòu)成一個(gè)特征向量
????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;
%計(jì)算特征臉形成的坐標(biāo)系
while?(i<=p?&&?dsort(i)>0)
????base(:i)?=?dsort(i)^(-1/2)?*?xmean‘?*?vsort(:i);?????%?base是N×p階矩陣,除以dsort(i)^(1/2)是對(duì)人臉圖像的標(biāo)準(zhǔn)化
????i?=?i?+?1;
end
%下面的代碼,將訓(xùn)練樣本對(duì)坐標(biāo)系上進(jìn)行投影得到一個(gè)?M*p?階矩陣allcoor
allcoor?=?allsamples?*?base;
%%?第二步,創(chuàng)建并訓(xùn)練BP神經(jīng)網(wǎng)絡(luò)
%生成訓(xùn)練BP神經(jīng)網(wǎng)絡(luò)的輸入?P?
P=?mapminmax(allcoor);???????????????%歸一化
%生成目標(biāo)輸出矢量?T
T=zeros(20040);
?for?i=1:40
????for?j=1:5
??????T((i-1)*5+ji)=1;
??end
?end
?
%打亂訓(xùn)練樣本順序
gx2(:1:47)=P;
gx2(:48:87)=T;
xd=gx2(randperm(numel(gx2)/87):);
gx=xd(:1:47);d=xd(:48:87);
P=gx‘;
T=d‘;
%創(chuàng)建BP神經(jīng)網(wǎng)絡(luò)
[RQ]=size(P);
[S2Q]=size(T);
net=newcf(minmax(P)T[6015]{‘tansig‘‘logsig‘}‘trainscg‘);
%訓(xùn)練BP神經(jīng)網(wǎng)絡(luò)
net.trainparam.epochs=5000;
net.trainparam.goal=0.0001;
net.divideFcn?=?‘‘;
net=train(netPT);
%仿真BP神經(jīng)網(wǎng)絡(luò)
Y=sim(netP);
%%?第三步,測(cè)試BP神經(jīng)網(wǎng)絡(luò)并計(jì)算其識(shí)別率
%測(cè)試BP神經(jīng)網(wǎng)絡(luò)
s=0;
for?i=1:40
????for?j=6:10??????????????????????????????%讀入40x5副測(cè)試圖像
?????????a=imread(strcat(‘D:\MATLAB\人臉庫(kù)\s‘num2str(i)‘\‘num2str(j)‘.bmp‘));
?????????b=a(1:10304);
?????????b=double(b);
?????????tcoor=?b?*?base;???????????????????%計(jì)算坐標(biāo),是1×p階矩陣
?????????X?=?mapminmax(tcoor);??????????????%歸一化
?????????Z=sim(netX‘);
?????????[ziindex2]=max(Z);
?????????if?index2==i???
?????????????s=s+1;
?????????else
?????????????i??????????????????????????????%輸出識(shí)別出錯(cuò)的那個(gè)人?i
?????????????j??????????????????????????????%輸出識(shí)別出錯(cuò)的那張圖片?j
?????????????index2?????????????????????????%輸出誤識(shí)別成的那個(gè)人
?????????end
?????end
end
%計(jì)算識(shí)別率
accuracy=s/Q
end
%%?完成
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件??????11384??2010-03-24?19:05??人臉庫(kù)\s1\1.bmp
?????文件??????11384??2010-03-24?19:43??人臉庫(kù)\s1\10.bmp
?????文件??????11384??2010-03-24?19:42??人臉庫(kù)\s1\2.bmp
?????文件??????11384??2010-03-24?19:44??人臉庫(kù)\s1\3.bmp
?????文件??????11384??2010-03-24?19:44??人臉庫(kù)\s1\4.bmp
?????文件??????11384??2010-03-24?19:44??人臉庫(kù)\s1\5.bmp
?????文件??????11384??2010-03-24?19:45??人臉庫(kù)\s1\6.bmp
?????文件??????11384??2010-03-24?19:45??人臉庫(kù)\s1\7.bmp
?????文件??????11384??2010-03-24?19:45??人臉庫(kù)\s1\8.bmp
?????文件??????11384??2010-03-24?19:45??人臉庫(kù)\s1\9.bmp
?????文件??????11384??2010-03-25?19:23??人臉庫(kù)\s10\1.bmp
?????文件??????10318??1994-04-18?14:18??人臉庫(kù)\s10\1.pgm
?????文件??????11384??2010-03-25?19:23??人臉庫(kù)\s10\10.bmp
?????文件??????10318??1994-04-18?14:07??人臉庫(kù)\s10\10.pgm
?????文件??????11384??2010-03-25?19:23??人臉庫(kù)\s10\2.bmp
?????文件??????10318??1994-04-18?14:18??人臉庫(kù)\s10\2.pgm
?????文件??????11384??2010-03-25?19:23??人臉庫(kù)\s10\3.bmp
?????文件??????10318??1994-04-18?14:18??人臉庫(kù)\s10\3.pgm
?????文件??????11384??2010-03-25?19:23??人臉庫(kù)\s10\4.bmp
?????文件??????10318??1994-04-18?14:18??人臉庫(kù)\s10\4.pgm
?????文件??????11384??2010-03-25?19:23??人臉庫(kù)\s10\5.bmp
?????文件??????10318??1994-04-18?14:18??人臉庫(kù)\s10\5.pgm
?????文件??????11384??2010-03-25?19:23??人臉庫(kù)\s10\6.bmp
?????文件??????10318??1994-04-18?14:07??人臉庫(kù)\s10\6.pgm
?????文件??????11384??2010-03-25?19:23??人臉庫(kù)\s10\7.bmp
?????文件??????10318??1994-04-18?14:07??人臉庫(kù)\s10\7.pgm
?????文件??????11384??2010-03-25?19:23??人臉庫(kù)\s10\8.bmp
?????文件??????10318??1994-04-18?14:07??人臉庫(kù)\s10\8.pgm
?????文件??????11384??2010-03-25?19:23??人臉庫(kù)\s10\9.bmp
?????文件??????10318??1994-04-18?14:07??人臉庫(kù)\s10\9.pgm
............此處省略807個(gè)文件信息
- 上一篇:SPAMS_matlab_v2.5
- 下一篇:時(shí)間序列教程
評(píng)論
共有 條評(píng)論