基于matlab程序实现人脸识别

1.人脸识别流程

1.1.1基本原理

基于YCbCr颜色空间的肤色模型进行肤色分割。在YCbCr色彩空间内对肤色进行了建模发现,肤色聚类区域在Cb—Cr子平面上的投影将缩减,与中心区域显著不同。采用这种方法的图像分割已经能够较为精确的将人脸和非人脸分割开来。

1.1.2流程图

  1. 人脸识别程序
  1. 人脸和非人脸区域分割程序

function result = skin(Y,Cb,Cr)

%SKIN Summary of this function goes here

%   Detailed explanation goes here

a=25.39;

b=14.03;

ecx=1.60;

ecy=2.41;

sita=2.53;

cx=19.38;

cy=12.02;

xishu=[cos(sita) sin(sita);-sin(sita) cos(sita)];

%如果亮度大于230,则将长短轴同时扩大为原来的1.1倍

if(Y>230)

    a=1.1*a;

    b=41*b;

end

%根据公式进行计算

Cb=double(Cb);

Cr=double(Cr);

t=[(Cb-cx);(Cr-cy)];

temp=xishu*t;

value=(temp(1)-ecx)^2/a2+(temp(2)-ecy)^2/b^2;

%大于1则不是肤色,返回0;否则为肤色,返回1

if value>1

    result=0;

else

    result=1;

end

end

  1. 人脸的确认程序

function eye = findeye(bImage,x,y,w,h)

%FINDEYE Summary of this function goes here

%   Detailed explanation goes here

part=zeros(h,w);

%二值化

for i=y:(y+h)

    for j=x:(x+w)

        if bImage(i,j)==0

            part(i-y+1,j-x+1)=255;

        else

            part(i-y+1,j-x+1)=0;

        end

    end

end

[L,num]=bwlabel(part,8);

%如果区域中有两个以上的矩形则认为有眼睛

if num<2

    eye=0;

else

    eye=1;

end

end

  1. 人脸识别主程序

clear all;

%读入原始图像

I=imread('face3.jpg');

gray=rgb2gray(I);

ycbcr=rgb2ycbcr(I);%将图像转化为YCbCr空间

heighth=size(gray,1);%读取图像尺寸

width=size(gray,2);

for i=1:heighth %利用肤色模型二值化图像

    for j=1:width

        Y=ycbcr(i,j,1);

        Cb=ycbcr(i,j,2);

        Cr=ycbcr(i,j,3);

        if(Y<80)

            gray(i,j)=0;

        else

            if(skin(Y,Cb,Cr)==1)%根据色彩模型进行图像二值化

                gray(i,j)=255;

            else

                gray(i,j)=0;

            end

        end

    end

end

se=strel('arbitrary',eye(5));%二值图像形态学处理

gray=imopen(gray,se);

figure;imshow(gray)

[L,num]=bwlabel(gray,8);%采用标记方法选出图中的白色区域

stats=regionprops(L,'BoundingBox');%度量区域属性

n=1;%存放经过筛选以后得到的所有矩形块

result=zeros(n,4);

figure,imshow(I);

hold on;

for i=1:num %开始筛选特定区域

    box=stats(i).BoundingBox;

    x=box(1);%矩形坐标X

    y=box(2);%矩形坐标Y

    w=box(3);%矩形宽度w

    h=box(4);%矩形高度h

    ratio=h/w;%宽度和高度的比例

    ux=uint16(x);

    uy=uint8(y);

    if ux>1

        ux=ux-1;

    end

    if uy>1

        uy=uy-1;

    end

    if w<20 || h<20|| w*h<400 %矩形长宽的范围和矩形的面积可自行设定

        continue

    elseif ratio<2 && ratio>0.6 && findeye(gray,ux,uy,w,h)==1

        %根据“三庭五眼”规则高度和宽度比例应该在(0.6,2)内;

        result(n,:)=[ux uy w h];

        n=n+1;

    end

end

if size(result,1)==1 && result(1,1)>0 %对可能是人脸的区域进行标记

    rectangle('Position',[result(1,1),result(1,2),result(1,3),result(1,4)],'EdgeColor','r');

