用MATLAB实现人脸识别

2023-11-20

1、人脸识别技术的细节

一般来说,人脸识别系统包括图像提取、人脸定位、图形预处理、以及人脸识别(身份确认或者身份查找)。系统输入一般是一张或者一系列含有未确定身份的人脸图像,以及人脸数据库中的若干已知身份的人脸图像或者相应的编码,而其输出则是一系列相似度得分,表明待识别的人脸的身份。

2、人脸识别技术的广泛应用

一项技术的问世和发展与人类的迫切需求是密切相关的,快速发展的社会经济和科学技术使得人类对安全(包括人身安全、隐私保护等)得认识越来越重视。人脸识别得一个重要应用就是人类的身份识别。一-般来说, 人类得身份识别方式分为三类:

1. 特征物品,包括各种证件和凭证,如身份证、驾驶证、房门钥匙、印章等;
2. 特殊知识,包括各种密码、口令和暗号等;

3、人类生物特征

包括各种人类得生理和行为特征,如人脸、指纹、手形、掌纹、虹膜、DNA、签名、语音等。前两类识别方式属于传统的身份识别技术,其特点是方便、快捷,但致命的缺点是安全性差、易伪造、易窃取。特殊物品可能会丢失、偷盗和复制,特殊知识可以被遗忘、混淆和泄漏。相比较而言,由于生物特征使人的内在属性,具有很强的自身稳定性和个体差异性,因此生物特征是身份识别的最理想依据。基于以上相对独特的生物特征,结合计算机技术,发展了众多的基于人类生物特征的身份识别技术,如DNA识别技术、指纹识别技术、虹膜识别技术、语音识别技术和人脸识别技术等。生物识别技术在上个世纪已经有了一定得发展,其中指纹识别技术已经趋近成熟,但人脸识别技术的研究还处于起步阶段。指纹、虹膜、掌纹等识别技术都需要被识别者的配合,有的识别技术还需要添置复杂昂贵的设备。人脸识别可以利用已有的照片或是摄像头远距离捕捉图像,无需特殊的采集设备,系统的成本低。并且自动人脸识别可以在当事人毫无觉察的情况下完成身份确认识别工作,这对反恐怖活动有非常重要的意义。基于人脸识别技术具有如此多的优势,因此它的应用前最非常广阔,已成为最具潜力的生物特征识别技术之一。

4、matlab分析人脸方法介绍

人脸识别之一:查找图片中的人脸并用方框圈出
这种大致步骤为:获取RGB图片—>图像处理—>人脸识别。

function Rer=Re()

%Rer=0;%%%0为初始值,若成功识别,则会变为1234

I=imread('face.jpg');%%被识别图片存储路径,要用绝对路径!!

%%%%%%%%%%%%%%%%%算法封装,可以看作一个黑盒子%%%%%%%%%%%%%%%%
O=rgb2ntsc(I);
G=O(:,:,2);
[m n]=size(G);
U=zeros(m,n);
for i=1:m
   for j=1:n
     if G(i,j)>0.03&&G(i,j)<0.16
        U(i,j)=1;
     end
   end
