Matlab人脸检测算法详解

article/2025/11/8 12:21:59

这是一个Matlab人脸检测算法详解

  • 前言
  • 人脸检测结果
  • 算法详解
  • 源代码解析
  • 所调用函数解析
    • bwlabel(BW,n)
    • regionprops
    • rectangle
  • 总结

前言

目前主流的人脸检测与人脸识别算法主要基于人工神经网络进行训练与检测,本文基于数字图像处理解析一个非人工神经网络的有趣人脸检测算法。图片与源码可以从下文获取或点击这里获取:积分下载材料点这里,百度云下载材料点这里,提取码2333(可以的话积分下载支持一下呀)

人脸检测结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

算法详解

该算法主要通过识别二值图像下的最大连通区域来检测人脸,定义二值图像中宽长比小于1.8的最大连通区域(mx)为人脸区域。再将P的左上角坐标作为识别框的左上角坐标,以mx在X轴的延伸长度作为识别框在X与Y的延伸长度,从而绘制出一个黄色2像素宽度的正方形识别框。框中的区域即为该算法所识别的人脸区域。

源代码解析

clear all  %清除工作台中所有参数与数据
clc    %清除界面i=imread('5.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:10y1=1;y2=c;for j=1:10if(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<=100BW(x1:x2,y1:y2)=0;r1=x1;r2=x2;s1=y1;s2=y2;pr1=0;endimshow(BW);endy1=y1+c;y2=y2+c;endx1=x1+r;x2=x2+c;
end
figure(2)
subplot(1,2,1);
imshow(BW)
title('二值图像');L=bwlabel(BW,8);   %找到连通区域,定义为8连通
BB=regionprops(L,'BoundingBox');%联通区用边界框框取包含连通区域的最小矩形
BB1=struct2cell(BB);  %把结构体数组转换成元胞数组,每个元胞中含有4个数据
BB2=cell2mat(BB1);   %将元胞展开为行数为一的矩阵,BB2中元素的个数为BB1的4倍[s1,s2]=size(BB2);
mx=0;     %mx为最大连通区域,初值为0
for k=3:4:s2-1    %k=3的取值为连通区域的X方向扩展长度,逐级加4,即遍历每个连通区域的X长度p=BB2(1,k)*BB2(1,k+1);  %p为连通区域的面积if p>mx && (BB2(1,k+1)/BB2(1,k))<1.8  %选区宽长比大于1.8的最大连通区域mx=p;j=k;end
endsubplot(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','y','LineWidth',2);
%rectangle各参数为:起点坐标,颜色,宽度

所调用函数解析

imread(‘5.jpg’);
读取图像

rgb2gray(i)
将该图像转换为灰度图,参数i为读取的图像

im2bw(I)
将灰度图像转换为二值图像,参数I为灰度图像

floor(n);
朝负无穷大方向取整,参数n为任意数,对于复数,分别对实部和虚部取整

figure(1);
定义绘制图像的名称

imshow(I);
绘制图像,参数I为图像名称

subplot(m,n,p);
将多个图画到一个平面上的工具。其中,m表示是图排成m行,n表示图排成n列,p表示图所在的位置,p=1表示从左到右从上到下的第一个位置,p也可以为矩阵以表示其他行列

bwlabel(BW,n)

L=bwlabel(BW,n);
定义一个与BW大小相同的L矩阵,其中n的值为4或8,表示定义4连通或8连通
4连通:一个像素的上下左右4个方向有相邻的像素,则认为他们是连接的,这些像素的组成区域为4连通区域。
8连通:一个像素的上下左右,上左上右下左下右8个方向有相邻的像素,则认为他们是连接的,这些像素的组成区域为8连通区域。
例如:
BW =
1 1 1 0 0  1 1  0 0
1 1 1 0 0  1 1  0 0
1 1 1 0 1  1 1  1 0
1 1 1 0 0  1 1  0 0
0 0 0 0 0  1 1  0 0
1 1 1 0 0  0 0  1 1
1 1 1 0 0  0 0  1 1
1 1 1 0 0  0 0  1 1
1 1 1 1 1  0 0  1 1
则L=bwlabel(BW,4)为(相同数字表示在同一个连通区域):
L =
1 1 1 0 0  2 2  0 0
1 1 1 0 0  2 2  0 0
1 1 1 0 2  2 2  2 0
1 1 1 0 0  2 2  0 0
0 0 0 0 0  2 2  0 0
3 3 3 0 0  0 0  4 4
3 3 3 0 0  0 0  4 4
3 3 3 0 0  0 0  4 4
3 3 3 3 3  0 0  4 4

例如:
L=bwlabel(BW,8)为(相同数字表示在同一个连通区域):
L =
1 1 1 0 0  2 2  0 0
1 1 1 0 0  2 2  0 0
1 1 1 0 2  2 2  2 0
1 1 1 0 0  2 2  0 0
0 0 0 0 0  2 2  0 0
3 3 3 0 0  0 0  2 2
3 3 3 0 0  0 0  2 2
3 3 3 0 0  0 0  2 2
3 3 3 3 3  0 0  2 2

regionprops

BB=regionprops(L,‘BoundingBox’);
regionprops可以带有多种参数,BoundingBox表示为选区取包含连通区域的最小矩形
返回的结果为【x,y,w,h】,其中x与y为该矩形的左上角坐标,w与h为x与y方向上的延伸长度即矩形的长与宽。此外,其他参数及意义为:
Area:各区域像素总和
Centroid: 各区域重心
ConvexHull:包含该区域的最小凸多边形
EquivDiameter:与该区域具有相同面积的圆的直径

Image:与某区域具有相同大小的逻辑矩阵
FilledImage:与某区域具有相同大小的填充逻辑矩阵
FilledArea:填充区域图像中的on像素个数

ConvexArea: 填充区域凸多边形图像中的on像素个数
EulerNumber:几何拓扑中的一个拓扑不变量——欧拉数
Extrema:八方向区域极值点’

Solidity: 同时在区域和其最小凸多边形中的像素比例’
Extent:同时在区域和其最小边界矩形中的像素比例
PixelIdxList: 存储区域像素的索引下标
PixelList: 存储上述索引对应的像素坐标

BB1=struct2cell(BB);
把结构体数组转换成元胞数组,每个元胞元胞的元素为【x,y,w,h】

BB2=cell2mat(BB1);
将元胞展开为行数为一的矩阵,BB2中元素的个数为BB1的4倍

rectangle

rectangle(‘Position’,[x,y,w,h],‘EdgeColor’,‘y’,‘LineWidth’,2)
该函数为选取框绘制函数,【x,y,w,h】与上述参数含义相同
EdgeColor为颜色参数
LineWidth为边框线宽度参数
‘Curvature’,[1,1]表示x,y方向上的曲率都为1,即为圆弧
Facecolor为内填充颜色参数
等等

总结

这个算法虽然只是通过玩弄这些像素来实现人脸检测,精度有限,但是如果想要进行后续的人脸识别,这或许的一个减少手工标注数据集的好方法


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

相关文章

人脸检测算法落地详解

人脸检测 Face Detection 目标&#xff1a;人脸检测的目的是找出一张图片中的所有人脸的位置信息 人脸检测是人脸其他应用的基础&#xff0c;只有获取到了是否有人脸和人脸的精确的位置信息&#xff0c;其它的应用才能继续开展&#xff0c;所以说人脸检测是一个基础且重要的一…

MATLAB人脸检测算法

MATLAB人脸检测算法 人脸检测是将人脸从复杂的背景图像中检测出来&#xff0c;它是实现人脸识别的基础和前提。 肤色重建 使用人脸肤色模板对灰度图像进行肤色重建&#xff0c;使其变成彩色图像&#xff0c;效果如下&#xff1a; 在函数function Rgray2rgb1(img1,img2)中&a…

人脸检测算法

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网络爬虫

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