模式识别方法大作业实验报告(3)

2019-03-29 11:02

Zi?(Z1,Z2,?Zk)?Wyiiiii?1,2,?,N

?1通过计算Z1,Z2,?Zk的欧氏距离,可以将训练样本分为C(C等于Sw,完成Sb的秩)

对训练样本集的分类

1、 matlab编程

1、fisher判别法人脸检测与识别流程图

2、matlab程序分为三部分。程序框图如下图所示。 这个函数将所有训练样本 的二维图像转换成一维列 向量。接着,它把这些一 维列向量组合到一行里面 构造出二维向量T,即每个 单元的信息量是一幅图片 PCA提取特征值 Fisher分类器设计。从fisher线性空间中提取图像 这个函数将源图像提取成特征脸,然后比较它们之间的欧几里得距离 CreatDataBase FisherfaceCore Recognition main 2、

总结

从计算成本来看,PCA+LDA方法的好处在于对高维空间的降维,避免了类内离散度矩

XI

阵不可逆的情况。然而,从识别性能来看,由于主成分只是代表图像的灰度特征,是从能量的角度衡量主成分大小的,应用PCA之后,舍弃的对应较小特征值的次要成分有可能对LDA来说重要的分类信息,有可能降低分类识别性能。 而且,在实际应用中,特别是在人脸图像识别中,由于“维数灾难”的存在,FLD通常会遇到两个方面的困难:

(1) 类内离散度矩阵Sw总是奇异的。这是由于Sw的秩最多为N-C,(N是用于训练样本

的图像数目,C是人脸的类别数)。而一般情况下,用于训练的图像数目N是远小

于每幅图像的像素数目,即“小样本问题“经常出现。

(2) 计算的复杂度。在高维空间中,要得出一个分类向量的复杂度远远高于计算一个低

维空间中的分类向量。

3、 参考文献

【1】边肇其,张学工.模式识别【M】.第2版.北京.:清华大学出版社,2000

【2】周杰,卢春雨,张长水,李衍达,人脸自动识别方法综述【J】.电子学报,2000,5(4):102-106

4、 附录(matlab 程序代码)

1、第一部分:CreatDatabase.m

function T = CreatDatabase(TrainDatabasePath) TrainFiles = dir(TrainDatabasePath); Train_Number = 0;

%%%%%%%%统计文件数%%%%%%%%%%%%% for i = 1:size(TrainFiles,1) if

not(strcmp(TrainFiles(i).name,'.')|strcmp(TrainFiles(i).name,'..')|strcmp(TrainFiles(i).name,'Thumbs.db')) Train_Number = Train_Number + 1; end end

%%%%%%%%二维转一维%%%%%%%%%%%% T = [];

for i = 1 : Train_Number

str = int2str(i);%把文件索引转换为字符串格式 str = strcat('\\',str,'.pgm'); str = strcat(TrainDatabasePath,str); img = imread(str); [irow icol] = size(img);