else

    %如果满足条件的矩形区域大于1,则再根据其他信息进行筛选

    a=0;

    arr1=[];arr2=[];

    for m=1:size(result,1)

        m1=result(m,1);

        m2=result(m,2);

        m3=result(m,3);

        m4=result(m,4);

        %得到符合和人脸匹配的数据

      

    end

    %得到人脸长度和宽度的最小区域

    arr3=[];arr3=sort(arr1,'ascend');

    arr4=[];arr4=sort(arr2,'ascend');

    %根据得到的数据标定最终的人脸区域

    for m=1:size(result,1)

        m1=result(m,1);

        m2=result(m,2);

        m3=result(m,3);

        m4=result(m,4);

        %最终标定人脸

        if m1+m3<width && m2+m4<heighth && m3<0.2*width

            m3=arr3(1);

            m4=arr4(1);

            rectangle('Position',[m1,m2,m3,m4],'EdgeColor','r');

        end

    end

end

(4)程序说明

人脸识别程序主要包含三个程序模块,人脸识别主程序由三部分构成。第一部分:将图像转化为YCbCr颜色空间,根据色彩模型进行图像二值化,二值化图像进行形态学处理、开运算,显示二值图像;第二部分:采用标记方法选取出图中的白色区域,度量区域属性,存放经过筛选以后得到的所有矩形块,筛选特定区域,存储人脸的矩形区域;第三部分:对于所有人脸的矩形区域,如果满足条件的矩形区域大于1则再根据其他信息进行筛选,标记最终的人脸区域。

图像分割程序中,利用肤色可以较为精确的将人脸和非人脸区域分割开来,得到较为精确的二值化图像。

人脸的确认程序,以存储的所有矩形区域作为研究对象,当区域内有眼睛存在时,才认为此区域为人脸区域

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/925565.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SQL Server管理员sa登录失败原因

文章目录 一、开启混合登录模式二、启用sa三、更改密码四、登录sa一、开启混合登录模式 用Windows身份登录数据库服务。 在连接名上右键→属性。 在安全性选项卡下,选择【SQL Server和Windows身份验证模式】,点击【确定】,提示需要重启服务。 Win+R,输入指令:services.ms…

15分钟做完一个小程序,腾讯这个工具有点东西

我记得很久之前&#xff0c;我们都在讲什么低代码/无代码平台&#xff0c;这个概念很久了&#xff0c;但是&#xff0c;一直没有很好的落地&#xff0c;整体的效果也不算好。 自从去年 ChatGPT 这类大模型大火以来&#xff0c;各大科技公司也都推出了很多 AI 代码助手&#xff…

探秘多源异构数据:开启数据融合新时代

多源异构数据&#xff0c;其 “多源” 体现了数据来源的广泛多样性。在当今数字化时代&#xff0c;数据可能来自于不同的系统&#xff0c;比如企业内部可能同时使用多种管理系统&#xff0c;如 ERP&#xff08;企业资源计划&#xff09;系统、CRM&#xff08;客户关系管理&…

R语言结构方程模型(SEM)在生态学领域中的应用

目录 专题一、R/Rstudio简介及入门 专题二、结构方程模型&#xff08;SEM&#xff09;介绍 专题三&#xff1a;R语言SEM分析入门&#xff1a;lavaan VS piecewiseSEM 专题四&#xff1a;SEM全局估计&#xff08;lavaan&#xff09;在生态学领域高阶应用 专题五&#xff1…

springboot中使用mongodb完成评论功能

pom文件中引入 <!-- mongodb --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> yml中配置连接 data:mongodb:uri: mongodb://admin:1234561…

K8S版本和istio版本的对照关系

版本对照关系 下载地址1 下载地址2

Milvus×Florence:一文读懂如何构建多任务视觉模型

近两年来多任务学习&#xff08;Multi-task learning&#xff09;正取代传统的单任务学习&#xff08;single-task learning&#xff09;&#xff0c;逐渐成为人工智能领域的主流研究方向。其原因在于&#xff0c;多任务学习可以让我们以最少的人力投入&#xff0c;获得尽可能多…

课题组自主发展了哪些CMAQ模式预报相关的改进技术?

空气污染问题日益受到各级政府以及社会公众的高度重视&#xff0c;从实时的数据监测公布到空气质量数值预报及预报产品的发布&#xff0c;我国在空气质量监测和预报方面取得了一定进展。随着计算机技术的高速发展、空气污染监测手段的提高和人们对大气物理化学过程认识的深入&a…

CAD 文件 批量转为PDF或批量打印

CAD 文件 批量转为PDF或批量打印&#xff0c;还是比较稳定的 1.需要本地安装CAD软件 2.通过 Everything 搜索工具搜索&#xff0c;DWG To PDF.pc3 &#xff0c;获取到文件目录 &#xff0c;替换到代码中&#xff0c; originalValue ACADPref.PrinterConfigPath \ r"C:…