end
Rer=1;
sr=strel('disk',6);%%创建圆盘半径(创建结构元素)
C=imclose(U,sr);
L=bwlabel(C);
B=regionprops(L,'area');
Se=[B.Area];
Sm=max(Se);
if Sm>m*n/27       %%%%%每个程序都会经过这个,在96行结束,未能识别人脸
  B1=bwareaopen(C,Sm);
  k_y1=m;k2=m;l2=n;
  for i=1:m
    if any(B1(i,:))==1
       k_y1=i;
       break
    end
  end
  for i=k_y1:m
    if B1(i,:)==0
      k2=i;
      break
    end
  end
  for j=1:n
    if any(B1(:,j))==1
      l_y1=j;
      break
    end
  end
  for j=l_y1:n
    if B1(:,j)==0
      l2=j;
      break
    end
  end
  k_y=k2-k_y1;
  l=l2-l_y1;
  if k_y>.5*l&&k_y<3*l   %%%%%第二层if,未能识别人脸
    I1=imcrop(B1,[l_y1 k_y1 l .4*k_y]);
    [n1 m1]=size(I1);
     L1=bwlabel(I1);
     E=regionprops(L1,'area');
     Si=[E.Area];
     Sm=max(Si);
    if Sm/(n1*m1)>.3
       B2=bwareaopen(I1,floor(.5*Sm));
       g_y1=m1;
       g2=m1;
       for j=1:m1
          if any(B2(:,j))==1
             g_y1=j;
             break
          end
       end
       for j=g_y1:m1
           if B2(:,j)==0
              g2=j;
              break
           end
       end
       g=g2-g_y1;
       figure;
       imshow(I,'border','tight','InitialMagnification','fit');
       hold on
       h1=line([l_y1+g_y1,l_y1+g_y1+g],[k_y1,k_y1]);
       h2=line([l_y1+g_y1+g,l_y1+g_y1+g],[k_y1,k_y1+1.1*g]);
       h3=line([l_y1+g_y1+g,l_y1+g_y1],[k_y1+1.1*g,k_y1+1.1*g]);
       h4=line([l_y1+g_y1,l_y1+g_y1],[k_y1+1.1*g,k_y1]);
       h=[h1 h2 h3 h4];
       set(h,'Color',[1 0 0],'LineWidth',3);
       gfframe=getframe(gcf);
       gffim=frame2im(gfframe);
       imwrite(gffim,'recg_result.jpg','jpg'); %%%%存储图片命名,为了保存画红框的图片
       Rer=1;
       %fid=fopen('re.txt','w');
       %fprintf(fid,'%d',Rer);
       %fclose(fid);
    else%%%未能满足最近一个if判断,不能识别人脸
      figure;
      imshow(I);
      imwrite(I,'face_result.jpg','jpg'); %%%%存储图片命名
      Rer=2;
      %fid=fopen('re.txt','w');
      %fprintf(fid,'%d',Rer);
      %fclose(fid);
    end
  else
      figure;
      imshow(I);
      imwrite(I,'face_result.jpg','jpg'); %%%%存储图片命名
      Rer=3;
      %fid=fopen('re.txt','w');
      %fprintf(fid,'%d',Rer);
      %fclose(fid);
  end
else
  figure;
  imshow(I);
  imwrite(I,'face_result.jpg','jpg'); %%%%存储图片命名
  Rer=4;
  %fid=fopen('re.txt','w');
  %fprintf(fid,'%d',Rer);
  %fclose(fid);
end
end

人脸识别方法一效果图
效果图

人脸识别之二:由输入的人像识别出图片中人像
大致步骤为:获取RGB图片—>转换为灰度图像—>图像处理—>人脸识别。

clear all
clc
%获取原始图片
i=imread('face.jpg');
I=rgb2gray(i);        
BW=im2bw(I);             %利用阈值值变换法将灰度图像转换成二进制图像
figure(1);
imshow(BW);
%最小化背景
[n1 n2]=size(BW);
r=floor(n1/10);
c=floor(n2/10);
x1=1;x2=r;
s=r*c;

for i=1:10
    y1=1;y2=c;
    for j=1:10
        if(y2<=c || y2>=9*c) || (x1==1 || x2==r*10)
            loc=find(BW(x1:x2,y1:y2)==0);
            [o p]=size(loc);
            pr=o*100/s;
            if pr<=100
                BW(x1:x2,y1:y2)=0;
                r1=x1;r2=x2;s1=y1;s2=y2;
                pr1=0;
            end
            imshow(BW);
        end
        y1=y1+c;
        y2=y2+c;
    end
    x1=x1+r;
    x2=x2+c;
end
figure(2)
subplot(1,2,1);
imshow(BW)
title('图像处理');
%人脸识别
L=bwlabel(BW,8);
BB=regionprops(L,'BoundingBox');
BB1=struct2cell(BB);
BB2=cell2mat(BB1);
[s1 s2]=size(BB2);
mx=0;
for k=3:4:s2-1
    p=BB2(1,k)*BB2(1,k+1);
    if p>mx && (BB2(1,k)/BB2(1,k+1))<1.8
        mx=p;
        j=k;
    end