temp = reshape(img',irow*icol,1); T = [T temp]; end

T = double(T);

XII

2、第二部分:FisherfaceCore

function [m_database V_PCA V_Fisher ProjectedImages_Fisher Class_number Class_population] = FisherfaceCore(T) %%%%%%%%返回值注释%%%%%%%%%%%

%m_database --- (M*Nx1)维的训练样本均值

%V_PCA --- (M*Nx(P-C)训练样本协方差的特征向量

%V_Fisher --- ((P-C)x(C-1)) 最大的(C-1)维J = inv(Sw) * Sb的特征矩阵 %ProjectedImages_Fisher --- ((C-1)xP)维训练样本,这些样本从fisher线性空间中提取

%%%%%基本量赋值 %%%%%%%%%

Class_number=(size(T,2))/9; 类的数目,除以8取决于样本中有多少类人 Class_population = 9;%每一类的图像数目

P = Class_population * Class_number; %总训练样本的数目 %%%%%计算均值%%%%%

m_database = mean(T,2);%°包含T每一行均值的列向量 %%%%计算方差%%%%%

A = T - repmat(m_database,1,P); %%%%%计算特征脸的算法%%%%%% L = A' * A; [V D] = eig(L); V = fliplr(V);

%%%%筛选小的特征值%%%%% L_eig_vec = []; dig = fliplr(max(D)); for i = 1 : Class_number

L_eig_vec = [L_eig_vec V(:,i)/sqrt(dig(i))]; end

%%%%计算特征矩阵的协方差矩阵C%%%%%

V_PCA = A * L_eig_vec;%V_PCA就是降维后的协方差矩阵 ProjectedImages_PCA = []; for i = 1 : P

temp = V_PCA'*A(:,i);

ProjectedImages_PCA = [ProjectedImages_PCA temp]; end

%%%%%fisher分类器的设计方法%%%%

%%%%%计算在特征空间里面每一个类的均值%%%%%

m_PCA = mean(ProjectedImages_PCA,2) %特征空间总的均值 m = zeros( Class_number, Class_number ); Sw = zeros( Class_number, Class_number); Sb = zeros( Class_number, Class_number);

for i = 1 : Class_number m(:,i) =

XIII

mean( ( ProjectedImages_PCA(:,((i-1)*Class_population+1):i*Class_population) ), 2 )'; %每一类的样本分别求均值 S = zeros(Class_number, Class_number);

for j = ((i-1) * Class_population + 1) : ( i*Class_population ) S = S + ( ProjectedImages_PCA(:,j) - m(:,i)) * (ProjectedImages_PCA(:,j) - m(:,i))'; end

Sw = Sw + S;

Sb = Sb + (m(:,i) - m_PCA) * (m(:,i) - m_PCA)' end

%%%%%%?计算fisher判别准则,目标是获取最大类间离散度和最小类内离散度%%%%%% %%%%%%?ò??μ???±êê?£o??è?×?′óàà??à?é¢?èoí×?D?μ?àà?úà?é¢?è?£ [J_eig_vec, J_eig_val] = eig(Sb,Sw); J_eig_val = max(J_eig_val); J_eig_vec = fliplr(J_eig_vec);

%%%%%%去除0特征根和排序 for i = 1 : Class_number - 1

V_Fisher(:,i) = J_eig_vec(:,i);%fisher判别法将N维映射到C-1维 end

%%%%%从fisher线性空间中提取图像%

Yi = V_Fisher' * V_PCA' * (Ti - m_database) for i = 1: Class_number * Class_population

ProjectedImages_Fisher(:,i) = V_Fisher' * ProjectedImages_PCA(:,i); end%由PCA过渡到FLD

%img_fisher = w_fisher' * pca_img;

%ProjectedImages_Fisher = V_Fisher' * ProjectedImages_PCA;

3、第三部分:Recognition.m

function OutputName = Recognition(TestImage, m_database, V_PCA, V_Fisher, ProjectedImages_Fisher, Class_number, Class_population) %函数描述:这个函数将源图像提取成特征脸,然后比较它们之间的欧几里得距离 %输入量: TestImage ---测试样本的路径

%%V_PCA --- (M*Nx(P-C)训练样本协方差的特征向量

%V_Fisher --- ((P-C)x(C-1)) 最大的(C-1)维J = inv(Sw) * Sb的特征矩阵 %ProjectedImages_Fisher --- ((C-1)xP)维训练样本,这些样本从fisher线性空间中提取

%Class_number---类的数目

%Class_population---每一类图像的数目

%返回值: OutputName ---在训练样本中的被识别的图像的名字

XIV

Train_Number = size(ProjectedImages_Fisher,2);

%%%%%%%%%%%%%%%%%%%%%%%%从测试样本中提取PCA特征%%%%%%%%%%%%%%%%%%% InputImage = imread(TestImage); temp = InputImage(:,:,1);

[irow icol] = size(temp);

InImage = reshape(temp',irow*icol,1); Difference = double(InImage)-m_database;

ProjectedTestImage = V_Fisher' * V_PCA' * Difference; %%%%%%%%%%%%%%%%%%%%%%%%计算欧几里得几何距离%%%%%%%%%%%%%%%% Euc_dist = [];

for i = 1 : Train_Number

q = ProjectedImages_Fisher(:,i);

temp = ( norm( ProjectedTestImage - q ))^2 ; Euc_dist = [Euc_dist temp]; end

Euc_dist2 = []; for i=1 : Class_number dist =

mean(Euc_dist(((i-1)*Class_population+1):(i*Class_population))); Euc_dist2 = [Euc_dist2 dist]; end

[Euc_dist_min ,Recognized_index] = min(Euc_dist2);

Recognized_index = (Recognized_index - 1) * Class_population + 1; OutputName = strcat(int2str(Recognized_index),'.pgm');

XV


模式识别方法大作业实验报告(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:钢结构厂房拆装工程施工组织设计

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: