1、开放性实验报告基于集成学习的图像识别算法小组成员:姓名 张宏胤 学号 1140299229 指导老师: 彭艳斌 2016 年 12 月【实验名称】基于集成学习的图像识别算法【实验目的】 1.对人脸识别系统的图像预处理有一定的掌握; 2.对后续操作只简单了解; 3.通过功能模块实现人脸识别系统。【实验内容】 1.系统需求分析; 2.系统设计; 3.系统实现。【实验步骤】一、系统需求分析1、目的与背景当前社会上频繁出现的入室偷盗、抢劫、伤人等案件的不断发生,鉴于此种原因,防盗门开始走进千家万户,给家庭带来安宁;然而,随着社会的发展,技术的进步,生活节奏的加速,消费水平的提高,人们对于家居的期望也越
2、来越高,对便捷的要求也越来越迫切,基于传统的纯粹机械设计的防盗门,除了坚固耐用外,很难快速满足这些新兴的需求:便捷,开门记录等功能。广义的人脸识别实际包括构建人脸识别系统的一系列相关技术,包括人脸图像采集、人脸定位、人脸识别预处理、身份确认以及身份查找等;而狭义的人脸识别特指通过人脸进行身份确认或者身份查找的技术或系统。 人脸识别生物特征识别技术所研究的生物特征包括脸、指纹、手掌纹、虹膜、视网膜、声音(语音)、体形、个人习惯(例如敲击键盘的力度和频率、签字)等,相应的识别技术就有人脸识别、指纹识别、掌纹识别、虹膜识别、视网膜识别、语音识别(用语音识别可以进行身份识别,也可以进行语音内容的识别,
3、只有前者属于生物特征识别技术)、体形识别、键盘敲击识别、签字识别等。人脸识别主要用于身份识别。由于视频监控正在快速普及,众多的视频监控应用迫切需要一种远距离、用户非配合状态下的快速身份识别技术,以求远距离快速确认人员身份,实现智能预警。人脸识别技术无疑是最佳的选择,采用快速人脸检测技术可以从监控视频图象中实时查找人脸,并与人脸数据库进行实时比对,从而实现快速身份识别二系统设计1) 理论知识fisher概念引出在应用统计方法解决模式识别问题时,为了解决“维数灾难”的问题,压缩特征空间的维数非常必要。fisher方法实际上涉及到维数压缩的问题。fisher分类器是一种几何分类器, 包括线性分类器和
4、非线性分类器。线性分类器有:感知器算法、增量校正算法、LMSE分类算法、Fisher分类。若把多维特征空间的点投影到一条直线上,就能把特征空间压缩成一维。那么关键就是找到这条直线的方向,找得好,分得好,找不好,就混在一起。因此fisher方法目标就是找到这个最好的直线方向以及如何实现向最好方向投影的变换。这个投影变换恰是我们所寻求的解向量,这是fisher算法的基本问题。样品训练集以及待测样品的特征数目为n。为了找到最佳投影方向,需要计算出各类均值、样品类内离散度矩阵和总类间离散度矩阵、样品类间离散度矩阵,根据Fisher准则,找到最佳投影准则,将训练集内所有样品进行投影,投影到一维Y空间,由
5、于Y空间是一维的,则需要求出Y空间的划分边界点,找到边界点后,就可以对待测样品进行进行一维Y空间的投影,判断它的投影点与分界点的关系,将其归类。Fisher法的核心为二字:投影。1) 一维实现方法(1) 计算给类样品均值向量,是各个类的均值,是类的样品个数。(2) 计算样品类内离散度矩阵和总类间离散度矩阵(3) 计算样品类间离散度矩阵(4) 求向量我们希望投影后,在一维Y空间各类样品尽可能地分开,也就是说我们希望两类样品均值之差()越大越好,同时希望各类样品内部尽量密集,即希望类内离散度越小越好,因此,我们可以定义Fisher准则函数:使得取得最大值的为 (5) 将训练集内所有样品进行投影(6
6、) 计算在投影空间上的分割阈值在一维Y空间,各类样品均值为样品类内离散度矩阵和总类间离散度矩阵【注】【阈值的选取可以由不同的方案:较常见的一种是另一种是】(7) 对于给定的X,计算出它在上的投影y(8) 根据决策规则分类2) matlab编程1、matlab程序分为三部分。程序框图如下图所示。mainCreatDataBaseFisherfaceCoreRecognition这个函数将所有训练样本的二维图像转换成一维列向量。接着,它把这些一维列向量组合到一行里面构造出二维向量T,即每个单元的信息量是一幅图片这个函数将源图像提取成特征脸,然后比较它们之间的欧几里得距离PCA提取特征值Fisher
7、分类器设计。从fisher线性空间中提取图像三、 系统实现打开程序进行人脸识别变化角度四、代码实现A. 第一部分:CreatDatabase.mfunction 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,Thu
8、mbs.db) Train_Number = Train_Number + 1; endend%二维转一维%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;endT = double(T);B. 第二部分:FisherfaceC
9、orefunction 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线性空间中提取%基本量赋值 %Clas
10、s_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 : Cl
11、ass_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 =
12、zeros( Class_number, Class_number );Sw = zeros( Class_number, Class_number);Sb = zeros( Class_number, Class_number); for i = 1 : Class_number m(:,i) = mean( ( ProjectedImages_PCA(:,(i-1)*Class_population+1):i*Class_population) ), 2 ); %每一类的样本分别求均值 S = zeros(Class_number, Class_number); for j = (i-1)
13、 * 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判别准则,目标是获取最大类间离散度和最小类内离散度%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 *