end
subplot(1,2,2);
title('人脸识别');
imshow(I);
hold on;
rectangle('Position',[BB2(1,j-2),BB2(1,j-1),BB2(1,j),BB2(1,j)],'EdgeColor','r')

人脸识别方法二效果图
效果图

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用MATLAB实现人脸识别 的相关文章

  • 将 3d 矩阵重塑为 2d 矩阵

    我有一个 3d 矩阵 n by m by t 在 MATLAB 中表示n by m一段时间内网格中的测量值 我想要一个二维矩阵 其中空间信息消失了 只有n m随着时间的推移测量t剩下 即 n m by t 我怎样才能做到这一点 你需要命令r
  • Matlab 编辑器不使用 emacs 快捷方式

    Is there some way I can make the matlab integrated editor not use emacs shortcut but use more normal shortcuts such that
  • 将组合字符串和数字输入的元胞数组写入文本文件

    考虑以下 DateTime 2007 01 01 00 00 2007 02 01 00 00 2007 03 01 00 00 Headers Datetime Data Dat 100 200 300 Data DateTime num
  • 通过傅里叶空间填充进行插值

    我最近尝试在 matlab 上实现一个在傅立叶域中使用零填充的插值方法的简单示例 但我无法正常工作 我总是有一个小的频移 在傅里叶空间中几乎不可见 但它在时空上产生了巨大的误差 由于傅里叶空间中的零填充似乎是一种常见 且快速 的插值方法 因
  • 为什么matlab的mldivide比dgels好这么多?

    Solve Ax b 真正的双 A是超定的 Mx2 其中 M gt gt 2 b是MX1 我运行了大量的数据mldivide 并且结果非常好 我用 MKL 写了一个 mex 例程LAPACKE dgels但它远没有那么好 结果有大量噪音 并
  • 在 Matlab 中显示有理数

    我有两个整数 m n 它们一起形成 m n 形式的有理数 现在我只想以这种理性的形式在 Matlab 中显示它们 我可以通过这样做来做到这一点 char sym m n 所以 如果 例如m 1 n 2 Matlab将显示1 2 然而 如果m
  • 从 imread 返回的 ndims

    我正在从文件夹中选取图像 尺寸为128 128 为此 我使用以下代码行 FileName PathName uigetfile jpg Select the Cover Image file fullfile PathName FileNa
  • 归一化互相关的基础知识

    我正在尝试使用范数校正2 归一化互相关 http en wikipedia org wiki Cross correlation Normalized cross correlation 来自 MATLAB 用于计算发育中胚胎中移动形状的速
  • matlab部署工具到java包javac错误

    我正在尝试将我的程序包装为与 java 一起使用 我首先尝试了一个简单的 hello world 你好世界 m disp 你好世界 我使用了deploytool并选择了java包 当它到达这一行时 执行命令 javac verbose cl
  • Matlab颜色检测

    我试图一致地检测同一场景的图像之间的某种颜色 这个想法是根据颜色配置文件识别一组对象 因此 例如 如果给我一个带有绿色球的场景 并且我选择绿色作为我的调色板的一部分 我想要一个具有反映它检测到球的矩阵的函数 任何人都可以为这个项目推荐一些
  • 平衡两轮机器人而不使其向前/向后漂移

    我正在尝试设计一个控制器来平衡 2 轮机器人 约 13 公斤 并使其能够抵抗外力 例如 如果有人踢它 它不应该掉落 也不应该无限期地向前 向后漂移 我对大多数控制技术 LQR 滑模控制 PID 等 都很有经验 但我在网上看到大多数人使用 L
  • 如何为已编译的 MATLAB 创建安装程序并要求用户接受我们的许可条款?

    我正在 MATLAB 中编写程序分发给 Windows 用户 我使用 MATLAB 编译器和 MATLAB r2014a 版本来创建程序 我可以使用 MATLAB 应用程序编译器创建 Windows 安装程序 并且它的工作效果可以接受 但是
  • 直方图均衡结果

    I am trying to code histogram equalization by my self but the results are different from the built in function in matlab
  • 如何在Matlab中绘制网络?

    我有一个矩阵AMatlab中的维数mx2每行包含两个节点的标签 显示网络中的直接链接 例如 如果网络有4矩阵的节点A可能A 1 2 1 3 2 1 2 4 3 2 4 1 4 2 其中第一行表示有一个链接来自1 to 2 第二行表示有一个链
  • 在 matlab 代码中使用 dll 文件

    我需要使用 Matlab 中由 dll 文件定义的函数 我有一个例子 那个家伙将 dll 转换为 mexw32 文件 但我知道我是如何做到这一点的 我尝试使用加载库但它没有创建任何文件 我怎样才能做到这一点 loadlibrary http
  • Matlab:条形图中缺少标签

    使用 Matlab 2012 和 2013 我发现设置XTickLabel on a bar图表最多只能使用 15 个柱 如果条形较多 则标签会丢失 如下所示 绘制 15 个条形图 N 15 x 1 N labels num2str x d
  • 获取向量幂的有效方法

    我编写了一个代码 在数值上使用勒让德多项式直至某个高 n 阶 例如 case 8 p 6435 x 8 12012 x 6 6930 x 4 1260 x 2 35 128 return case 9 如果向量x太长这会变得很慢 我发现说之
  • 禁止 MATLAB 自动获取焦点[重复]

    这个问题在这里已经有答案了 我有以下问题 在我的 MATLAB 代码中 我使用如下语句 figure 1 更改某些数据的目标数字 问题是 在此 MATLAB 之后 系统将焦点集中在具有该图形的窗口上 当我在后台运行一个大脚本并尝试在计算机上
  • 将 Matlab 数组移植到 C/C++

    我正在将 matlab 程序移植到 C C 我有几个问题 但最重要的问题之一是 Matlab 将任何维度的数组都视为相同 假设我们有一个这样的函数 function result f A B C result A 2 B C A B and
  • 如何在 MATLAB 编译的应用程序中运行外部 .m 代码? [复制]

    这个问题在这里已经有答案了 我有一个 MATLAB 项目 我使用 MCC 对其进行编译以获得单个可执行文件 然后我想知道外部程序员是否可以在 exe 中执行他的一些 m 文件 而无需重新编译整个项目 重点是提供一个应用程序 其他开发人员可以

