資源簡介
pca特征降維,gabor小波變換,人臉識別的matlab程序
代碼片段和文件信息
clear?all;
tic????%秒表定時器
f0=0.4;
allsamples=[];
for?i=1:40
????for?j=1:5
????????a=imread(strcat(‘E:\orl\‘‘orl_0‘num2str(i)‘_‘‘00‘num2str(j)‘.bmp‘));??%從圖像文件中讀取圖像數據??字符串連接
????????b=[];
????????for?theta?=?[0pi/8pi/4pi*3/8pi/2pi*5/8pi*3/4pi*7/8];%用弧度0pi/4pi/2pi*3/4
????????????x?=?0;
????????????for?m?=?linspace(-8811)???%在-8和8之間產生11個點的線性空向量
????????????????x?=?x?+?1;
????????????????y?=?0;
????????????????for?n?=?linspace(-8811)
????????????????????y?=?y?+?1;
????????????????????z(yx)=computer(mnf0theta);
????????????????end
????????????end
????????????filtered?=?filter2(za‘valid‘);????%用二維Gabor濾波器對讀入的人臉進行濾波,得到的只取那些非補零序列計算得到的相關序列,其長度小于I
????????????f?=?abs(filtered);???????%取絕對值或復數模
????????????
????????????[cs]=wavedec2(f3‘db1‘);
????????????a3=appcoef2(cs‘db1‘3);?????????????
????????????
????????????b=[b;a3]???;
????????end
????????
????????d=b(1:104*11)?;???
????????allsamples=[allsamples;d];???%所有樣本
????end
end
samplemean=mean(allsamples);%求陣列的均值?得到了均值行向量?其每個元素為矩陣allsamples相應列的均值??這時就有200列?
for?i=1:200
????xmean(i:)=allsamples(i:)-samplemean;??%所有樣本-樣本均值
end;
%獲取特征植及特征向量
sigma=xmean*xmean‘;??%協方差矩陣
[v?d]=eig(sigma);???%求特征值和特征向量?v:特征值向量?d:特征值矩陣
d1=diag(d);?%把特征值矩陣d主對角線上的元素組成一個列矩陣d1
%按特征值大小以降序排列
dsort=flipud(d1);??%矩陣上下翻轉
vsort=fliplr(v);???%矩陣左右翻轉
%以下選擇90%的能量
dsum=sum(dsort);??%陣列元素求和??即所有特征值求和
dsum_extract=0;
p=0;
while(dsum_extract/dsum<0.96)
????p=p+1;
????dsum_extract=sum(dsort(1:p));
end????%選擇90%的能量
i=1;
%?(訓練階段)計算特征臉形成的坐標系
base?=?xmean‘?*?vsort(:1:p)?*?diag(dsort(1:p).^(-1/2));?
allcoor=allsamples*base;
accu?=?0;
%測試過程
for?i=1:40
????for?j=6:10%讀入測試圖像
????????a=imread(strcat(‘E:\orl\‘‘orl_0‘num2str(i)‘_‘‘00‘num2str(j)‘.bmp‘));
????????b=[];
????????for?theta?=?[0pi/8pi/4pi*3/8pi/2pi*5/8pi*3/4pi*7/8];%用弧度0pi/4pi/2pi*3/4
????????????x?=?0;
????????????for?m?=?linspace(-8811)???%在-8和8之間產生11個點的線性空向量
????????????????x?=?x?+?1;
????????????????y?=?0;
????????????????for?n?=?linspace(-8811)
????????????????????y?=?y?+?1;
????????????????????z(yx)=computer(mnf0theta);
????????????????end
????????????end
????????????filtered?=?filter2(za‘valid‘);????%用二維Gabor濾波器對讀入的人臉進行濾波,得到的只取那些非補零序列計算得到的相關序列,其長度小于I
????????????f?=?abs(filtered);???????%取絕對值或復數模
????????????
????????????[cs]=wavedec2(f3‘db1‘);
????????????a3=appcoef2(cs‘db1‘3);
????????????
????????????b=[b;a3];
????????end
????????b=double(b);
????????e=b(1:104*11);
????????tcoor=e*base;
????????for?k=1:200
????????????mdist(k)=norm(tcoor-allcoor(k:));???%求矩陣的范數
????????end;???????????????%每一個測試圖像的特征臉與訓練圖像相對比
?????????%三階近鄰
????????[distindex2]=sort(mdist);?%按升序排列元素
????????class1=floor(?(index2(1)-1)/5?)+1;??%floor:朝負無窮大方向取整
????????class2=floor((index2(2)-1)/5)+1;?
????????class3=floor((index2(3)-1)/5)+1;?
????????if?class1~=class2?&&?class2~=class3?
????????????class=class1;?
????????elseif?class1==class2?
????????????cla
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????3646??2013-04-10?13:30??pca&gabor.m
評論
共有 條評論