k-l变换matlab代码,基于K-L变换的人脸识别的MATLAB实现

clear all;

%----------------------打开训练图像集--------------------%

Files = dir('FREET\F1\*.bmp');  %打开文件夹中所有图像

Dir = 'FREET\F1\';

for k = 1:length(Files);

Filename = [Dir , Files(k).name];

Img  = imread(Filename);

x(:,k) = Img(:);           %把图像放在矩阵x的第k列

end;

nImages = k;                    %图像个数

imsize = size(Img);           %图像维度

nPixels = imsize(1)*imsize(2);   %图像总像素数

x = double(x)/255;                   %将x转换为double型

%-----------计算每幅训练图像的与平均脸的差值-------%

avrgx = mean(x')';             %计算均值图像

for i=1:1:nImages

x(:,i) = x(:,i) - avrgx;       % x每一列减去平均脸

end;

%-----奇异值分解方法计算协方差矩阵的特征值和特征向量----%

cov_mat = x'*x;                  %协方差矩阵为x*x’,这里用奇异值分解

[V,D] = eig(cov_mat);         %V为以特征向量为列的矩阵,D为特征值组成的对角阵

V = x*V*(abs(D))^-0.5;        %求协方差矩阵x*x'的特征向量

%------------------------计算特征脸个数--------------------------%

add = 0.0;

D=diag(D);                      %将对角阵D转换为矢量

sum = sum(D);

for k =nImages:-1:1          %由于在D按照从小到大排列,故逆序遍历

add = add + D(k);

if add/sum > 0.95       %当差异信息比例达到95%时退出循环

break;

end

end

%-------------测试样本在新空间上投影后的坐标-----------%

KLCoef =  x'*V;

%----------------------打开待识别图像集--------------------%

files = dir('FREET\F2\*.bmp');  %打开文件夹中所有图像

dir = 'FREET\F2\';

for k = 1:length(files);

filename = [dir , files(k).name];

img  = imread(filename);

y(:,k) = img(:);

end;

y = double(y)/255;

%-----------计算每幅待识别图像的与平均脸的差值-------%

for i=1:1:nImages

y(:,i) = y(:,i) - avrgx;      % y每一列减去平均脸

end;

%-------------待识别样本在新空间上投影后的坐标-----------%

dKLCoef = y'*V;

%---------------------------按照最近邻法分类------------------------%

count = 0.0;                 %计数器,用于计算正确识别的人脸个数

for image_index = 1:1:nImages

for i=1:1:nImages

%计算待识别图像与每幅训练图像坐标间的欧氏距离,由特征脸的正交归一性,欧氏距离就是坐标点乘再开方

dist_comp(i) = sqrt(dot(dKLCoef(image_index,:)-KLCoef(i,:), dKLCoef(image_index,:)-KLCoef(i,:)));

end

min_index = find(dist_comp == min(dist_comp));%找出欧氏距离最小的训练图像的下标

if min_index(1) == image_index%判断最近邻分类是否正确

count= count + 1;

end

end

rate = count/nImages          %输出识别正确率

转自:http://lovefreewind.blog.163.com/blog/static/17834635720120904529174/

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值