家校通小程序实战教程04教师管理

目录 1 创建数据源2 搭建管理后台3 搭建查询条件4 功能测试总结 我们上一篇介绍了如何将学生加入班级&#xff0c;学生加入之后就需要教师加入了。教师分为任课老师和班主任&#xff0c;班主任相当于一个班级的管理员&#xff0c;日常可以发布各种任务&#xff0c;发布接龙&…

即时通讯| IM+RTC在AI技术加持下的社交体验

即时通讯作为互联网的重要应用之一&#xff0c;见证了中国互联网30年发展的辉煌历程。 它从最初的文字交流&#xff0c;发展到如今的语音、视频通话&#xff0c;甚至是虚拟现实社交&#xff0c;已经渗透到生活的社交、娱乐、商务等方方面面&#xff0c;成为现代社会不可或缺的一…

基于 Spring Boot 实现图片的服务器本地存储及前端回显

&#x1f3af;导读&#xff1a;本文探讨了在网站开发中图片存储的各种方法&#xff0c;包括本地文件系统存储、对象存储服务&#xff08;如阿里云OSS&#xff09;、数据库存储、分布式文件系统及内容分发网络&#xff08;CDN&#xff09;。文中详细对比了这些方法的优缺点&…

HCIA笔记6--路由基础

0. 概念 自治系统&#xff1a;一个统一管理的大型网络&#xff0c;由路由器组成的集合。 路由器隔离广播域&#xff0c;交换机隔离冲突域。 1.路由器工作原理 路由器根据路由表进行转发数据包&#xff1b; 路由表中没有路由&#xff0c;直接丢弃该数据包路由表中只有一条路…

Gentoo Linux部署LNMP

一、安装nginx 1.gentoo-chxf ~ # emerge -av nginx 提示配置文件需更新 2.gentoo-chxf ~ # etc-update 3.gentoo-chxf ~ # emerge -av nginx 4.查看并启动nginx gentoo-chxf ~ # systemctl status nginx gentoo-chxf ~ # systemctl start nginx gentoo-chxf ~ # syst…

DNS欺骗与钓鱼网站

本章节主要利用中间人攻击&#xff0c;DNS欺骗&#xff0c;实现被攻击者访问钓鱼网站&#xff0c;并实现收集被攻击者的登录用户名与密码。 链接&#xff1a;https://pan.baidu.com/s/1Os4HY-8BNWbVjpgQ1Bw-4Q 提取码&#xff1a;2lab 一、实训内容&#xff1a;DNS欺骗、AR…

【C++】数据类型与操作实践:详细解析与优化

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目一&#xff1a;三个数的反序输出1.1 题目描述与代码实现代码实现&#xff1a; 1.2 代码解析与细节说明1.3 使用 int 类型的合理性分析1.4 其他数据类型的考虑1.5 代码优…

python图像彩色数字化

效果展示&#xff1a; 目录结构&#xff1a; alphabets.py GENERAL {"simple": "%#*-:. ","complex": "$B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_~<>i!lI;:,\"^. " } # Full list could be found here…

【Linux】TCP网络编程

目录 V1_Echo_Server V2_Echo_Server多进程版本 V3_Echo_Server多线程版本 V3-1_多线程远程命令执行 V4_Echo_Server线程池版本 V1_Echo_Server TcpServer的上层调用如下&#xff0c;和UdpServer几乎一样&#xff1a; 而在InitServer中&#xff0c;大部分也和UDP那里一样&…

如何选择适合的网站关键词?

在做谷歌SEO时&#xff0c;选对关键词是成功的一半。很多人以为找到搜索量大的词就可以了&#xff0c;但实际上&#xff0c;关键词选择并不只是看流量高低&#xff0c;更重要的是与你的用户需求是否匹配。要想精准定位用户&#xff0c;首先需要了解你的目标受众是谁&#xff0c…

AI-agent矩阵营销:让品牌传播无处不在

矩阵营销是一种通过多平台联动构建品牌影响力的策略&#xff0c;而 AI-agent 技术让这一策略变得更加智能化。AI社媒引流王凭借其矩阵管理功能&#xff0c;帮助品牌在多个平台上实现深度覆盖与精准传播。 1. 矩阵营销的优势 品牌触达更广&#xff1a;多平台联动可以覆盖不同用…