MATLAB人脸检测算法

article/2025/11/8 13:14:09

MATLAB人脸检测算法

人脸检测是将人脸从复杂的背景图像中检测出来,它是实现人脸识别的基础和前提。

肤色重建

使用人脸肤色模板对灰度图像进行肤色重建,使其变成彩色图像,效果如下:
在这里插入图片描述
在函数function R=gray2rgb1(img1,img2)中,img1代表需要彩色重建的灰度图像,img2代表彩色人脸模板。

function R=gray2rgb1(img1,img2)
% img1 - Source Image  (gray image)   
% img2 - Selected color image for coloring the gray image. imt=rgb2gray(im);
% imt=img1;
ims=img2;[sx sy sz]=size(imt);[tx ty tz]=size(ims);if sz~=1imt=rgb2gray(imt);endif tz~=3disp ('img2 must be a color image (not indexed)');elseimt(:,:,2)=imt(:,:,1);imt(:,:,3)=imt(:,:,1);% Converting to ycbcr color spacenspace1=rgb2ycbcr(ims);nspace2= rgb2ycbcr(imt);ms=double(nspace1(:,:,1));mt=double(nspace2(:,:,1));m1=max(max(ms));m2=min(min(ms));m3=max(max(mt));m4=min(min(mt));d1=m1-m2;d2=m3-m4;% Normalizationdx1=ms;dx2=mt;dx1=(dx1*255)/(255-d1);dx2=(dx2*255)/(255-d2);[mx,my,mz]=size(dx2);%Luminance Comparisondisp('Please wait..................');for i=1:mxfor j=1:myiy=dx2(i,j);tmp=abs(dx1-iy);ck=min(min(tmp));[r,c] = find(tmp==ck);ck=isempty(r);if (ck~=1)            nimage(i,j,2)=nspace1(r(1),c(1),2);nimage(i,j,3)=nspace1(r(1),c(1),3);nimage(i,j,1)=nspace2(i,j,1);           endendendrslt=ycbcr2rgb(nimage);figure,imshow(uint8(imt));figure,imshow(uint8(rslt));R=uint8(rslt);tocend  

非线性光照补偿

由于图像在取像时,人脸很容易受到周围环境中的关照影响,包括光源的方向,明暗等,这可能造成人脸区域的一些有效信息的丢失,从而导致人脸漏检和错检现象。为了解决人脸因为光照造成人脸检测率降低的问题,因此有必要对输入的图像光照补偿处理,下面使用非线性光照补偿。代码如下:

function [Dst]=nolinetransaction(Scr)
img_ycbcr=rgb2ycbcr(Scr);
img_y=img_ycbcr(:,:,1);
Dim=size(img_y);
Num=Dim(1)*Dim(2);
Pixsum=0.05*Num;
sum=0;
Sum=0;
[count,level]=imhist(img_y);
for i=1:256sum=sum+count(i);if sum>PixsumB=i-1;break;end
end
for i=256:-1:1Sum=Sum+count(i);if Sum>PixsumE=i+1;break;end
end
for i=1:Dim(1)for j=1:Dim(2)if img_y(i,j)<Bimg_y(i,j)=0;elseif img_y(i,j)>=B && img_y(i,j)<=Eimg_y(i,j)=255*(log(double(img_y(i,j))-log(B)))/(log(E)-log(B));elseimg_y(i,j)=255;endend
end
Dst=ycbcr2rgb(img_ycbcr);

人脸检测算法

根据人脸肤色在YCbCr空间上类似呈现高斯分布,因此可以根据这一特征,将一幅图像中的人脸和背景分开,实现二值化,高斯人脸检测代码如下:
在这里插入图片描述

function p=gaosi(x1)I=rgb2ycbcr(x1);        %颜色空间转换 % I=T_YCbCr(I);
% figure;
% imshow(I);[a,b,c]=size(I); %得到图像的像素点个数
cb=double(I(:,:,2));
cr=double(I(:,:,3));
for i=1:afor j=1:bw=[cb(i,j),cr(i,j)];m=[117.4316 148.5599];n=[260.1301 12.1430;12.1430 150.4574];p(i,j)=exp((-0.5)*(w-m)*inv(n)*(w-m)');%算某象素点的概率if (p(i,j)<0.5) p(i,j)=0;else p(i,j)=1;endend
end 

人脸框

通过对高斯人脸检测得到的二值图像进行形态学操作进一步确定人脸的位置并使用矩形框进行标记,在函数function []=kuang(p,x1)中,p代表二值图像,x1代表二值图像对应的RGB图像,具体代码如下:

function []=kuang(p,x1)
% SE = strel('disk',5); 
% imf=imopen(p,SE);         %开运算(即先腐蚀再膨胀),消除杂散点 
% imf=medfilt2(imf,[3,3]);%中值滤波
se=strel('disk',3);se1=strel('disk',1);imf=imerode(p,se);imf=imdilate(imf,se1);[w,h]=size(imf);imf=bwareaopen(imf,round(w*h/900));
%  imf=bwareaopen(imf,1000);%开运算,去除像素点少于1000的区域
figure;
imshow(imf);
[L,num]=bwlabel(imf,4);     %连通区域标记 
B=zeros(size(imf));
for i=1:numArea(i)=bwarea(L==i);%计算每个皮肤区域的面积
end
for i=1:num[r,c] = find(L==i) ;left(i)=min(c);right(i)=max(c);up(i)=min(r);down(i)=max(r);
end
for i=1:num %计算各矩形区域面积Rect_Area(i)=(down(i)-up(i))*(right(i)-left(i));
end
%计算各区域的填充率
Ratio=Area./Rect_Area;
for i=1:num if Ratio(i)>=0.5%若相应区域的填充率大于0.5则保留该区域[x,y]=find(L==i);%第i块区域的坐标值B=B+bwselect(imf,y,x,4);%把填充率大于0.5皮肤区域叠加起来   end      
end% B=bwareaopen(B,1000);%开运算,去除像素点少于1000的区域
figure;
imshow(B);%%%%%%%%%%%%%%%%%%%%%%%%%%根据面积比来进一步除去一些较小的非人脸区域%%%%%%%%%%%%%%%%%%%%%%%%%%
[L1,num1]=bwlabel(B,4);     %连通区域标记
B1=zeros(size(B));
for i=1:num1Area(i)=bwarea(L1==i);%计算每个皮肤区域的面积
end
maxarea=max(Area);%取最大值
q=Area/maxarea;%每块区域的面积与最大区域面积的比值   
for i=1:num1 if q(i)>=0.3%若相应区域的面积比值大于0.3则保留该区域[x,y]=find(L1==i);%第i块区域的坐标值B1=B1+bwselect(B,y,x,4);%把面积比值大于0.3皮肤区域叠加起来   end      
end
figure;
imshow(B1);%%%%%%%%%%%%%%%%%%%%%%%%%%根据肤色区域的长宽比来除去一些非人脸区域%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[L2,num2]=bwlabel(B1,4);     %连通区域标记 
B2=zeros(size(B1));
for i=1:num2[r,c] = find(L2==i);  left(i)=min(c);right(i)=max(c);up(i)=min(r);down(i)=max(r);
end
for i=1:num2if ((down(i)-up(i))/(right(i)-left(i)))>0.8&&((down(i)-up(i))/(right(i)-left(i)))<2[x,y]=find(L2==i);B2=B2+bwselect(B1,y,x,4);%%%把满足长宽比在0.8到2的区域留下end
end
figure,
imshow(B2);figure,
imshow(x1);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%把人脸框出来%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[L3 num3]=bwlabel(B2,8);     %连通区域标记
for i=1:num3[r,c] = find(L3==i);  left(i)=min(c);right(i)=max(c);up(i)=min(r);down(i)=max(r);
endhold on;
for i=1:num3if(down(i)>(up(i)+(right(i)-left(i))*1.2))     %人脸长宽比限制1.2down(i)=up(i)+(right(i)-left(i))*1.2;endx=[left(i);left(i);right(i);right(i);left(i)];y=[up(i);down(i);down(i);up(i);up(i)];plot(x,y,'g','LineWidth',2);      %画框
%     drawnow;
end
hold off;

主函数测试检测效果

clc
close all
I1=imread("需要检测的灰度图像地址");
I2=imread("人脸彩色图像模板地址");
R=gray2rgb1(I1,I2);%肤色重建
DST=nolinetransaction(Scr);%光照补偿
p=gaosi(DST);%高斯人脸检测二值化
kuang(p,R);%将图像中所有人脸使用矩形框进行标记,并显示

http://chatgpt.dhexx.cn/article/rvVvn7hU.shtml

相关文章

人脸检测算法

https://handong1587.github.io/deep_learning/2015/10/09/object-detection.html 人脸识别各论文参考 知乎一个栏目&#xff1a; https://zhuanlan.zhihu.com/p/25025596 首先介绍一下常用人脸检测的常用数据库&#xff1a; FDDB和WIDER FACE FDDB总共2845张图像&#xff0…

一文带你了解人脸检测算法的类型及其工作原理

在过去的几年里&#xff0c;人脸识别受到了广泛的关注&#xff0c;被认为是图像分析领域最有前途的应用之一。人脸检测可以考虑人脸识别操作的很大一部分。根据其强度将计算资源集中在持有人脸的图像部分。图片中的人脸检测方法很复杂&#xff0c;因为人脸存在可变性&#xff0…

人脸识别之人脸检测算法

人脸识别的一般步骤&#xff1a;人脸检测->人脸对齐->人脸特征提取->&#xff08;计算人脸的差值&#xff09;三元组损失/中心损失->差值小于某一阈值则为同一个人&#xff0c;差值大于某一阈值则不是同一人。 本文将对每一个步骤的技术现状&#xff0c;进行分析&a…

Python网络爬虫与信息提取(17)—— 题库爬取与整理+下载答案

前言 上一节实现了题目的整理,没整理答案是不完整的,所以这一节加上答案的爬取。 上一节地址:Python网络爬虫与信息提取(16)—— 题库爬取与整理 效果 思路 爬答案有点难搞,像这种题库的答案都是要么要会员,要么要登陆账号才能看答案,这种就比较费劲了,解决方案有…

Python 网络爬虫及数据可视化

网络爬虫及数据可视化 1 项目背景1.1Python的优势1.2网络爬虫1.3数据可视化1.4Python环境介绍1.4.1简介1.4.2特点 1.5扩展库介绍1.5.1安装模块1.5.2主要模块介绍 2 需求分析2.1 网络爬虫需求2.2 数据可视化需求 3 总体设计3.1 网页分析3.2 数据可视化设计 4 方案实施4.1 网络爬…

python网络爬虫权威指南 百度云-Python网络爬虫权威指南 PDF 第2版

给大家带来的一篇关于Python爬虫相关的电子书资源&#xff0c;介绍了关于Python、网络爬虫方面的内容&#xff0c;本书是由人民邮电出版社出版&#xff0c;格式为PDF&#xff0c;资源大小5.54 MB&#xff0c;瑞安米切尔编写&#xff0c;目前豆瓣、亚马逊、当当、京东等电子书综…

【python】基础网络爬虫教程

1.爬虫目的 用通俗易懂的话来说,是对多种类型数据(如文字,图片,音频,视频等)进行批量式的采集与存储。 本文为个人一些学习心得,举例对网页进行信息爬取操作,使用python中基础的方法进行爬取,便于理解学习。2.爬虫准备 需要对python有一些基础,对字符串,列表,循环结构等有了解。…

python网络爬虫及数据可视化

广东某学校的期末python作业 一、设计内容及要求 设计内容&#xff1a;对中国大学专业排名网站中2021年&#xff0c;计算机科学与技术专业&#xff0c;进行数据爬取和数据可视化。 URL&#xff1a; https://www.shanghairanking.cn/rankings/bcmr/2021/080901 设计要求&am…

python网络爬虫的流程图_Python 网络爬虫程序架构及运行流程

1 前言 Python开发网络爬虫获取网页数据的基本流程为: 发起请求 通过URL向服务器发起request请求,请求可以包含额外的header信息。 获取响应内容 服务器正常响应,将会收到一个response,即为所请求的网页内容,或许包含HTML,Json字符串或者二进制的数据(视频、图片)…

python网络爬虫--网页登录

&#xff11;、前言 主要用到python的selenium库&#xff0c;通过模仿浏览器行为定位登录所需的标签位置&#xff0c;实现网页登录功能&#xff0e;最后在码云(gitee)上测试自动登录功能&#xff0e; 2、selenium定位网页元素 关于selenium的使用前准备可以看到我之前的一篇…

python网络爬虫可以干什么,python网络爬虫有什么用

python爬虫能做什么 世界上80%的爬虫是基于Python开发的&#xff0c;学好爬虫技能&#xff0c;可为后续的大数据分析、挖掘、机器学习等提供重要的数据源。什么是爬虫&#xff1f; &#xff08;推荐学习&#xff1a;Python视频教程&#xff09;网络爬虫&#xff08;又被称为网…

python网络爬虫技术课后答案_尔雅《Python网络爬虫技术(2020年秋季学期)》网课答案...

尔雅《Python网络爬虫技术(2020年秋季学期)》网课答案 法律的一般含义是() 答&#xff1a;法律是由国家创制并保证实施的行为规范 下列属于急症手术的是 答&#xff1a;肝破裂 脾气统摄血液的功能&#xff0c;实际上是()的固摄作用的体现 答&#xff1a;气 中国古代南北争战中&…

(一)python网络爬虫(理论+实战)——爬虫的初步认识

小白都能学会的python网络爬虫专栏&#xff1a; https://blog.csdn.net/c1007857613/category_12127982.html 序言 本人从事爬虫相关工作已8年以上&#xff0c;从一个小白到能够熟练使用爬虫&#xff0c;中间也走了些弯路&#xff0c;希望以自身的学习经历&#xff0c;让大家能…

Python网络爬虫经典书籍推荐

1. Python编程&#xff1a;从入门到实践 - 2016 本书是一本针对所有层次的Python 读者而作的Python 入门书。全书分两部分&#xff1a;第一部分介绍用Python 编程所必须了解的基本概念&#xff0c;包括matplotlib、NumPy 和Pygal 等强大的Python 库和工具介绍&#xff0c;以及…

(二)python网络爬虫(理论+实战)——爬虫分类和基本流程

小白都能学会的python网络爬虫专栏&#xff1a; https://blog.csdn.net/c1007857613/category_12127982.html 序言 本人从事爬虫相关工作已8年以上&#xff0c;从一个小白到能够熟练使用爬虫&#xff0c;中间也走了些弯路&#xff0c;希望以自身的学习经历&#xff0c;让大家能…

python网络爬虫实验报告_Python网络爬虫实例讲解

聊一聊Python与网络爬虫。 1、爬虫的定义 爬虫&#xff1a;自动抓取互联网数据的程序。 2、爬虫的主要框架 爬虫程序的主要框架如上图所示&#xff0c;爬虫调度端通过URL管理器获取待爬取的URL链接&#xff0c;若URL管理器中存在待爬取的URL链接&#xff0c;爬虫调度器调用网…

Python网络爬虫简介与环境配置

第一章 Python网络爬虫简介与环境配置 1.1 网络爬虫简介 随着互联网的快速发展越来越多的信息被发布到互联网上&#xff0c;这些信息被嵌入到各种各样的网页结构及样式中。虽然搜索引擎可以辅助用户搜索这些网页信息&#xff0c;但是通用的搜索引擎的目标是尽可能覆盖全网络&…

五分钟学会Python网络爬虫

但不管怎样,爬虫技术是无罪的,还是值得我们开发人员去学习了解一下的。在学习之前,我们还是要先了解一下相关概念。 什么是爬虫 网络爬虫:又被称为网页蜘蛛,网络机器人,是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。 大数据时代,要进行数据分析,首先…

python爬虫简介

python爬虫是收集互联网数据的常用工具&#xff0c;近年来随着互联网的发展而快速发展。使用网络爬虫爬取网络数据首先要了解网络概念和主要分类&#xff0c;各类爬虫的系统结构、运作方式&#xff0c;常用策略&#xff0c;以及主要的应用场景&#xff0c;同时&#xff0c;出于…

python爬虫入门教程(非常详细),超级简单的Python爬虫教程

一、基础入门 1.1什么是爬虫 爬虫(spider&#xff0c;又网络爬虫)&#xff0c;是指向网站/网络发起请求&#xff0c;获取资源后分析并提取有用数据的程序。 从技术层面来说就是 通过程序模拟浏览器请求站点的行为&#xff0c;把站点返回的HTML代码/JSON数据/二进制数据&…