`
haitaoandroid
  • 浏览: 27470 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

基于PCA的人脸检测(Matlab版代码)

 
阅读更多

花了几天,终于把matlab版的人脸检测运行成功了,虽然正确率不是很高,看着各种论文上的人脸检测正确率都出奇的高,我是不怎么相信的,有的论文连基于平均脸的人脸检测正确率都能达到98%,汗啊~~ 也许真有吧,我这里对于人脸图像没做什么其他的处理,目的只是学习一下matlab程序,拿基于PCA的人脸检测试试手。准确率有点低~~吐舌头

简单说一下程序运行的逻辑,PCA就不说了,自己去了解吧,说一下基本思想,PCA有个特征空间,人脸检测就是把待检测的图像X在特征空间中进行人脸重构,将重构后的人脸与原人脸进行比较,即比较它们的欧式距离,如果差值大于某一个阀值,则表示图像X不是一个人脸,否则就是人脸。这里人脸都是用向量表示,所以才有欧式距离之说。还有,我用的人脸库是MIT的~

实验结果中得到三张图片:


第一张图表示特征空间里面能够包含一张图片80%信息的10个特征,第1个特征包含了48%左右的信息吧

第二张图片和第三张图片的横坐标分别是人脸图像重构后和重构前的欧式距离与非人脸图像重构后和重构前的欧式距离,纵坐标分别是占各自图片的百分比。可以看出,如果欧式距离的阀值设为480左右,则人脸通过率为80%,非人脸过滤率也是80%左右。比起那些98%的确是差很多~~伤不起~

下面给出matlab代码,代码中有详细的解释,能正确运行就能得到上面三个结果图:

str='F:\code\matlab\face\face'; %图像存放路径
S=0.0;%行向量
dis=zeros(1,100,'double');%每一个人脸跟平均脸的距离
b=zeros(2700,400,'double');%人脸向量矩阵
for i=1:2700
    B=imread([str,num2str(i),'.bmp']); %依次读取每一幅图像
    m = size(B, 3);
    if m==1
     I = B;   
    else
      I=rgb2gray(B);   
    end
%在此处进行你的图像处理即可
A = I';%I的转置
C = A(:)';%矩阵转换为行向量,即一张图片对应一个行向量
b(i,:)=C;
%S = S+C;
end
Avg=mean(b);%平均脸
%%
%显示平均脸
AvgImg = reshape(Avg,20,20)';
AvgImgInt=uint8(AvgImg);
imshow(AvgImgInt)%显示平均脸




%%  
%使用PCA分析b
[coef,score,latent,t2] = princomp(b);
%% 
% 通过latent,可以知道提取前几个主成分就可以了.
figure(1);
percent_explained = 100*latent/sum(latent);
pareto(percent_explained);
xlabel('Principal Component');
ylabel('Variance Explained (%)');
print -djpeg 2;

%选取前10个主特征组成新的特征空间
pca10 = coef(:,1:10);
%%
%人脸的读取及重构
facestr='F:\code\matlab\face\'; %图像存放路径
faceagr=zeros(100,10,'double');%每一张非人脸图像映射到特征空间的系数
for i=1:2700
   faceagr(i,:) = (b(i,:)-Avg)*pca10; 
end

for i=1:2700
faceImg(i,:)=Avg+(pca10*(faceagr(i,:)'))';%人脸图像图像重构
faceJuli(i)=norm(b(i,:)-faceImg(i,:));
end
avgJuli = mean(faceJuli);
%分布图
figure(2);
faceymin=min(faceJuli);
faceymax=max(faceJuli);
facex=linspace(faceymin,faceymax,20);  %将最大最小区间分成20个等分点(19等分),然后分别计算各个区间的个数
faceyy=hist(faceJuli,facex);  %计算各个区间的个数
faceyy=faceyy/length(faceJuli); %计算各个区间的个数
bar(facex,faceyy) %画出概率密度分布图



%%
%非人脸的读取及重构
nofacestr='F:\code\matlab\noface\'; %图像存放路径
b1=zeros(4300,400,'double');%非人脸向量矩阵
for i=1:4300
    B1=imread([nofacestr,num2str(i),'.bmp']); %依次读取每一幅图像
    m = size(B1, 3);
    if m==1
     I1 = B1;   
    else
      I1=rgb2gray(B1);   
    end
%在此处进行你的图像处理即可
A1 = I1';%I的转置
C1 = A1(:)';%矩阵转换为行向量,即一张图片对应一个行向量
b1(i,:)=C1;
%S = S+C;
end
%非人脸的映射

bb1=zeros(1000,10,'double');%每一张非人脸图像映射到特征空间的系数
for i=1:1000
   bb1(i,:) = (b1(i,:)-Avg)*pca10; 
end


for i=1:1000
nofaceImg(i,:)=Avg+(pca10*(bb1(i,:)'))';%非人脸图像重构
nofaceJuli(i)=norm(b1(i,:)-nofaceImg(i,:));
end
nofaceavgJuli = mean(nofaceJuli);
figure(3);
nofaceymin=min(nofaceJuli);
nofaceymax=max(nofaceJuli);
nofacex=linspace(nofaceymin,nofaceymax,20);  %将最大最小区间分成20个等分点(19等分),然后分别计算各个区间的个数
nofaceyy=hist(nofaceJuli,nofacex);  %计算各个区间的个数
nofaceyy=nofaceyy/length(nofaceJuli); %计算各个区间的个数
bar(nofacex,nofaceyy) %画出概率密度分布图

%Img=reshape(X1,20,20)';
%ImgInt=uint8(Img);
%imshow(ImgInt)





分享到:
评论

相关推荐

    基于PCA人脸识别Matlab代码(毕设必备)

    在Matlab中实现PCA人脸识别,可以使用`pca`函数进行主成分分析,`svd`函数计算协方差矩阵的奇异值分解,以及` Project`操作将数据投影到主成分空间。Matlab提供了强大的矩阵运算和可视化工具,非常适合进行这种数值...

    基于PCA的人脸检测matlab源码

    基于PCA的人脸检测原理主要包括以下步骤: 1. 数据预处理:首先,收集人脸图像并进行灰度化处理,确保所有图像在同一颜色空间下。同时,可能还需要对图像进行归一化,以消除光照、表情等因素的影响。 2. 构建样本集...

    基于pca人脸检测

    在“基于PCA的人脸检测”项目中,MATLAB被用作编程工具,因为MATLAB提供了丰富的数学计算和矩阵操作功能,非常适合进行这种类型的统计分析和图像处理任务。MATLAB程序`re_face_rec.m`很可能包含了整个PCA人脸识别...

    基于PCA算法的Matlab人脸识别程序,有中文详细注释

    PCA(主成分分析,Principal Component Analysis)是一种统计方法,常用于数据降维,尤其是...综上所述,这个项目提供了一个PCA人脸识别的完整流程,通过Matlab实现,适合对机器学习和图像处理感兴趣的读者学习和实践。

    基于PCA的人脸识别(matlab)

    人脸检测 采用PCA 算法进行人脸识别,通过抽取人脸的主要成分,构成特征脸空间,识别时 将测试图像投影到此空间,得到一组投影系数,通过与训练样本库中的人脸图像比较进行识别选择最佳匹配人脸。 采用matlab编程,...

    基于PCA的人脸识别的Matlab实现代码.rar_matlab face_人脸识别_人脸识别代码

    标题中的“基于PCA的人脸识别的Matlab实现代码”指的是使用主成分分析(Principal ...通过深入理解PCA的原理,掌握Matlab代码实现,可以为在交通监控、安全监控、门禁系统等多个领域应用人脸识别技术打下坚实的基础。

    人脸检测matlab代码程序

    在这个"人脸检测matlab代码程序"中,开发者运用了两种经典的特征提取方法:主成分分析(PCA)和线性判别分析(LDA),这两种方法在人脸识别中扮演着关键角色。 PCA是一种无监督的降维技术,其主要目的是通过找到数据的...

    基于PCA使用Yale人脸数据库的人脸识别代码,实现了画特征脸

    基于PCA的人脸识别过程通常包括以下几个步骤: 1. 数据预处理:首先,收集人脸图像,并进行标准化处理,如灰度化、归一化和尺寸统一,以消除光照、角度等影响因素。 2. 构建样本集:选取一定数量的人脸图像作为...

    【老生谈算法】GUI-界面的基于PCA-算法的matlab-人脸检测识别.doc

    【老生谈算法】GUI-界面的基于PCA-算法的matlab-人脸检测识别.doc

    基于Matlab实现PCA和KPCA算法的人脸识别系统+GUI操作界面的毕业设计(源码+数据+说明文档).rar

    1、资源内容:基于PCA和KPCA的人脸识别算法系统+GUI操作界面的matlab仿真毕业设计(完整代码+说明文档+数据).rar 2、代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 3、适用对象:计算机,...

    PCA算法实现人脸识别(基于matlab GUI界面)

    在`PCAFaceRecognitionDemo`中,可能包含了实现PCA人脸识别的MATLAB代码,包括GUI界面的设计文件(`.fig`)和对应的MATLAB源码(`.m`)。通过阅读和理解代码,可以学习到PCA算法的具体实现细节。 总之,PCA算法...

    PCA人脸识别_人脸识别原理_pca人脸识别_

    "face_recognition_sim.m"很可能是用MATLAB编写的PCA人脸识别的模拟代码,通过运行这个脚本,可以直观地理解PCA在人脸识别中的应用。"基于PCA的人脸识别介绍.pdf"和"人脸识别技术分析.pdf"则可能是详细的理论介绍和...

    人脸识别matlab代码

    在本文中,我们将深入探讨基于MATLAB的人脸识别技术,主要关注标题中提及的"人脸识别MATLAB代码"。MATLAB是一种强大的编程环境,特别适合于数值计算和数据分析,包括图像处理和计算机视觉任务,如人脸识别。 人脸...

    基于matlab的人脸检测K-L的人脸识别

    【标题】:基于MATLAB的人脸检测与K-L变换的人脸识别 【正文】: MATLAB,全称矩阵实验室,是一种强大的数值计算和可视化软件,广泛应用于科学研究、工程计算和教育领域。在图像处理和计算机视觉领域,MATLAB提供...

    基于PCA算法实现人脸识别,基于pca算法的人脸识别,matlab

    本项目是关于如何使用PCA算法实现人脸识别的实践,提供了完整的MATLAB代码和操作说明,适合对机器学习和图像处理感兴趣的初学者及研究者。 人脸识别是一个复杂的过程,涉及到图像预处理、特征提取和分类等步骤。PCA...

    PCA-Face-detection-and-recognition.rar_Face重建matlab_PCA人脸检测_pca

    本资源"PCA-Face-detection-and-recognition.rar"包含了一个基于MATLAB实现的PCA人脸检测和识别系统,下面将详细阐述PCA在人脸检测和识别中的应用及其关键知识点。 首先,PCA通过分析数据集中的协方差结构,找到...

    主成分分析人脸检测matlab程序.rar_72H_matlab人脸检测_主成分分析_人脸检测_人脸检测matlab

    在这个"主成分分析人脸检测matlab程序"中,我们可以预期它包含了一套完整的MATLAB代码实现,用于执行以下步骤: 1. 数据预处理:首先,收集人脸图像并进行标准化,如归一化、灰度化等,以便于后续分析。 2. 构建...

    基于SVM(支持向量机) 的人脸识别 matlab 代码

    基于SVM的人脸识别MATLAB代码通常包括以下几个关键步骤: 1. **数据预处理**:首先,我们需要收集人脸图像并进行预处理,如灰度化、归一化、直方图均衡化等,以减少光照、角度等因素的影响,同时降低数据的复杂性。...

Global site tag (gtag.js) - Google Analytics