热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

matlab实现人脸识别

前面在python学习中实现了人脸检测,下面我将在matlab中实现人脸识别。人脸识别技术中被广泛采用的区域特征分析算法,它融合了计算机图像处理技术与生物统计学原理于一体,利用计算机图像处理

前面在python学习中实现了人脸检测,下面我将在matlab中实现人脸识别。

人脸识别技术中被广泛采用的区域特征分析算法,它融合了计算机图像处理技术与生物统计学原理于一体,利用计算机图像处理技术从视频中提取人像特征点,利用生物统计学的原理进行分析建立数学模型,即人脸特征模板。利用已建成的人脸特征模板与被测者的人的面像进行特征分析,根据分析的结果来给出一个相似值。通过这个值即可确定是否为同一人。   基本算法:
1.基于人脸特征点的识别算法(Feature-based recognition algorithms);

2.基于整幅人脸图像的识别算法(Appearance-based recognition algorithms);

3.基于模板的识别算法(Template-based recognition algorithms); 

 4.利用神经网络进行识别的算法(Recognition algorithms using neural network); 

5.利用线性回归进行识别的算法;

 6.利用稀疏表示进行识别的算法;

人脸识别主要包括四个方面:人脸采集----图像预处理-------人脸特征提取--------匹配与识别。

对于任何人脸识别方法来说,最难的都是第四步。这里主要用最小距离法,寻找和待识别图片最为接近的训练图片。思路是:思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。KNN算法中,所选择的邻居都是已经正确分类的对象。

下面是操作过程:

一:在线获取100张128*128的灰度人脸图像。

vid = videoinput('winvideo',1);
for i=1:100
    pause(0.5);
    frame = getsnapshot(vid); 
    img=rgb2gray(ycbcr2rgb(frame));
    img=imresize(img,[128,128]);
    path=strcat(strcat('.\train\',num2str(i)),'.bmp');
    imwrite(img,path);
end
stop(vid);
delete(vid);
close all

二,训练(一)中得到的人脸图像

global cankao
global W
global img_pj
global wts
global path
global img_path


% 批量读取指定文件夹下的图片128*128
path = uigetdir;
img_path = dir(strcat(path,'\*.bmp'));
img_num = length(img_path);
imagedata = [];
if img_num >0
    for j = 1:img_num
        img_name = img_path(j).name;
        temp = imread(strcat(path, '/', img_name));
        temp = double(temp(:));
        imagedata = [imagedata, temp];
    end
end
wts = size(imagedata,2);


% 中心化 & 计算协方差矩阵
img_pj = mean(imagedata,2);
for i = 1:wts
    imagedata(:,i) = imagedata(:,i) - img_pj;
end
covMat = imagedata'*imagedata;
[COEFF, latent, explained] = pcacov(covMat);


% 选择构成95%能量的特征值
i = 1;
proportion = 0;
while(proportion <95)
    proportion = proportion + explained(i);
    i = i+1;
end
p = i - 1;


% 特征脸
W = imagedata*COEFF;    % N*M阶
W = W(:,1:p);           % N*p阶


% 训练样本在新座标基下的表达矩阵 p*M
cankao = W'*imagedata;
msgbox(['训练完成'])

三,读取图像并识别

global im
global cankao
global W
global imgpj
global wts
global path
global img_path
im = double(im(:));
objectOne= W'*(im - imgpj);
distance = 100000000;
for k = 1:wts
    temp = norm(objectone - cankao(:,k));
    if(distance>temp)
        aimOne= k;
        distance = temp;
        aimpath = strcat(path, '/', img_path(aimone).name);
        axes( handles.axes2 )
        imshow(aimpath)
    end
end





推荐阅读
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • 怀疑是每次都在新建文件,具体代码如下 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
author-avatar
蕊儿巧乐-滋
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有