随机推荐

  • Matlab两种求相位的方法

    在matlab中有两种求相位方法 1 使用phase函数 比如a 1 j 2 phase a 则可以就a的相位 这个函数取实部为x轴 虚部为y轴 2 使用函数atan2 atan2 y x 注意y轴的数是放在前面的 atan2 2 1 和刚
  • C++入门教程(一)

    目录 一 初识C 2 程序结构 二 顺序结构程序设计 1 头文件 1 1 iostream 1 2 cstdio 1 3 cmath 2 名称空间 3 输入和输出 3 1输入 3 2输出 3 3各种输入输出优点缺点比较 4 变量 4 1赋值
  • 【人工智能】—_贝叶斯网络、概率图模型、全局语义、因果链、朴素贝叶斯模型、枚举推理、变量消元

    文章目录 频率学派 vs 贝叶斯学派 贝叶斯学派 Probability 概率 独立性 条件独立性 Probability Theory 概率论 Graphical models 概率图模型 什么是图模型 Graphical Models
  • pytorch1.4+tensorboard不显示graph计算图的问题

    电脑安装的pytoch版本为1 4 tensorboard无法显示计算图graph 但可以显示scalar 经过多方查证为pytorch版本问题 目前graph显示仅支持到pytorch1 3 处理如下 1 卸载当前的pytorch并安装低
  • springboot中用undertow踩坑记

    场景 准备基于springboot的静态资源实现mp4资源的播放 不同版本的springboot下效果不一样 可能导致正常的资源不可用 本文测试了几个版本 也针对这种情况提出了解决建议 希望对你的工作有所帮助 众所周知 springboot
  • 简单的方法解决ORA-07104:字符串文字太长

    工作中 保存数据的时候出现该问题 说字符串问题过长 过长的字段是一个用来保存xml格式的字符串 字段类型已经设置成CLOB 但是还是出现字符串过长问题 在SQLServer应该不会出现该问题 该问题中字符串文字太长 并不是字段的字符串过长
  • React配置@src根路径

    第一种 直接修改node modules包中的webpack config js文件 找到node modules react scripts config webpack config js文件 修改其中alias中的配置 添加 src
  • zotero和obsidian图片无法显示问题(可能的解决思路之一)(bibnotes formatter配置)

    我的zotero图片笔记无法导入obsidian 看了目前的大部分博主的内容 都是教你将bibnotes formatter中 image import下的zotero local folder路径改为storage前的路径 例如 我的位置
  • SSL踩坑ERR_SSL_VERSION_OR_CIPHER_MISMATCH

    最近公司项目开发了一个微信小程序 并且部署测试OK 由于微信小程序调用的后端接口必须是HTTPS 所以给接口安装了SSL 第一天测试都正常 第二天早上再使用时页面无响应 抓包发现是后端接口抛出 net ERR SSL VERSION OR
  • 背包九讲-01背包

    动态规划核心思维能力 动态规划是求最优解问题的重要解法 也是信息学奥赛中每年必考的内容之一 学习动态规划更应该注重此类问题思维能力的锻炼 多多做题 一般 gt 50题后方可入门 注意理解以下概念 1 状态 2 状态属性 3 状态的计算 也就
  • Microsoft Office Excel 不能访问文件 的解决办法

    Microsoft Office Excel 不能访问文件 a xls 可能的原因有 文件名称或路径不存在 文件正被其他程序使用 您正要保存的工作簿与当前打开的工作簿同名 This solution is Windows 2008 Serv
  • 三维实时重建BundleFusion

    转自 计算机视觉方向简介 深度相机室内实时稠密三维重建 知乎 室内场景的稠密三维重建目前是一个非常热的研究领域 其目的是使用消费级相机 本文特指深度相机 对室内场景进行扫描 自动生成一个精确完整的三维模型 这里所说的室内可以是一个区域 一个
  • 前端基础(三)- ES7~ES12

    为了方便记忆和称呼 ES2015之后的新知识点我们都统称ES6语法 就没必要去划分得那么细 ES7 2016 Array prototype includes includes方法可以判断一个数组是否包含某个指定的值 如果存在返回true
  • 多分类学习、多标签学习、多任务学习的区别

    Multi class Multi label Multi task 三者之间的区别与相同之处 1 直观解释 多分类学习 Multi class 一个分类器 但分的类别是包含多个的 例如 分类器判断苹果的颜色是 红色 黄色 青色 白色 这是
  • 移动端H5开发遇到的问题

    移动端开发必会出现的问题和解决方案 H5开发过程中难免会遇到一些兼容性等爬过坑的问题 移动端 H5 相关问题汇总 1px 问题 响应式布局 iOS 滑动不流畅 iOS 上拉边界下拉出现白色空白 页面件放大或缩小不确定性行为 click 点击
  • 让控制台输出彩色日志 windows

    经常看到一些开源软件 例如NDK编译的时候 操作系统启动的时候 打印的输出很多是彩色的 这样比较容易分辨哪些是重点 增强可读性 代码如下 cpp view plain copy include
  • 深度解析C++模版

    在C 发明阶段 C 之父Stroustrup和贝尔实验室的C 小组对原先的宏方法进行了修订 对其进行了简化并将它从预处理范围移入了编译器 这种新的代码替换装置被称为模板 而且它变现了完全不同的代码重用方法 模板对源代码重用 而不是通过继承和
  • Python的PIL库

    Python图像库PIL Python Image Library 是python的第三方图像处理库 图像类Image class Image类是PIL中的核心类 比如从文件中加载一张图像 处理其他形式的图像 或者是从头创造一张图像等 Im
  • Python代码实现发送163邮件(IMAP服务)

    1 注册163邮箱并登陆 https mail 163 com 2 开启 IMAP IMAP 服务 3 编写代码 进行发邮件操作 import smtplib from email mime text import MIMEText fro
  • 用MATLAB实现人脸识别

    1 人脸识别技术的细节 一般来说 人脸识别系统包括图像提取 人脸定位 图形预处理 以及人脸识别 身份确认或者身份查找 系统输入一般是一张或者一系列含有未确定身份的人脸图像 以及人脸数据库中的若干已知身份的人脸图像或者相应的编码 而其输出则是